summaryrefslogtreecommitdiffstats
path: root/app/controllers
diff options
context:
space:
mode:
Diffstat (limited to 'app/controllers')
-rw-r--r--app/controllers/admin/account_moderation_notes_controller.rb56
-rw-r--r--app/controllers/admin/accounts_controller.rb9
-rw-r--r--app/controllers/admin/base_controller.rb4
-rw-r--r--app/controllers/admin/confirmations_controller.rb9
-rw-r--r--app/controllers/admin/custom_emojis_controller.rb11
-rw-r--r--app/controllers/admin/domain_blocks_controller.rb9
-rw-r--r--app/controllers/admin/email_domain_blocks_controller.rb5
-rw-r--r--app/controllers/admin/instances_controller.rb2
-rw-r--r--app/controllers/admin/reported_statuses_controller.rb9
-rw-r--r--app/controllers/admin/reports_controller.rb3
-rw-r--r--app/controllers/admin/resets_controller.rb9
-rw-r--r--app/controllers/admin/roles_controller.rb25
-rw-r--r--app/controllers/admin/settings_controller.rb3
-rw-r--r--app/controllers/admin/silences_controller.rb2
-rw-r--r--app/controllers/admin/statuses_controller.rb17
-rw-r--r--app/controllers/admin/subscriptions_controller.rb1
-rw-r--r--app/controllers/admin/suspensions_controller.rb2
-rw-r--r--app/controllers/admin/two_factor_authentications_controller.rb1
-rw-r--r--app/controllers/api/v1/reports_controller.rb2
-rw-r--r--app/controllers/application_controller.rb5
-rw-r--r--app/controllers/concerns/authorization.rb1
21 files changed, 142 insertions, 43 deletions
diff --git a/app/controllers/admin/account_moderation_notes_controller.rb b/app/controllers/admin/account_moderation_notes_controller.rb
index 414a875d04b..7f69a33638e 100644
--- a/app/controllers/admin/account_moderation_notes_controller.rb
+++ b/app/controllers/admin/account_moderation_notes_controller.rb
@@ -1,31 +1,41 @@
# frozen_string_literal: true
-class Admin::AccountModerationNotesController < Admin::BaseController
- def create
- @account_moderation_note = current_account.account_moderation_notes.new(resource_params)
- if @account_moderation_note.save
- @target_account = @account_moderation_note.target_account
- redirect_to admin_account_path(@target_account.id), notice: I18n.t('admin.account_moderation_notes.created_msg')
- else
- @account = @account_moderation_note.target_account
- @moderation_notes = @account.targeted_moderation_notes.latest
- render template: 'admin/accounts/show'
+module Admin
+ class AccountModerationNotesController < BaseController
+ before_action :set_account_moderation_note, only: [:destroy]
+
+ def create
+ authorize AccountModerationNote, :create?
+
+ @account_moderation_note = current_account.account_moderation_notes.new(resource_params)
+
+ if @account_moderation_note.save
+ redirect_to admin_account_path(@account_moderation_note.target_account_id), notice: I18n.t('admin.account_moderation_notes.created_msg')
+ else
+ @account = @account_moderation_note.target_account
+ @moderation_notes = @account.targeted_moderation_notes.latest
+
+ render template: 'admin/accounts/show'
+ end
end
- end
- def destroy
- @account_moderation_note = AccountModerationNote.find(params[:id])
- @target_account = @account_moderation_note.target_account
- @account_moderation_note.destroy
- redirect_to admin_account_path(@target_account.id), notice: I18n.t('admin.account_moderation_notes.destroyed_msg')
- end
+ def destroy
+ authorize @account_moderation_note, :destroy?
+ @account_moderation_note.destroy
+ redirect_to admin_account_path(@account_moderation_note.target_account_id), notice: I18n.t('admin.account_moderation_notes.destroyed_msg')
+ end
- private
+ private
- def resource_params
- params.require(:account_moderation_note).permit(
- :content,
- :target_account_id
- )
+ def resource_params
+ params.require(:account_moderation_note).permit(
+ :content,
+ :target_account_id
+ )
+ end
+
+ def set_account_moderation_note
+ @account_moderation_note = AccountModerationNote.find(params[:id])
+ end
end
end
diff --git a/app/controllers/admin/accounts_controller.rb b/app/controllers/admin/accounts_controller.rb
index 7503b880d2a..0829bc769f4 100644
--- a/app/controllers/admin/accounts_controller.rb
+++ b/app/controllers/admin/accounts_controller.rb
@@ -7,40 +7,49 @@ module Admin
before_action :require_local_account!, only: [:enable, :disable, :memorialize]
def index
+ authorize :account, :index?
@accounts = filtered_accounts.page(params[:page])
end
def show
+ authorize @account, :show?
@account_moderation_note = current_account.account_moderation_notes.new(target_account: @account)
@moderation_notes = @account.targeted_moderation_notes.latest
end
def subscribe
+ authorize @account, :subscribe?
Pubsubhubbub::SubscribeWorker.perform_async(@account.id)
redirect_to admin_account_path(@account.id)
end
def unsubscribe
+ authorize @account, :unsubscribe?
Pubsubhubbub::UnsubscribeWorker.perform_async(@account.id)
redirect_to admin_account_path(@account.id)
end
def memorialize
+ authorize @account, :memorialize?
@account.memorialize!
redirect_to admin_account_path(@account.id)
end
def enable
+ authorize @account.user, :enable?
@account.user.enable!
redirect_to admin_account_path(@account.id)
end
def disable
+ authorize @account.user, :disable?
@account.user.disable!
redirect_to admin_account_path(@account.id)
end
def redownload
+ authorize @account, :redownload?
+
@account.reset_avatar!
@account.reset_header!
@account.save!
diff --git a/app/controllers/admin/base_controller.rb b/app/controllers/admin/base_controller.rb
index 11fe326bce1..db4839a8f7c 100644
--- a/app/controllers/admin/base_controller.rb
+++ b/app/controllers/admin/base_controller.rb
@@ -2,7 +2,9 @@
module Admin
class BaseController < ApplicationController
- before_action :require_admin!
+ include Authorization
+
+ before_action :require_staff!
layout 'admin'
end
diff --git a/app/controllers/admin/confirmations_controller.rb b/app/controllers/admin/confirmations_controller.rb
index 2542e21ee5b..c10b0ebee89 100644
--- a/app/controllers/admin/confirmations_controller.rb
+++ b/app/controllers/admin/confirmations_controller.rb
@@ -2,15 +2,18 @@
module Admin
class ConfirmationsController < BaseController
+ before_action :set_user
+
def create
- account_user.confirm
+ authorize @user, :confirm?
+ @user.confirm!
redirect_to admin_accounts_path
end
private
- def account_user
- Account.find(params[:account_id]).user || raise(ActiveRecord::RecordNotFound)
+ def set_user
+ @user = Account.find(params[:account_id]).user || raise(ActiveRecord::RecordNotFound)
end
end
end
diff --git a/app/controllers/admin/custom_emojis_controller.rb b/app/controllers/admin/custom_emojis_controller.rb
index daa1460fbff..693d28b1f5b 100644
--- a/app/controllers/admin/custom_emojis_controller.rb
+++ b/app/controllers/admin/custom_emojis_controller.rb
@@ -5,14 +5,18 @@ module Admin
before_action :set_custom_emoji, except: [:index, :new, :create]
def index
+ authorize :custom_emoji, :index?
@custom_emojis = filtered_custom_emojis.eager_load(:local_counterpart).page(params[:page])
end
def new
+ authorize :custom_emoji, :create?
@custom_emoji = CustomEmoji.new
end
def create
+ authorize :custom_emoji, :create?
+
@custom_emoji = CustomEmoji.new(resource_params)
if @custom_emoji.save
@@ -23,6 +27,8 @@ module Admin
end
def update
+ authorize @custom_emoji, :update?
+
if @custom_emoji.update(resource_params)
redirect_to admin_custom_emojis_path, notice: I18n.t('admin.custom_emojis.updated_msg')
else
@@ -31,11 +37,14 @@ module Admin
end
def destroy
+ authorize @custom_emoji, :destroy?
@custom_emoji.destroy
redirect_to admin_custom_emojis_path, notice: I18n.t('admin.custom_emojis.destroyed_msg')
end
def copy
+ authorize @custom_emoji, :copy?
+
emoji = CustomEmoji.find_or_create_by(domain: nil, shortcode: @custom_emoji.shortcode)
if emoji.update(image: @custom_emoji.image)
@@ -48,11 +57,13 @@ module Admin
end
def enable
+ authorize @custom_emoji, :enable?
@custom_emoji.update!(disabled: false)
redirect_to admin_custom_emojis_path, notice: I18n.t('admin.custom_emojis.enabled_msg')
end
def disable
+ authorize @custom_emoji, :disable?
@custom_emoji.update!(disabled: true)
redirect_to admin_custom_emojis_path, notice: I18n.t('admin.custom_emojis.disabled_msg')
end
diff --git a/app/controllers/admin/domain_blocks_controller.rb b/app/controllers/admin/domain_blocks_controller.rb
index 1ab620e0338..e383dc8314d 100644
--- a/app/controllers/admin/domain_blocks_controller.rb
+++ b/app/controllers/admin/domain_blocks_controller.rb
@@ -5,14 +5,18 @@ module Admin
before_action :set_domain_block, only: [:show, :destroy]
def index
+ authorize :domain_block, :index?
@domain_blocks = DomainBlock.page(params[:page])
end
def new
+ authorize :domain_block, :create?
@domain_block = DomainBlock.new
end
def create
+ authorize :domain_block, :create?
+
@domain_block = DomainBlock.new(resource_params)
if @domain_block.save
@@ -23,9 +27,12 @@ module Admin
end
end
- def show; end
+ def show
+ authorize @domain_block, :show?
+ end
def destroy
+ authorize @domain_block, :destroy?
UnblockDomainService.new.call(@domain_block, retroactive_unblock?)
redirect_to admin_domain_blocks_path, notice: I18n.t('admin.domain_blocks.destroyed_msg')
end
diff --git a/app/controllers/admin/email_domain_blocks_controller.rb b/app/controllers/admin/email_domain_blocks_controller.rb
index 09275d5dc82..01058bf4677 100644
--- a/app/controllers/admin/email_domain_blocks_controller.rb
+++ b/app/controllers/admin/email_domain_blocks_controller.rb
@@ -5,14 +5,18 @@ module Admin
before_action :set_email_domain_block, only: [:show, :destroy]
def index
+ authorize :email_domain_block, :index?
@email_domain_blocks = EmailDomainBlock.page(params[:page])
end
def new
+ authorize :email_domain_block, :create?
@email_domain_block = EmailDomainBlock.new
end
def create
+ authorize :email_domain_block, :create?
+
@email_domain_block = EmailDomainBlock.new(resource_params)
if @email_domain_block.save
@@ -23,6 +27,7 @@ module Admin
end
def destroy
+ authorize @email_domain_block, :destroy?
@email_domain_block.destroy
redirect_to admin_email_domain_blocks_path, notice: I18n.t('admin.email_domain_blocks.destroyed_msg')
end
diff --git a/app/controllers/admin/instances_controller.rb b/app/controllers/admin/instances_controller.rb
index 22f02e5d089..8ed0ea42195 100644
--- a/app/controllers/admin/instances_controller.rb
+++ b/app/controllers/admin/instances_controller.rb
@@ -3,10 +3,12 @@
module Admin
class InstancesController < BaseController
def index
+ authorize :instance, :index?
@instances = ordered_instances
end
def resubscribe
+ authorize :instance, :resubscribe?
params.require(:by_domain)
Pubsubhubbub::SubscribeWorker.push_bulk(subscribeable_accounts.pluck(:id))
redirect_to admin_instances_path
diff --git a/app/controllers/admin/reported_statuses_controller.rb b/app/controllers/admin/reported_statuses_controller.rb
index 5a31adecf93..4f66ce708ae 100644
--- a/app/controllers/admin/reported_statuses_controller.rb
+++ b/app/controllers/admin/reported_statuses_controller.rb
@@ -2,19 +2,20 @@
module Admin
class ReportedStatusesController < BaseController
- include Authorization
-
before_action :set_report
before_action :set_status, only: [:update, :destroy]
def create
- @form = Form::StatusBatch.new(form_status_batch_params)
- flash[:alert] = t('admin.statuses.failed_to_execute') unless @form.save
+ authorize :status, :update?
+
+ @form = Form::StatusBatch.new(form_status_batch_params)
+ flash[:alert] = I18n.t('admin.statuses.failed_to_execute') unless @form.save
redirect_to admin_report_path(@report)
end
def update
+ authorize @status, :update?
@status.update(status_params)
redirect_to admin_report_path(@report)
end
diff --git a/app/controllers/admin/reports_controller.rb b/app/controllers/admin/reports_controller.rb
index 2264677395b..745757ee82e 100644
--- a/app/controllers/admin/reports_controller.rb
+++ b/app/controllers/admin/reports_controller.rb
@@ -5,14 +5,17 @@ module Admin
before_action :set_report, except: [:index]
def index
+ authorize :report, :index?
@reports = filtered_reports.page(params[:page])
end
def show
+ authorize @report, :show?
@form = Form::StatusBatch.new
end
def update
+ authorize @report, :update?
process_report
redirect_to admin_report_path(@report)
end
diff --git a/app/controllers/admin/resets_controller.rb b/app/controllers/admin/resets_controller.rb
index 6db648403ec..00b590bf67b 100644
--- a/app/controllers/admin/resets_controller.rb
+++ b/app/controllers/admin/resets_controller.rb
@@ -2,17 +2,18 @@
module Admin
class ResetsController < BaseController
- before_action :set_account
+ before_action :set_user
def create
- @account.user.send_reset_password_instructions
+ authorize @user, :reset_password?
+ @user.send_reset_password_instructions
redirect_to admin_accounts_path
end
private
- def set_account
- @account = Account.find(params[:account_id])
+ def set_user
+ @user = Account.find(params[:account_id]).user || raise(ActiveRecord::RecordNotFound)
end
end
end
diff --git a/app/controllers/admin/roles_controller.rb b/app/controllers/admin/roles_controller.rb
new file mode 100644
index 00000000000..8f86858279f
--- /dev/null
+++ b/app/controllers/admin/roles_controller.rb
@@ -0,0 +1,25 @@
+# frozen_string_literal: true
+
+module Admin
+ class RolesController < BaseController
+ before_action :set_user
+
+ def promote
+ authorize @user, :promote?
+ @user.promote!
+ redirect_to admin_account_path(@user.account_id)
+ end
+
+ def demote
+ authorize @user, :demote?
+ @user.demote!
+ redirect_to admin_account_path(@user.account_id)
+ end
+
+ private
+
+ def set_user
+ @user = Account.find(params[:account_id]).user || raise(ActiveRecord::RecordNotFound)
+ end
+ end
+end
diff --git a/app/controllers/admin/settings_controller.rb b/app/controllers/admin/settings_controller.rb
index a2f86b8a9ee..e81290228ec 100644
--- a/app/controllers/admin/settings_controller.rb
+++ b/app/controllers/admin/settings_controller.rb
@@ -28,10 +28,13 @@ module Admin
).freeze
def edit
+ authorize :settings, :show?
@admin_settings = Form::AdminSettings.new
end
def update
+ authorize :settings, :update?
+
settings_params.each do |key, value|
if UPLOAD_SETTINGS.include?(key)
upload = SiteUpload.where(var: key).first_or_initialize(var: key)
diff --git a/app/controllers/admin/silences_controller.rb b/app/controllers/admin/silences_controller.rb
index 81a3008b96e..01fb292de0c 100644
--- a/app/controllers/admin/silences_controller.rb
+++ b/app/controllers/admin/silences_controller.rb
@@ -5,11 +5,13 @@ module Admin
before_action :set_account
def create
+ authorize @account, :silence?
@account.update(silenced: true)
redirect_to admin_accounts_path
end
def destroy
+ authorize @account, :unsilence?
@account.update(silenced: false)
redirect_to admin_accounts_path
end
diff --git a/app/controllers/admin/statuses_controller.rb b/app/controllers/admin/statuses_controller.rb
index b05000b16b0..b54a9b82476 100644
--- a/app/controllers/admin/statuses_controller.rb
+++ b/app/controllers/admin/statuses_controller.rb
@@ -2,8 +2,6 @@
module Admin
class StatusesController < BaseController
- include Authorization
-
helper_method :current_params
before_action :set_account
@@ -12,24 +10,30 @@ module Admin
PER_PAGE = 20
def index
+ authorize :status, :index?
+
@statuses = @account.statuses
+
if params[:media]
account_media_status_ids = @account.media_attachments.attached.reorder(nil).select(:status_id).distinct
@statuses.merge!(Status.where(id: account_media_status_ids))
end
- @statuses = @statuses.preload(:media_attachments, :mentions).page(params[:page]).per(PER_PAGE)
- @form = Form::StatusBatch.new
+ @statuses = @statuses.preload(:media_attachments, :mentions).page(params[:page]).per(PER_PAGE)
+ @form = Form::StatusBatch.new
end
def create
- @form = Form::StatusBatch.new(form_status_batch_params)
- flash[:alert] = t('admin.statuses.failed_to_execute') unless @form.save
+ authorize :status, :update?
+
+ @form = Form::StatusBatch.new(form_status_batch_params)
+ flash[:alert] = I18n.t('admin.statuses.failed_to_execute') unless @form.save
redirect_to admin_account_statuses_path(@account.id, current_params)
end
def update
+ authorize @status, :update?
@status.update(status_params)
redirect_to admin_account_statuses_path(@account.id, current_params)
end
@@ -60,6 +64,7 @@ module Admin
def current_params
page = (params[:page] || 1).to_i
+
{
media: params[:media],
page: page > 1 && page,
diff --git a/app/controllers/admin/subscriptions_controller.rb b/app/controllers/admin/subscriptions_controller.rb
index 624a475a3d2..40500ef43f5 100644
--- a/app/controllers/admin/subscriptions_controller.rb
+++ b/app/controllers/admin/subscriptions_controller.rb
@@ -3,6 +3,7 @@
module Admin
class SubscriptionsController < BaseController
def index
+ authorize :subscription, :index?
@subscriptions = ordered_subscriptions.page(requested_page)
end
diff --git a/app/controllers/admin/suspensions_controller.rb b/app/controllers/admin/suspensions_controller.rb
index 5eaf1a2e914..778feea5e8e 100644
--- a/app/controllers/admin/suspensions_controller.rb
+++ b/app/controllers/admin/suspensions_controller.rb
@@ -5,11 +5,13 @@ module Admin
before_action :set_account
def create
+ authorize @account, :suspend?
Admin::SuspensionWorker.perform_async(@account.id)
redirect_to admin_accounts_path
end
def destroy
+ authorize @account, :unsuspend?
@account.unsuspend!
redirect_to admin_accounts_path
end
diff --git a/app/controllers/admin/two_factor_authentications_controller.rb b/app/controllers/admin/two_factor_authentications_controller.rb
index 69c08f60593..5a45d25cd0c 100644
--- a/app/controllers/admin/two_factor_authentications_controller.rb
+++ b/app/controllers/admin/two_factor_authentications_controller.rb
@@ -5,6 +5,7 @@ module Admin
before_action :set_user
def destroy
+ authorize @user, :disable_2fa?
@user.disable_two_factor!
redirect_to admin_accounts_path
end
diff --git a/app/controllers/api/v1/reports_controller.rb b/app/controllers/api/v1/reports_controller.rb
index 9592cd4bdc5..22828217d2f 100644
--- a/app/controllers/api/v1/reports_controller.rb
+++ b/app/controllers/api/v1/reports_controller.rb
@@ -19,7 +19,7 @@ class Api::V1::ReportsController < Api::BaseController
comment: report_params[:comment]
)
- User.admins.includes(:account).each { |u| AdminMailer.new_report(u.account, @report).deliver_later }
+ User.staff.includes(:account).each { |u| AdminMailer.new_report(u.account, @report).deliver_later }
render json: @report, serializer: REST::ReportSerializer
end
diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb
index d5eca6ffb60..f41a7f9bef4 100644
--- a/app/controllers/application_controller.rb
+++ b/app/controllers/application_controller.rb
@@ -18,6 +18,7 @@ class ApplicationController < ActionController::Base
rescue_from ActionController::RoutingError, with: :not_found
rescue_from ActiveRecord::RecordNotFound, with: :not_found
rescue_from ActionController::InvalidAuthenticityToken, with: :unprocessable_entity
+ rescue_from Mastodon::NotPermittedError, with: :forbidden