commit: 27fc49d74546d689307e1e712e0b46ccce98867b
parent: 7e5e33df48e507e18a226edc8dfecbf554d38647
Author: Eugen Rochko <eugen@zeonfederated.com>
Date: Mon, 28 Nov 2016 18:45:13 +0100
Add simple admin overview of PuSH subscriptions
Diffstat:
9 files changed, 97 insertions(+), 0 deletions(-)
diff --git a/app/assets/stylesheets/application.scss b/app/assets/stylesheets/application.scss
@@ -234,3 +234,4 @@ body {
@import 'stream_entries';
@import 'components';
@import 'about';
+@import 'tables';
diff --git a/app/assets/stylesheets/tables.scss b/app/assets/stylesheets/tables.scss
@@ -0,0 +1,25 @@
+.table {
+ width: 100%;
+ max-width: 100%;
+ border-spacing: 0;
+ border-collapse: collapse;
+
+ th, td {
+ padding: 8px;
+ line-height: 1.42857143;
+ vertical-align: top;
+ border-top: 1px solid #ddd;
+ text-align: left;
+ }
+
+ & > thead > tr > th {
+ vertical-align: bottom;
+ border-bottom: 2px solid #ddd;
+ border-top: 0;
+ font-weight: 500;
+ }
+}
+
+samp {
+ font-family: 'Roboto Mono', monospace;
+}
diff --git a/app/controllers/admin/pubsubhubbub_controller.rb b/app/controllers/admin/pubsubhubbub_controller.rb
@@ -0,0 +1,11 @@
+# frozen_string_literal: true
+
+class Admin::PubsubhubbubController < ApplicationController
+ before_action :require_admin!
+
+ layout 'public'
+
+ def index
+ @subscriptions = Subscription.includes(:account).paginate(page: params[:page], per_page: 40)
+ end
+end
diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb
@@ -31,6 +31,10 @@ class ApplicationController < ActionController::Base
I18n.locale = I18n.default_locale
end
+ def require_admin!
+ redirect_to root_path unless current_user&.admin?
+ end
+
protected
def not_found
diff --git a/app/helpers/admin/pubsubhubbub_helper.rb b/app/helpers/admin/pubsubhubbub_helper.rb
@@ -0,0 +1,2 @@
+module Admin::PubsubhubbubHelper
+end
diff --git a/app/views/admin/pubsubhubbub/index.html.haml b/app/views/admin/pubsubhubbub/index.html.haml
@@ -0,0 +1,20 @@
+%table.table
+ %thead
+ %tr
+ %th Topic
+ %th Callback URL
+ %th Confirmed
+ %th Expires in
+ %tbody
+ - @subscriptions.each do |subscription|
+ %tr
+ %td
+ %samp= subscription.account.acct
+ %td
+ %samp= subscription.callback_url
+ %td
+ - if subscription.confirmed?
+ %i.fa.fa-check
+ %td= distance_of_time_in_words(Time.now, subscription.expires_at)
+
+= will_paginate @subscriptions, pagination_options
diff --git a/config/routes.rb b/config/routes.rb
@@ -44,6 +44,10 @@ Rails.application.routes.draw do
resources :media, only: [:show]
resources :tags, only: [:show]
+ namespace :admin do
+ resources :pubsubhubbub, only: [:index]
+ end
+
namespace :api do
# PubSubHubbub outgoing subscriptions
resources :subscriptions, only: [:show]
diff --git a/spec/controllers/admin/pubsubhubbub_controller_spec.rb b/spec/controllers/admin/pubsubhubbub_controller_spec.rb
@@ -0,0 +1,15 @@
+# frozen_string_literal: true
+require 'rails_helper'
+
+RSpec.describe Admin::PubsubhubbubController, type: :controller do
+ describe 'GET #index' do
+ before do
+ sign_in :user, Fabricate(:user, admin: true)
+ end
+
+ it 'returns http success' do
+ get :index
+ expect(response).to have_http_status(:success)
+ end
+ end
+end
diff --git a/spec/helpers/admin/pubsubhubbub_helper_spec.rb b/spec/helpers/admin/pubsubhubbub_helper_spec.rb
@@ -0,0 +1,15 @@
+require 'rails_helper'
+
+# Specs in this file have access to a helper object that includes
+# the Admin::PubsubhubbubHelper. For example:
+#
+# describe Admin::PubsubhubbubHelper do
+# describe "string concat" do
+# it "concats two strings with spaces" do
+# expect(helper.concat_strings("this","that")).to eq("this that")
+# end
+# end
+# end
+RSpec.describe Admin::PubsubhubbubHelper, type: :helper do
+ pending "add some examples to (or delete) #{__FILE__}"
+end