Merge branch 'main' into glitch-soc/merge-upstream

rebase/4.0.0rc2
Claire 2022-02-26 21:15:37 +01:00
commit 8158b04d18
7 changed files with 104 additions and 50 deletions

View File

@ -1383,18 +1383,22 @@ a.sparkline {
line-height: 20px;
margin-bottom: 4px;
.username a {
.username {
color: $primary-text-color;
font-weight: 500;
text-decoration: none;
margin-right: 5px;
a {
color: inherit;
text-decoration: none;
&:hover,
&:focus,
&:active {
text-decoration: underline;
}
}
}
time {
margin-left: 5px;

View File

@ -37,50 +37,16 @@ class ActivityPub::Activity::Delete < ActivityPub::Activity
return if @status.nil?
forward! if @json['signature'].present? && @status.distributable?
forwarder.forward! if forwarder.forwardable?
delete_now!
end
end
def rebloggers_ids
return @rebloggers_ids if defined?(@rebloggers_ids)
@rebloggers_ids = @status.reblogs.includes(:account).references(:account).merge(Account.local).pluck(:account_id)
end
def inboxes_for_reblogs
Account.where(id: ::Follow.where(target_account_id: rebloggers_ids).select(:account_id)).inboxes
end
def replied_to_status
return @replied_to_status if defined?(@replied_to_status)
@replied_to_status = @status.thread
end
def reply_to_local?
!replied_to_status.nil? && replied_to_status.account.local?
end
def inboxes_for_reply
replied_to_status.account.followers.inboxes
end
def forward!
inboxes = inboxes_for_reblogs
inboxes += inboxes_for_reply if reply_to_local?
inboxes -= [@account.preferred_inbox_url]
sender_id = reply_to_local? ? replied_to_status.account_id : rebloggers_ids.first
ActivityPub::LowPriorityDeliveryWorker.push_bulk(inboxes.uniq) do |inbox_url|
[payload, sender_id, inbox_url]
end
def forwarder
@forwarder ||= ActivityPub::Forwarder.new(@account, @json, @status)
end
def delete_now!
RemoveStatusService.new.call(@status, redraft: false)
end
def payload
@payload ||= Oj.dump(@json)
end
end

View File

@ -22,10 +22,15 @@ class ActivityPub::Activity::Update < ActivityPub::Activity
def update_status
return reject_payload! if invalid_origin?(@object['id'])
status = Status.find_by(uri: object_uri, account_id: @account.id)
@status = Status.find_by(uri: object_uri, account_id: @account.id)
return if status.nil?
return if @status.nil?
ActivityPub::ProcessStatusUpdateService.new.call(status, @object)
forwarder.forward! if forwarder.forwardable?
ActivityPub::ProcessStatusUpdateService.new.call(@status, @object)
end
def forwarder
@forwarder ||= ActivityPub::Forwarder.new(@account, @json, @status)
end
end

View File

@ -0,0 +1,65 @@
# frozen_string_literal: true
class ActivityPub::Forwarder
def initialize(account, original_json, status)
@json = original_json
@account = account
@status = status
end
def forwardable?
@json['signature'].present? && @status.distributable?
end
def forward!
ActivityPub::LowPriorityDeliveryWorker.push_bulk(inboxes) do |inbox_url|
[payload, signature_account_id, inbox_url]
end
end
private
def payload
@payload ||= Oj.dump(@json)
end
def reblogged_by_account_ids
@reblogged_by_account_ids ||= @status.reblogs.includes(:account).references(:account).merge(Account.local).pluck(:account_id)
end
def signature_account_id
@signature_account_id ||= begin
if in_reply_to_local?
in_reply_to.account_id
else
reblogged_by_account_ids.first
end
end
end
def inboxes
@inboxes ||= begin
arr = inboxes_for_followers_of_reblogged_by_accounts
arr += inboxes_for_followers_of_replied_to_account if in_reply_to_local?
arr -= [@account.preferred_inbox_url]
arr.uniq!
arr
end
end
def inboxes_for_followers_of_reblogged_by_accounts
Account.where(id: ::Follow.where(target_account_id: reblogged_by_account_ids).select(:account_id)).inboxes
end
def inboxes_for_followers_of_replied_to_account
in_reply_to.account.followers.inboxes
end
def in_reply_to
@status.thread
end
def in_reply_to_local?
@status.thread&.account&.local?
end
end

View File

@ -118,15 +118,28 @@
= react_admin_component :report_reason_selector, id: @report.id, category: @report.category, rule_ids: @report.rule_ids&.map(&:to_s), disabled: @report.action_taken?
- if @report.comment.present?
- if @report.account.instance_actor?
%p= t('admin.reports.comment_description_html', name: content_tag(:strong, site_hostname, class: 'username'))
- elsif @report.account.local?
%p= t('admin.reports.comment_description_html', name: content_tag(:strong, @report.account.username, class: 'username'))
- else
%p= t('admin.reports.comment_description_html', name: t('admin.reports.remote_user_placeholder', instance: @report.account.domain))
.report-notes
.report-notes__item
- if @report.account.local? && !@report.account.instance_actor?
= image_tag @report.account.avatar.url, class: 'report-notes__item__avatar'
- else
= image_tag(full_asset_url('avatars/original/missing.png', skip_pipeline: true), class: 'report-notes__item__avatar')
.report-notes__item__header
%span.username
= link_to display_name(@report.account), admin_account_path(@report.account_id)
- if @report.account.instance_actor?
= site_hostname
- elsif @report.account.local?
= link_to @report.account.username, admin_account_path(@report.account_id)
- else
= link_to @report.account.domain, admin_instance_path(@report.account.domain)
%time{ datetime: @report.created_at.iso8601, title: l(@report.created_at) }
- if @report.created_at.today?
= t('admin.report_notes.today_at', time: l(@report.created_at, format: :time))

View File

@ -617,6 +617,7 @@ en:
title: Notes
notes_description_html: View and leave notes to other moderators and your future self
quick_actions_description_html: 'Take a quick action or scroll down to see reported content:'
remote_user_placeholder: the remote user from %{instance}
reopen: Reopen report
report: 'Report #%{id}'
reported_account: Reported account

2
dist/nginx.conf vendored
View File

@ -50,7 +50,7 @@ server {
gzip_comp_level 6;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript image/svg+xml image/x-icon;
add_header Strict-Transport-Security "max-age=31536000" always;