Merge branch 'kb_development' into kb_migration
This commit is contained in:
commit
b7ef24d3e8
9 changed files with 46 additions and 20 deletions
|
@ -46,6 +46,7 @@ class ActivityPub::Activity::Create < ActivityPub::Activity
|
|||
|
||||
def create_status
|
||||
return reject_payload! if unsupported_object_type? || non_matching_uri_hosts?(@account.uri, object_uri) || tombstone_exists? || !related_to_local_activity?
|
||||
return reject_payload! if (reply_to_local? || reply_to_local_account?) && reject_reply_to_local?
|
||||
|
||||
with_lock("create:#{object_uri}") do
|
||||
return if delete_arrived_first?(object_uri) || poll_vote?
|
||||
|
@ -136,7 +137,13 @@ class ActivityPub::Activity::Create < ActivityPub::Activity
|
|||
}
|
||||
end
|
||||
|
||||
def process_audience
|
||||
def reply_to_local_account?
|
||||
accounts_in_audience.any?(&:local?)
|
||||
end
|
||||
|
||||
def accounts_in_audience
|
||||
return @accounts_in_audience if @accounts_in_audience
|
||||
|
||||
# Unlike with tags, there is no point in resolving accounts we don't already
|
||||
# know here, because silent mentions would only be used for local access control anyway
|
||||
accounts_in_audience = (audience_to + audience_cc).uniq.filter_map do |audience|
|
||||
|
@ -150,6 +157,10 @@ class ActivityPub::Activity::Create < ActivityPub::Activity
|
|||
accounts_in_audience.uniq!
|
||||
end
|
||||
|
||||
@accounts_in_audience = accounts_in_audience
|
||||
end
|
||||
|
||||
def process_audience
|
||||
accounts_in_audience.each do |account|
|
||||
# This runs after tags are processed, and those translate into non-silent
|
||||
# mentions, which take precedence
|
||||
|
|
|
@ -14,7 +14,11 @@ class StatusReachFinder
|
|||
end
|
||||
|
||||
def inboxes_for_misskey
|
||||
(reached_account_inboxes_for_misskey + followers_inboxes_for_misskey).uniq
|
||||
if banned_domains_for_misskey.empty?
|
||||
[]
|
||||
else
|
||||
(reached_account_inboxes_for_misskey + followers_inboxes_for_misskey).uniq
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
@ -121,26 +125,28 @@ class StatusReachFinder
|
|||
|
||||
domains = banned_domains_of_status(@status)
|
||||
domains += banned_domains_of_status(@status.reblog) if @status.reblog? && @status.reblog.local?
|
||||
@banned_domains = domains.uniq
|
||||
@banned_domains = domains.uniq + banned_domains_for_misskey
|
||||
end
|
||||
|
||||
def banned_domains_of_status(status)
|
||||
blocks = DomainBlock.where(domain: nil)
|
||||
unless status.account.user&.setting_send_without_domain_blocks
|
||||
if status.account.user&.setting_send_without_domain_blocks
|
||||
[]
|
||||
else
|
||||
blocks = DomainBlock.where(domain: nil)
|
||||
blocks = blocks.or(DomainBlock.where(reject_send_not_public_searchability: true)) if status.compute_searchability != 'public'
|
||||
blocks = blocks.or(DomainBlock.where(reject_send_public_unlisted: true)) if status.public_unlisted_visibility?
|
||||
blocks = blocks.or(DomainBlock.where(reject_send_dissubscribable: true)) if status.account.dissubscribable
|
||||
blocks = blocks.or(DomainBlock.where(reject_send_media: true)) if status.with_media?
|
||||
blocks = blocks.or(DomainBlock.where(reject_send_sensitive: true)) if (status.with_media? && status.sensitive) || status.spoiler_text?
|
||||
blocks.pluck(:domain).uniq
|
||||
end
|
||||
blocks = blocks.or(DomainBlock.where(detect_invalid_subscription: true)) if status.public_unlisted_visibility? && status.account.user&.setting_reject_public_unlisted_subscription
|
||||
blocks = blocks.or(DomainBlock.where(detect_invalid_subscription: true)) if status.unlisted_visibility? && status.account.user&.setting_reject_unlisted_subscription
|
||||
blocks.pluck(:domain).uniq
|
||||
end
|
||||
|
||||
def banned_domains_for_misskey
|
||||
return @banned_domains_for_misskey if @banned_domains_for_misskey
|
||||
|
||||
return @banned_domains_for_misskey = [] if (!@status.account.user&.reject_public_unlisted_subscription? && !@status.account.user&.reject_unlisted_subscription?) || (!@status.public_unlisted_visibility? && !@status.unlisted_visibility?)
|
||||
|
||||
domains = banned_domains_for_misskey_of_status(@status)
|
||||
domains += banned_domains_for_misskey_of_status(@status.reblog) if @status.reblog? && @status.reblog.local?
|
||||
@banned_domains_for_misskey = domains.uniq
|
||||
|
|
|
@ -122,12 +122,17 @@ class FanOutOnWriteService < BaseService
|
|||
domain = @account.domain || Rails.configuration.x.local_domain
|
||||
|
||||
antennas = Antenna.availables
|
||||
antennas = antennas.left_joins(:antenna_accounts).where(any_accounts: true).or(Antenna.availables.left_joins(:antenna_accounts).where(antenna_accounts: { exclude: false, account: @account }))
|
||||
antennas = antennas.left_joins(:antenna_domains).where(any_domains: true).or(Antenna.availables.left_joins(:antenna_accounts).left_joins(:antenna_domains).where(antenna_domains: { exclude: false, name: domain }))
|
||||
antennas = antennas.left_joins(:antenna_tags).where(any_tags: true).or(Antenna.availables.left_joins(:antenna_accounts).left_joins(:antenna_domains).left_joins(:antenna_tags).where(antenna_tags: { exclude: false, tag: @status.tags }))
|
||||
antennas = antennas.where(account: @account.followers) if @status.visibility.to_sym == :unlisted
|
||||
antennas = antennas.left_joins(:antenna_domains).where(any_domains: true).or(Antenna.left_joins(:antenna_domains).where(antenna_domains: { name: domain }))
|
||||
antennas = antennas.where(with_media_only: false) unless @status.with_media?
|
||||
antennas = antennas.where.not(account: @account.blocking)
|
||||
|
||||
antennas = Antenna.where(id: antennas.select(:id))
|
||||
antennas = antennas.left_joins(:antenna_accounts).where(any_accounts: true).or(Antenna.left_joins(:antenna_accounts).where(antenna_accounts: { account: @account }))
|
||||
|
||||
tag_ids = @status.tags.pluck(:id)
|
||||
antennas = Antenna.where(id: antennas.select(:id))
|
||||
antennas = antennas.left_joins(:antenna_tags).where(any_tags: true).or(Antenna.left_joins(:antenna_tags).where(antenna_tags: { tag_id: tag_ids }))
|
||||
|
||||
antennas.in_batches do |ans|
|
||||
ans.each do |antenna|
|
||||
next unless antenna.enabled?
|
||||
|
|
|
@ -88,7 +88,7 @@ class RemoveStatusService < BaseService
|
|||
|
||||
status_reach_finder = StatusReachFinder.new(@status, unsafe: true)
|
||||
|
||||
ActivityPub::DeliveryWorker.push_bulk(status_reach_finder.inboxes, limit: 1_000) do |inbox_url|
|
||||
ActivityPub::DeliveryWorker.push_bulk(status_reach_finder.inboxes + status_reach_finder.inboxes_for_misskey, limit: 1_000) do |inbox_url|
|
||||
[signed_activity_json, @account.id, inbox_url]
|
||||
end
|
||||
end
|
||||
|
|
|
@ -35,6 +35,8 @@
|
|||
.fields-group
|
||||
= ff.input :show_application, wrapper: :with_label, recommended: true, label: I18n.t('simple_form.labels.defaults.setting_show_application'), hint: I18n.t('simple_form.hints.defaults.setting_show_application')
|
||||
|
||||
%h4= t 'preferences.stop_deliver'
|
||||
|
||||
.fields-group
|
||||
= f.input :setting_send_without_domain_blocks, as: :boolean, wrapper: :with_label
|
||||
|
||||
|
|
|
@ -23,16 +23,16 @@ class ActivityPub::RawDistributionWorker
|
|||
protected
|
||||
|
||||
def distribute!
|
||||
unless inboxes.empty?
|
||||
ActivityPub::DeliveryWorker.push_bulk(inboxes, limit: 1_000) do |inbox_url|
|
||||
[payload, source_account_id, inbox_url, options]
|
||||
unless inboxes_for_misskey.empty?
|
||||
ActivityPub::DeliveryWorker.push_bulk(inboxes_for_misskey, limit: 1_000) do |inbox_url|
|
||||
[payload_for_misskey, source_account_id, inbox_url, options]
|
||||
end
|
||||
end
|
||||
|
||||
return if inboxes_for_misskey.empty?
|
||||
return if inboxes.empty?
|
||||
|
||||
ActivityPub::DeliveryWorker.push_bulk(inboxes_for_misskey, limit: 1_000) do |inbox_url|
|
||||
[payload_for_misskey, source_account_id, inbox_url, options]
|
||||
ActivityPub::DeliveryWorker.push_bulk(inboxes, limit: 1_000) do |inbox_url|
|
||||
[payload, source_account_id, inbox_url, options]
|
||||
end
|
||||
end
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue