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
|
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 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
|
with_lock("create:#{object_uri}") do
|
||||||
return if delete_arrived_first?(object_uri) || poll_vote?
|
return if delete_arrived_first?(object_uri) || poll_vote?
|
||||||
|
@ -136,7 +137,13 @@ class ActivityPub::Activity::Create < ActivityPub::Activity
|
||||||
}
|
}
|
||||||
end
|
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
|
# 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
|
# 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|
|
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!
|
accounts_in_audience.uniq!
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@accounts_in_audience = accounts_in_audience
|
||||||
|
end
|
||||||
|
|
||||||
|
def process_audience
|
||||||
accounts_in_audience.each do |account|
|
accounts_in_audience.each do |account|
|
||||||
# This runs after tags are processed, and those translate into non-silent
|
# This runs after tags are processed, and those translate into non-silent
|
||||||
# mentions, which take precedence
|
# mentions, which take precedence
|
||||||
|
|
|
@ -14,7 +14,11 @@ class StatusReachFinder
|
||||||
end
|
end
|
||||||
|
|
||||||
def inboxes_for_misskey
|
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
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
@ -121,26 +125,28 @@ class StatusReachFinder
|
||||||
|
|
||||||
domains = banned_domains_of_status(@status)
|
domains = banned_domains_of_status(@status)
|
||||||
domains += banned_domains_of_status(@status.reblog) if @status.reblog? && @status.reblog.local?
|
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
|
end
|
||||||
|
|
||||||
def banned_domains_of_status(status)
|
def banned_domains_of_status(status)
|
||||||
blocks = DomainBlock.where(domain: nil)
|
if status.account.user&.setting_send_without_domain_blocks
|
||||||
unless 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_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_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_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_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 = blocks.or(DomainBlock.where(reject_send_sensitive: true)) if (status.with_media? && status.sensitive) || status.spoiler_text?
|
||||||
|
blocks.pluck(:domain).uniq
|
||||||
end
|
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
|
end
|
||||||
|
|
||||||
def banned_domains_for_misskey
|
def banned_domains_for_misskey
|
||||||
return @banned_domains_for_misskey if @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)
|
||||||
domains += banned_domains_for_misskey_of_status(@status.reblog) if @status.reblog? && @status.reblog.local?
|
domains += banned_domains_for_misskey_of_status(@status.reblog) if @status.reblog? && @status.reblog.local?
|
||||||
@banned_domains_for_misskey = domains.uniq
|
@banned_domains_for_misskey = domains.uniq
|
||||||
|
|
|
@ -122,12 +122,17 @@ class FanOutOnWriteService < BaseService
|
||||||
domain = @account.domain || Rails.configuration.x.local_domain
|
domain = @account.domain || Rails.configuration.x.local_domain
|
||||||
|
|
||||||
antennas = Antenna.availables
|
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.left_joins(:antenna_domains).where(antenna_domains: { name: domain }))
|
||||||
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.where(with_media_only: false) unless @status.with_media?
|
antennas = antennas.where(with_media_only: false) unless @status.with_media?
|
||||||
antennas = antennas.where.not(account: @account.blocking)
|
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|
|
antennas.in_batches do |ans|
|
||||||
ans.each do |antenna|
|
ans.each do |antenna|
|
||||||
next unless antenna.enabled?
|
next unless antenna.enabled?
|
||||||
|
|
|
@ -88,7 +88,7 @@ class RemoveStatusService < BaseService
|
||||||
|
|
||||||
status_reach_finder = StatusReachFinder.new(@status, unsafe: true)
|
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]
|
[signed_activity_json, @account.id, inbox_url]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -35,6 +35,8 @@
|
||||||
.fields-group
|
.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')
|
= 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
|
.fields-group
|
||||||
= f.input :setting_send_without_domain_blocks, as: :boolean, wrapper: :with_label
|
= f.input :setting_send_without_domain_blocks, as: :boolean, wrapper: :with_label
|
||||||
|
|
||||||
|
|
|
@ -23,16 +23,16 @@ class ActivityPub::RawDistributionWorker
|
||||||
protected
|
protected
|
||||||
|
|
||||||
def distribute!
|
def distribute!
|
||||||
unless inboxes.empty?
|
unless inboxes_for_misskey.empty?
|
||||||
ActivityPub::DeliveryWorker.push_bulk(inboxes, limit: 1_000) do |inbox_url|
|
ActivityPub::DeliveryWorker.push_bulk(inboxes_for_misskey, limit: 1_000) do |inbox_url|
|
||||||
[payload, source_account_id, inbox_url, options]
|
[payload_for_misskey, source_account_id, inbox_url, options]
|
||||||
end
|
end
|
||||||
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|
|
ActivityPub::DeliveryWorker.push_bulk(inboxes, limit: 1_000) do |inbox_url|
|
||||||
[payload_for_misskey, source_account_id, inbox_url, options]
|
[payload, source_account_id, inbox_url, options]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -1498,6 +1498,7 @@ en:
|
||||||
other: Other
|
other: Other
|
||||||
posting_defaults: Posting defaults
|
posting_defaults: Posting defaults
|
||||||
public_timelines: Public timelines
|
public_timelines: Public timelines
|
||||||
|
stop_deliver: Stop delivering
|
||||||
privacy_policy:
|
privacy_policy:
|
||||||
title: Privacy Policy
|
title: Privacy Policy
|
||||||
reactions:
|
reactions:
|
||||||
|
|
|
@ -1488,6 +1488,7 @@ ja:
|
||||||
other: その他
|
other: その他
|
||||||
posting_defaults: デフォルトの投稿設定
|
posting_defaults: デフォルトの投稿設定
|
||||||
public_timelines: 公開タイムライン
|
public_timelines: 公開タイムライン
|
||||||
|
stop_deliver: 配送停止
|
||||||
privacy_policy:
|
privacy_policy:
|
||||||
title: プライバシーポリシー
|
title: プライバシーポリシー
|
||||||
reactions:
|
reactions:
|
||||||
|
|
|
@ -63,7 +63,7 @@ ja:
|
||||||
setting_display_media_expand: Misskeyなどは4個を超えて投稿可能です。その追加分を最大8個まで表示します。kmyblueからアップロードはできません
|
setting_display_media_expand: Misskeyなどは4個を超えて投稿可能です。その追加分を最大8個まで表示します。kmyblueからアップロードはできません
|
||||||
setting_noindex: 公開プロフィールおよび各投稿ページに影響します
|
setting_noindex: 公開プロフィールおよび各投稿ページに影響します
|
||||||
setting_public_post_to_unlisted: 未対応のサードパーティアプリからもローカル公開で投稿できますが、公開投稿はWeb以外できなくなります
|
setting_public_post_to_unlisted: 未対応のサードパーティアプリからもローカル公開で投稿できますが、公開投稿はWeb以外できなくなります
|
||||||
setting_reject_unlisted_subscription: Misskeyやそのフォーク(Calckeyなど)は、フォローしていないアカウントの「未収載」投稿を **購読・検索** することができます。これはMastodonにおける「未収載」投稿の基本的な考え方、扱い方と矛盾します。そのようなサーバーのうち管理人が指定したものに、指定した公開範囲の投稿を「フォロワーのみ」として配送します。ただし構造上、完璧な対応は困難でたまに未収載として配信されること、ご理解ください
|
setting_reject_unlisted_subscription: Misskeyやそのフォーク(Calckeyなど)は、フォローしていないアカウントの「未収載」投稿を **購読・検索** することができます。これはkmyblueの挙動と異なります。そのようなサーバーのうち管理人が指定したものに、指定した公開範囲の投稿を「フォロワーのみ」として配送します。ただし構造上、完璧な対応は困難でたまに未収載として配信されること、ご理解ください
|
||||||
setting_show_application: 投稿するのに使用したアプリが投稿の詳細ビューに表示されるようになります
|
setting_show_application: 投稿するのに使用したアプリが投稿の詳細ビューに表示されるようになります
|
||||||
setting_use_blurhash: ぼかしはメディアの色を元に生成されますが、細部は見えにくくなっています
|
setting_use_blurhash: ぼかしはメディアの色を元に生成されますが、細部は見えにくくなっています
|
||||||
setting_use_pending_items: 新着があってもタイムラインを自動的にスクロールしないようにします
|
setting_use_pending_items: 新着があってもタイムラインを自動的にスクロールしないようにします
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue