* Add: `conversations`テーブルに`ancestor_status`プロパティ * Fix test * Fix test more * Add: `limited_visibility`に`Reply`を追加、`context`のURI * Add: 外部からの`context`受信処理 * Fix test * Add: 公開範囲「返信」 * Fix test * Fix: 返信に返信以外の公開範囲を設定できない問題 * Add: ローカル投稿時にメンション追加・他サーバーへの転送 * Fix test * Fix test * Test: ローカルスレッドへの返信投稿の転送 * Test: 未知のアカウントからのメンション * Add: 編集・削除の連合に対応 * Remove: 重複テスト * Fix: 改善 * Add: 編集削除の転送処理・返信なのにsilentなメンションでの通知 * Fix: リプライが第三者に届かない問題 * Add: `always_sign_unsafe` * Add: Subject * Remove space * Fix: 他人のスレッドの送信先一覧を非表示 * Fix: おかしいコード
43 lines
1.3 KiB
Ruby
43 lines
1.3 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
class ActivityPub::Activity::Update < ActivityPub::Activity
|
|
def perform
|
|
@account.schedule_refresh_if_stale!
|
|
|
|
dereference_object!
|
|
|
|
if equals_or_includes_any?(@object['type'], %w(Application Group Organization Person Service))
|
|
update_account
|
|
elsif equals_or_includes_any?(@object['type'], %w(Note Question))
|
|
update_status
|
|
elsif converted_object_type?
|
|
Status.find_by(uri: object_uri, account_id: @account.id)
|
|
end
|
|
end
|
|
|
|
private
|
|
|
|
def update_account
|
|
return reject_payload! if @account.uri != object_uri
|
|
|
|
ActivityPub::ProcessAccountService.new.call(@account.username, @account.domain, @object, signed_with_known_key: true, request_id: @options[:request_id])
|
|
end
|
|
|
|
def update_status
|
|
return reject_payload! if non_matching_uri_hosts?(@account.uri, object_uri)
|
|
|
|
@status = Status.find_by(uri: object_uri, account_id: @account.id)
|
|
|
|
return if @status.nil?
|
|
|
|
ActivityPub::ProcessStatusUpdateService.new.call(@status, @json, @object, request_id: @options[:request_id])
|
|
|
|
forward_for_conversation
|
|
end
|
|
|
|
def forward_for_conversation
|
|
return unless @status.conversation.present? && @status.conversation.local? && @json['signature'].present?
|
|
|
|
ActivityPub::ForwardConversationWorker.perform_async(Oj.dump(@json), @status.id, true)
|
|
end
|
|
end
|