Add: #87 フォロワーのみに購読を許可する設定 (#239)

* Wip: マイグレーション、設定など一式

* Fix test

* Fix test

* Fix: マスター用の設定を他サーバーに送信しないよう修正

* DTL、外部サーバーの情報受け入れのテストを追加

* スペルミスを修正

* Web画面に設定項目追加

* 既存の`master_settings`を上書きしないよう修正
This commit is contained in:
KMY(雪あすか) 2023-11-08 17:51:36 +09:00 committed by GitHub
parent a7dec3c59b
commit 76f2f2ed0c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
26 changed files with 284 additions and 52 deletions

View file

@ -44,7 +44,7 @@ class AccountStatusesFilter
private
def initial_scope
if (suspended? || (domain_block&.reject_send_dissubscribable && @account.dissubscribable)) || domain_block&.reject_send_media || blocked?
if (suspended? || (domain_block&.reject_send_dissubscribable && !@account.all_subscribable?)) || domain_block&.reject_send_media || blocked?
Status.none
elsif anonymous?
account.statuses.where(visibility: %i(public unlisted public_unlisted))

View file

@ -236,7 +236,14 @@ class ActivityPub::TagManager
end
def subscribable_by(account)
account.dissubscribable ? [] : [COLLECTIONS[:public]]
case account.subscription_policy
when :allow
[COLLECTIONS[:public]]
when :followers_only
[account_followers_url(account)]
else
[]
end
end
def searchable_by(status)

View file

@ -195,7 +195,7 @@ class StatusReachFinder
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_dissubscribable: true)) unless status.account.all_subscribable?
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