diff --git a/app/controllers/settings/preferences_controller.rb b/app/controllers/settings/preferences_controller.rb index e7a047369c..4b9d60c03e 100644 --- a/app/controllers/settings/preferences_controller.rb +++ b/app/controllers/settings/preferences_controller.rb @@ -39,6 +39,7 @@ class Settings::PreferencesController < Settings::BaseController :setting_public_post_to_unlisted, :setting_reject_public_unlisted_subscription, :setting_reject_unlisted_subscription, + :setting_send_without_domain_blocks, :setting_default_language, :setting_unfollow_modal, :setting_boost_modal, diff --git a/app/lib/status_reach_finder.rb b/app/lib/status_reach_finder.rb index 475d41fa1c..5d972ebcd4 100644 --- a/app/lib/status_reach_finder.rb +++ b/app/lib/status_reach_finder.rb @@ -126,13 +126,15 @@ class StatusReachFinder def banned_domains_of_status(status) 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 + unless status.account.user&.send_without_domain_blocks? + 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? + end blocks = blocks.or(DomainBlock.where(detect_invalid_subscription: true)) if status.public_unlisted_visibility? && status.account.user&.reject_public_unlisted_subscription? blocks = blocks.or(DomainBlock.where(detect_invalid_subscription: true)) if status.unlisted_visibility? && status.account.user&.reject_unlisted_subscription? - 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 diff --git a/app/lib/user_settings_decorator.rb b/app/lib/user_settings_decorator.rb index 3354c5fa23..0840697e23 100644 --- a/app/lib/user_settings_decorator.rb +++ b/app/lib/user_settings_decorator.rb @@ -23,6 +23,7 @@ class UserSettingsDecorator user.settings['public_post_to_unlisted']=public_post_to_unlisted_preference if change?('setting_public_post_to_unlisted') user.settings['reject_public_unlisted_subscription'] = reject_public_unlisted_subscription_preference if change?('setting_reject_public_unlisted_subscription') user.settings['reject_unlisted_subscription'] = reject_unlisted_subscription_preference if change?('setting_reject_unlisted_subscription') + user.settings['send_without_domain_blocks']=send_without_domain_blocks_preference if change?('setting_send_without_domain_blocks') user.settings['default_language'] = default_language_preference if change?('setting_default_language') user.settings['unfollow_modal'] = unfollow_modal_preference if change?('setting_unfollow_modal') user.settings['boost_modal'] = boost_modal_preference if change?('setting_boost_modal') @@ -71,11 +72,15 @@ class UserSettingsDecorator end def reject_public_unlisted_subscription_preference - boolean_cast_setting 'setting_reject_public_unlisted_subscription_preference' + boolean_cast_setting 'setting_reject_public_unlisted_subscription' end def reject_unlisted_subscription_preference - boolean_cast_setting 'setting_reject_unlisted_subscription_preference' + boolean_cast_setting 'setting_reject_unlisted_subscription' + end + + def send_without_domain_blocks_preference + boolean_cast_setting 'setting_send_without_domain_blocks' end def unfollow_modal_preference diff --git a/app/models/user.rb b/app/models/user.rb index 1e755e930a..31246627c6 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -139,6 +139,7 @@ class User < ApplicationRecord :advanced_layout, :use_blurhash, :use_pending_items, :trends, :crop_images, :disable_swiping, :always_send_emails, :public_post_to_unlisted, :reject_public_unlisted_subscription, :reject_unlisted_subscription, + :send_without_domain_blocks, to: :settings, prefix: :setting, allow_nil: false delegate :can?, to: :role @@ -328,6 +329,10 @@ class User < ApplicationRecord settings.reject_unlisted_subscription end + def send_without_domain_blocks? + settings.send_without_domain_blocks + end + def allows_report_emails? settings.notification_emails['report'] end diff --git a/app/policies/status_policy.rb b/app/policies/status_policy.rb index e177703ed9..f8913f41e9 100644 --- a/app/policies/status_policy.rb +++ b/app/policies/status_policy.rb @@ -111,13 +111,17 @@ class StatusPolicy < ApplicationPolicy def server_blocking_domain_of_status?(status) @domain_block ||= DomainBlock.find_by(domain: current_account&.domain) if @domain_block - (@domain_block.reject_send_not_public_searchability && status.compute_searchability != 'public') || - (@domain_block.reject_send_public_unlisted && status.public_unlisted_visibility?) || - (@domain_block.reject_send_dissubscribable && status.account.dissubscribable) || - (@domain_block.detect_invalid_subscription && status.public_unlisted_visibility? && status.account.user&.reject_public_unlisted_subscription) || - (@domain_block.detect_invalid_subscription && status.public_visibility? && status.account.user&.reject_unlisted_subscription) || - (@domain_block.reject_send_media && status.with_media?) || - (@domain_block.reject_send_sensitive && ((status.with_media? && status.sensitive) || status.spoiler_text?)) + unless status.account.user&.send_without_domain_blocks? + (@domain_block.reject_send_not_public_searchability && status.compute_searchability != 'public') || + (@domain_block.reject_send_public_unlisted && status.public_unlisted_visibility?) || + (@domain_block.reject_send_dissubscribable && status.account.dissubscribable) || + (@domain_block.detect_invalid_subscription && status.public_unlisted_visibility? && status.account.user&.reject_public_unlisted_subscription) || + (@domain_block.detect_invalid_subscription && status.public_visibility? && status.account.user&.reject_unlisted_subscription) || + (@domain_block.reject_send_media && status.with_media?) || + (@domain_block.reject_send_sensitive && ((status.with_media? && status.sensitive) || status.spoiler_text?)) + else + (@domain_block.detect_invalid_subscription && status.public_unlisted_visibility? && status.account.user&.reject_public_unlisted_subscription) || + (@domain_block.detect_invalid_subscription && status.public_visibility? && status.account.user&.reject_unlisted_subscription) else false end diff --git a/app/views/settings/preferences/other/show.html.haml b/app/views/settings/preferences/other/show.html.haml index 69330e83cf..a0890b7185 100644 --- a/app/views/settings/preferences/other/show.html.haml +++ b/app/views/settings/preferences/other/show.html.haml @@ -34,6 +34,9 @@ .fields-group = f.input :setting_show_application, as: :boolean, wrapper: :with_label, recommended: true + .fields-group + = f.input :setting_send_without_domain_blocks, as: :boolean, wrapper: :with_label + .fields-group = f.input :setting_reject_public_unlisted_subscription, as: :boolean, wrapper: :with_label diff --git a/config/locales/simple_form.en.yml b/config/locales/simple_form.en.yml index 4d5fd1dbc0..5e10a23fdf 100644 --- a/config/locales/simple_form.en.yml +++ b/config/locales/simple_form.en.yml @@ -224,6 +224,7 @@ en: setting_reduce_motion: Reduce motion in animations setting_reject_public_unlisted_subscription: Reject sending public unlisted posts to Misskey, Calckey setting_reject_unlisted_subscription: Reject sending unlisted posts to Misskey, Calckey + setting_send_without_domain_blocks: Send your post to all server with administrator set as rejecting-post-server for protect you [DEPRECATED] setting_show_application: Disclose application used to send posts setting_system_font_ui: Use system's default font setting_theme: Site theme diff --git a/config/locales/simple_form.ja.yml b/config/locales/simple_form.ja.yml index 180d31e1f1..3042a8fb7c 100644 --- a/config/locales/simple_form.ja.yml +++ b/config/locales/simple_form.ja.yml @@ -52,6 +52,7 @@ ja: person: これは人が使用している通常のアカウントです phrase: 投稿内容の大文字小文字や閲覧注意に関係なく一致 scopes: アプリの API に許可するアクセス権を選択してください。最上位のスコープを選択する場合、個々のスコープを選択する必要はありません。 + setting_send_without_domain_blocks: 管理人が同人コンテンツの配送にふさわしくないと判断したサーバーに、制限に関係なく全ての投稿を配送します。ただし何が起きても自己責任になります setting_aggregate_reblogs: 最近ブーストされた投稿が新たにブーストされても表示しません (設定後受信したものにのみ影響) setting_always_send_emails: 通常、Mastodon からメール通知は行われません。 setting_default_sensitive: 閲覧注意状態のメディアはデフォルトでは内容が伏せられ、クリックして初めて閲覧できるようになります @@ -227,6 +228,7 @@ ja: setting_reduce_motion: アニメーションの動きを減らす setting_reject_public_unlisted_subscription: 管理者の指定したサーバーに「ローカル公開」投稿を配送しない setting_reject_unlisted_subscription: 管理者の指定したサーバーに「未収載」投稿を配送しない + setting_send_without_domain_blocks: 管理人の設定した配送停止設定を拒否する (非推奨) setting_show_application: 送信したアプリを開示する setting_system_font_ui: システムのデフォルトフォントを使う setting_theme: サイトテーマ