mirror of
https://framagit.org/tykayn/mastodon.git
synced 2023-08-25 08:33:12 +02:00
Merge branch 'main' into glitch-soc/merge-upstream
This commit is contained in:
commit
8158b04d18
@ -1383,18 +1383,22 @@ a.sparkline {
|
|||||||
line-height: 20px;
|
line-height: 20px;
|
||||||
margin-bottom: 4px;
|
margin-bottom: 4px;
|
||||||
|
|
||||||
.username a {
|
.username {
|
||||||
color: $primary-text-color;
|
color: $primary-text-color;
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
text-decoration: none;
|
|
||||||
margin-right: 5px;
|
margin-right: 5px;
|
||||||
|
|
||||||
|
a {
|
||||||
|
color: inherit;
|
||||||
|
text-decoration: none;
|
||||||
|
|
||||||
&:hover,
|
&:hover,
|
||||||
&:focus,
|
&:focus,
|
||||||
&:active {
|
&:active {
|
||||||
text-decoration: underline;
|
text-decoration: underline;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
time {
|
time {
|
||||||
margin-left: 5px;
|
margin-left: 5px;
|
||||||
|
@ -37,50 +37,16 @@ class ActivityPub::Activity::Delete < ActivityPub::Activity
|
|||||||
|
|
||||||
return if @status.nil?
|
return if @status.nil?
|
||||||
|
|
||||||
forward! if @json['signature'].present? && @status.distributable?
|
forwarder.forward! if forwarder.forwardable?
|
||||||
delete_now!
|
delete_now!
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def rebloggers_ids
|
def forwarder
|
||||||
return @rebloggers_ids if defined?(@rebloggers_ids)
|
@forwarder ||= ActivityPub::Forwarder.new(@account, @json, @status)
|
||||||
@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
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def delete_now!
|
def delete_now!
|
||||||
RemoveStatusService.new.call(@status, redraft: false)
|
RemoveStatusService.new.call(@status, redraft: false)
|
||||||
end
|
end
|
||||||
|
|
||||||
def payload
|
|
||||||
@payload ||= Oj.dump(@json)
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
@ -22,10 +22,15 @@ class ActivityPub::Activity::Update < ActivityPub::Activity
|
|||||||
def update_status
|
def update_status
|
||||||
return reject_payload! if invalid_origin?(@object['id'])
|
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
|
||||||
end
|
end
|
||||||
|
65
app/lib/activitypub/forwarder.rb
Normal file
65
app/lib/activitypub/forwarder.rb
Normal 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
|
@ -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?
|
= 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.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'))
|
%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
|
||||||
.report-notes__item
|
.report-notes__item
|
||||||
|
- if @report.account.local? && !@report.account.instance_actor?
|
||||||
= image_tag @report.account.avatar.url, class: 'report-notes__item__avatar'
|
= 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
|
.report-notes__item__header
|
||||||
%span.username
|
%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) }
|
%time{ datetime: @report.created_at.iso8601, title: l(@report.created_at) }
|
||||||
- if @report.created_at.today?
|
- if @report.created_at.today?
|
||||||
= t('admin.report_notes.today_at', time: l(@report.created_at, format: :time))
|
= t('admin.report_notes.today_at', time: l(@report.created_at, format: :time))
|
||||||
|
@ -617,6 +617,7 @@ en:
|
|||||||
title: Notes
|
title: Notes
|
||||||
notes_description_html: View and leave notes to other moderators and your future self
|
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:'
|
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
|
reopen: Reopen report
|
||||||
report: 'Report #%{id}'
|
report: 'Report #%{id}'
|
||||||
reported_account: Reported account
|
reported_account: Reported account
|
||||||
|
2
dist/nginx.conf
vendored
2
dist/nginx.conf
vendored
@ -50,7 +50,7 @@ server {
|
|||||||
gzip_comp_level 6;
|
gzip_comp_level 6;
|
||||||
gzip_buffers 16 8k;
|
gzip_buffers 16 8k;
|
||||||
gzip_http_version 1.1;
|
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;
|
add_header Strict-Transport-Security "max-age=31536000" always;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user