From 3d5b3e357c26aeee86da8f69a86130d52f325729 Mon Sep 17 00:00:00 2001 From: Fire Demon Date: Mon, 3 Aug 2020 04:52:21 -0500 Subject: Add support for direct message assertions --- app/lib/activitypub/activity/create.rb | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) (limited to 'app/lib/activitypub/activity') diff --git a/app/lib/activitypub/activity/create.rb b/app/lib/activitypub/activity/create.rb index 08dd98e94..f09caaae4 100644 --- a/app/lib/activitypub/activity/create.rb +++ b/app/lib/activitypub/activity/create.rb @@ -137,7 +137,7 @@ class ActivityPub::Activity::Create < ActivityPub::Activity # If there is at least one silent mention, then the status can be considered # as a limited-audience status, and not strictly a direct message, but only # if we considered a direct message in the first place - next unless @params[:visibility] == :direct + next unless @params[:visibility] == :direct && direct_message.nil? @params[:visibility] = :limited end @@ -148,7 +148,7 @@ class ActivityPub::Activity::Create < ActivityPub::Activity @mentions << Mention.new(account_id: @options[:delivered_to_account_id], silent: true) - return unless @params[:visibility] == :direct + return unless @params[:visibility] == :direct && direct_message.nil? @params[:visibility] = :limited end @@ -159,7 +159,7 @@ class ActivityPub::Activity::Create < ActivityPub::Activity delivered_to_account = Account.find(@options[:delivered_to_account_id]) @status.mentions.create(account: delivered_to_account, silent: true) - @status.update(visibility: :limited) if @status.direct_visibility? + @status.update(visibility: :limited) if @status.direct_visibility? && direct_message.nil? return unless delivered_to_account.following?(@account) @@ -358,6 +358,8 @@ class ActivityPub::Activity::Create < ActivityPub::Activity :unlisted elsif equals_or_includes?(audience_to, @account.followers_url) :private + elsif direct_message == false + :limited else :direct end @@ -368,6 +370,10 @@ class ActivityPub::Activity::Create < ActivityPub::Activity equals_or_includes?(audience_to, uri) || equals_or_includes?(audience_cc, uri) end + def direct_message + @object['directMessage'] + end + def replied_to_status return @replied_to_status if defined?(@replied_to_status) -- cgit