forked from treehouse/mastodon
Add support for direct message assertions
parent
b988bc7564
commit
3d5b3e357c
|
@ -137,7 +137,7 @@ class ActivityPub::Activity::Create < ActivityPub::Activity
|
||||||
# If there is at least one silent mention, then the status can be considered
|
# 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
|
# as a limited-audience status, and not strictly a direct message, but only
|
||||||
# if we considered a direct message in the first place
|
# 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
|
@params[:visibility] = :limited
|
||||||
end
|
end
|
||||||
|
@ -148,7 +148,7 @@ class ActivityPub::Activity::Create < ActivityPub::Activity
|
||||||
|
|
||||||
@mentions << Mention.new(account_id: @options[:delivered_to_account_id], silent: true)
|
@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
|
@params[:visibility] = :limited
|
||||||
end
|
end
|
||||||
|
@ -159,7 +159,7 @@ class ActivityPub::Activity::Create < ActivityPub::Activity
|
||||||
delivered_to_account = Account.find(@options[:delivered_to_account_id])
|
delivered_to_account = Account.find(@options[:delivered_to_account_id])
|
||||||
|
|
||||||
@status.mentions.create(account: delivered_to_account, silent: true)
|
@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)
|
return unless delivered_to_account.following?(@account)
|
||||||
|
|
||||||
|
@ -358,6 +358,8 @@ class ActivityPub::Activity::Create < ActivityPub::Activity
|
||||||
:unlisted
|
:unlisted
|
||||||
elsif equals_or_includes?(audience_to, @account.followers_url)
|
elsif equals_or_includes?(audience_to, @account.followers_url)
|
||||||
:private
|
:private
|
||||||
|
elsif direct_message == false
|
||||||
|
:limited
|
||||||
else
|
else
|
||||||
:direct
|
:direct
|
||||||
end
|
end
|
||||||
|
@ -368,6 +370,10 @@ class ActivityPub::Activity::Create < ActivityPub::Activity
|
||||||
equals_or_includes?(audience_to, uri) || equals_or_includes?(audience_cc, uri)
|
equals_or_includes?(audience_to, uri) || equals_or_includes?(audience_cc, uri)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def direct_message
|
||||||
|
@object['directMessage']
|
||||||
|
end
|
||||||
|
|
||||||
def replied_to_status
|
def replied_to_status
|
||||||
return @replied_to_status if defined?(@replied_to_status)
|
return @replied_to_status if defined?(@replied_to_status)
|
||||||
|
|
||||||
|
|
|
@ -7,6 +7,7 @@ class ActivityPub::Adapter < ActiveModelSerializers::Adapter::Base
|
||||||
}.freeze
|
}.freeze
|
||||||
|
|
||||||
CONTEXT_EXTENSION_MAP = {
|
CONTEXT_EXTENSION_MAP = {
|
||||||
|
direct_message: { 'litepub': 'http://litepub.social/ns#', 'directMessage': 'litepub:directMessage' },
|
||||||
manually_approves_followers: { 'manuallyApprovesFollowers' => 'as:manuallyApprovesFollowers' },
|
manually_approves_followers: { 'manuallyApprovesFollowers' => 'as:manuallyApprovesFollowers' },
|
||||||
sensitive: { 'sensitive' => 'as:sensitive' },
|
sensitive: { 'sensitive' => 'as:sensitive' },
|
||||||
hashtag: { 'Hashtag' => 'as:Hashtag' },
|
hashtag: { 'Hashtag' => 'as:Hashtag' },
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
class ActivityPub::NoteSerializer < ActivityPub::Serializer
|
class ActivityPub::NoteSerializer < ActivityPub::Serializer
|
||||||
context_extensions :atom_uri, :conversation, :sensitive, :voters_count
|
context_extensions :atom_uri, :conversation, :sensitive, :voters_count, :direct_message
|
||||||
|
|
||||||
attributes :id, :type, :summary,
|
attributes :id, :type, :summary,
|
||||||
:in_reply_to, :published, :url,
|
:in_reply_to, :published, :url,
|
||||||
|
@ -12,6 +12,8 @@ class ActivityPub::NoteSerializer < ActivityPub::Serializer
|
||||||
attribute :content
|
attribute :content
|
||||||
attribute :content_map, if: :language?
|
attribute :content_map, if: :language?
|
||||||
|
|
||||||
|
attribute :direct_message, if: :non_public?
|
||||||
|
|
||||||
has_many :media_attachments, key: :attachment
|
has_many :media_attachments, key: :attachment
|
||||||
has_many :virtual_tags, key: :tag
|
has_many :virtual_tags, key: :tag
|
||||||
|
|
||||||
|
@ -42,6 +44,14 @@ class ActivityPub::NoteSerializer < ActivityPub::Serializer
|
||||||
object.sensitive || (!instance_options[:allow_local_only] && Setting.outgoing_spoilers.present?)
|
object.sensitive || (!instance_options[:allow_local_only] && Setting.outgoing_spoilers.present?)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def direct_message
|
||||||
|
object.direct_visibility?
|
||||||
|
end
|
||||||
|
|
||||||
|
def non_public?
|
||||||
|
!object.distributable?
|
||||||
|
end
|
||||||
|
|
||||||
def content
|
def content
|
||||||
Formatter.instance.format(object)
|
Formatter.instance.format(object)
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue