diff options
author | David Yip <yipdw@member.fsf.org> | 2018-03-02 21:46:44 -0600 |
---|---|---|
committer | David Yip <yipdw@member.fsf.org> | 2018-03-02 21:46:44 -0600 |
commit | 1b8fcd4df52c8d715f89180faea8205310f197ae (patch) | |
tree | 705b8b59bafdd26cb96983e2da0104e8b7308ea7 /app/services | |
parent | ee00da01d2e4cc455b92f1f4a7c9142c73048433 (diff) | |
parent | ecf06d7e821a4b8f4585f1b6f0e39c595ed047ce (diff) |
Merge remote-tracking branch 'origin/master' into merge-upstream
Conflicts: README.md app/controllers/follower_accounts_controller.rb app/controllers/following_accounts_controller.rb app/serializers/rest/instance_serializer.rb app/views/stream_entries/_simple_status.html.haml config/locales/simple_form.ja.yml
Diffstat (limited to 'app/services')
-rw-r--r-- | app/services/report_service.rb | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/app/services/report_service.rb b/app/services/report_service.rb new file mode 100644 index 000000000..c06488a6d --- /dev/null +++ b/app/services/report_service.rb @@ -0,0 +1,54 @@ +# frozen_string_literal: true + +class ReportService < BaseService + def call(source_account, target_account, options = {}) + @source_account = source_account + @target_account = target_account + @status_ids = options.delete(:status_ids) || [] + @comment = options.delete(:comment) || '' + @options = options + + create_report! + notify_staff! + forward_to_origin! if !@target_account.local? && ActiveModel::Type::Boolean.new.cast(@options[:forward]) + + @report + end + + private + + def create_report! + @report = @source_account.reports.create!( + target_account: @target_account, + status_ids: @status_ids, + comment: @comment + ) + end + + def notify_staff! + User.staff.includes(:account).each do |u| + AdminMailer.new_report(u.account, @report).deliver_later + end + end + + def forward_to_origin! + ActivityPub::DeliveryWorker.perform_async( + payload, + some_local_account.id, + @target_account.inbox_url + ) + end + + def payload + Oj.dump(ActiveModelSerializers::SerializableResource.new( + @report, + serializer: ActivityPub::FlagSerializer, + adapter: ActivityPub::Adapter, + account: some_local_account + ).as_json) + end + + def some_local_account + @some_local_account ||= Account.local.where(suspended: false).first + end +end |