Merge branch 'kb_development' into kb_migration

This commit is contained in:
KMY 2023-05-07 14:11:18 +09:00
commit b7ef24d3e8
9 changed files with 46 additions and 20 deletions

View file

@ -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

View file

@ -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

View file

@ -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?

View file

@ -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

View file

@ -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

View file

@ -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