From 989efcd78e5f1bb4b545f576fc38e0fc1a2c68f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?KMY=EF=BC=88=E9=9B=AA=E3=81=82=E3=81=99=E3=81=8B=EF=BC=89?= Date: Fri, 19 Jan 2024 08:39:58 +0900 Subject: [PATCH] =?UTF-8?q?Remove:=20=E7=8F=BE=E5=9C=A8=E4=BD=BF=E3=82=8F?= =?UTF-8?q?=E3=82=8C=E3=81=A6=E3=81=84=E3=81=AA=E3=81=84=E3=83=89=E3=83=A1?= =?UTF-8?q?=E3=82=A4=E3=83=B3=E3=83=96=E3=83=AD=E3=83=83=E3=82=AF=E7=84=A1?= =?UTF-8?q?=E8=A6=96=E8=A8=AD=E5=AE=9A=E3=81=AE=E3=83=87=E3=83=83=E3=83=89?= =?UTF-8?q?=E3=82=B3=E3=83=BC=E3=83=89=20(#476)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Remove: 現在使われていないドメインブロック無視設定のデッドコード * Refactoring * Fix test --- app/controllers/statuses_controller.rb | 4 +--- app/lib/activitypub/tag_manager.rb | 2 +- app/lib/status_reach_finder.rb | 13 ++++--------- .../concerns/status/domain_block_concern.rb | 18 ++++++++++++++++++ app/models/concerns/user/has_settings.rb | 4 ---- app/models/status.rb | 1 + app/models/user_settings.rb | 1 - app/policies/status_policy.rb | 10 ++-------- config/locales/simple_form.en.yml | 1 - config/locales/simple_form.ja.yml | 2 -- spec/lib/activitypub/tag_manager_spec.rb | 11 ++++++++--- .../note_for_misskey_serializer_spec.rb | 2 +- 12 files changed, 36 insertions(+), 33 deletions(-) create mode 100644 app/models/concerns/status/domain_block_concern.rb diff --git a/app/controllers/statuses_controller.rb b/app/controllers/statuses_controller.rb index 1e7a8f406c..b656f45dd7 100644 --- a/app/controllers/statuses_controller.rb +++ b/app/controllers/statuses_controller.rb @@ -83,9 +83,7 @@ class StatusesController < ApplicationController info = InstanceInfo.find_by(domain: signed_request_account.domain) return false if info.nil? - @misskey_software = %w(misskey calckey cherrypick sharkey).include?(info.software) && - ((@status.public_unlisted_visibility? && @status.account.user&.setting_reject_public_unlisted_subscription) || - (@status.unlisted_visibility? && @status.account.user&.setting_reject_unlisted_subscription)) + @misskey_software = %w(misskey calckey cherrypick sharkey).include?(info.software) && @status.sending_maybe_compromised_privacy? end def status_activity_serializer diff --git a/app/lib/activitypub/tag_manager.rb b/app/lib/activitypub/tag_manager.rb index eef0f6a209..5cf7a67133 100644 --- a/app/lib/activitypub/tag_manager.rb +++ b/app/lib/activitypub/tag_manager.rb @@ -153,7 +153,7 @@ class ActivityPub::TagManager end def cc_for_misskey(status) - if (status.account.user&.setting_reject_unlisted_subscription && status.unlisted_visibility?) || (status.account.user&.setting_reject_public_unlisted_subscription && status.public_unlisted_visibility?) + if status.sending_maybe_compromised_privacy? cc = cc_private_visibility(status) cc << uri_for(status.reblog.account) if status.reblog? return cc diff --git a/app/lib/status_reach_finder.rb b/app/lib/status_reach_finder.rb index 76c4315b58..aad6bb735f 100644 --- a/app/lib/status_reach_finder.rb +++ b/app/lib/status_reach_finder.rb @@ -192,19 +192,15 @@ class StatusReachFinder end def banned_domains_of_status(status) - if status.account.user&.setting_send_without_domain_blocks - [] - else - blocks = DomainBlock.where(domain: nil) - blocks = blocks.or(DomainBlock.where(reject_send_sensitive: true)) if (status.with_media? && status.sensitive) || status.spoiler_text? - blocks.pluck(:domain).uniq - end + blocks = DomainBlock.where(domain: nil) + blocks = blocks.or(DomainBlock.where(reject_send_sensitive: true)) if (status.with_media? && status.sensitive) || status.spoiler_text? + blocks.pluck(:domain).uniq end def banned_domains_for_misskey return @banned_domains_for_misskey if defined?(@banned_domains_for_misskey) - return @banned_domains_for_misskey = [] if (!@status.account.user&.setting_reject_public_unlisted_subscription && !@status.account.user&.setting_reject_unlisted_subscription) || (!@status.public_unlisted_visibility? && !@status.unlisted_visibility?) + return @banned_domains_for_misskey = [] unless @status.sending_maybe_compromised_privacy? || (@status.reblog? && @status.reblog.sending_maybe_compromised_privacy?) domains = banned_domains_for_misskey_of_status(@status) domains += banned_domains_for_misskey_of_status(@status.reblog) if @status.reblog? && @status.reblog.local? @@ -213,7 +209,6 @@ class StatusReachFinder def banned_domains_for_misskey_of_status(status) return [] if status.public_searchability? - return [] unless (status.public_unlisted_visibility? && status.account.user&.setting_reject_public_unlisted_subscription) || (status.unlisted_visibility? && status.account.user&.setting_reject_unlisted_subscription) from_info = InstanceInfo.where(software: %w(misskey calckey cherrypick sharkey)).pluck(:domain) from_domain_block = DomainBlock.where(detect_invalid_subscription: true).pluck(:domain) diff --git a/app/models/concerns/status/domain_block_concern.rb b/app/models/concerns/status/domain_block_concern.rb new file mode 100644 index 0000000000..68313d8380 --- /dev/null +++ b/app/models/concerns/status/domain_block_concern.rb @@ -0,0 +1,18 @@ +# frozen_string_literal: true + +module Status::DomainBlockConcern + extend ActiveSupport::Concern + + def sending_sensitive? + return false unless local? + + (with_media? && sensitive) || spoiler_text? + end + + def sending_maybe_compromised_privacy? + return false unless local? + + (public_unlisted_visibility? && !public_searchability? && account.user&.setting_reject_public_unlisted_subscription) || + (unlisted_visibility? && !public_searchability? && account.user&.setting_reject_unlisted_subscription) + end +end diff --git a/app/models/concerns/user/has_settings.rb b/app/models/concerns/user/has_settings.rb index bfa2388cf8..d02a19947f 100644 --- a/app/models/concerns/user/has_settings.rb +++ b/app/models/concerns/user/has_settings.rb @@ -71,10 +71,6 @@ module User::HasSettings settings['reject_unlisted_subscription'] end - def setting_send_without_domain_blocks - settings['send_without_domain_blocks'] - end - def setting_stop_emoji_reaction_streaming settings['stop_emoji_reaction_streaming'] end diff --git a/app/models/status.rb b/app/models/status.rb index 082899e7ef..3816a88314 100644 --- a/app/models/status.rb +++ b/app/models/status.rb @@ -40,6 +40,7 @@ class Status < ApplicationRecord include Discard::Model include Paginable include RateLimitable + include Status::DomainBlockConcern include Status::SafeReblogInsert include Status::SearchConcern include Status::SnapshotConcern diff --git a/app/models/user_settings.rb b/app/models/user_settings.rb index 9a17d368ce..031a499e07 100644 --- a/app/models/user_settings.rb +++ b/app/models/user_settings.rb @@ -31,7 +31,6 @@ class UserSettings setting :public_post_to_unlisted, default: false setting :reject_public_unlisted_subscription, default: false setting :reject_unlisted_subscription, default: false - setting :send_without_domain_blocks, default: false setting :reaction_deck, default: nil setting :stop_emoji_reaction_streaming, default: false setting :emoji_reaction_streaming_notify_impl2, default: false diff --git a/app/policies/status_policy.rb b/app/policies/status_policy.rb index 24ecec71bb..2c0d3aa56f 100644 --- a/app/policies/status_policy.rb +++ b/app/policies/status_policy.rb @@ -143,14 +143,8 @@ class StatusPolicy < ApplicationPolicy def server_blocking_domain_of_status?(status) @domain_block ||= DomainBlock.find_by(domain: current_account&.domain) if @domain_block - if status.account.user&.setting_send_without_domain_blocks - (@domain_block.detect_invalid_subscription && status.public_unlisted_visibility? && status.account.user&.setting_reject_public_unlisted_subscription) || - (@domain_block.detect_invalid_subscription && status.public_visibility? && status.account.user&.setting_reject_unlisted_subscription) - else - (@domain_block.detect_invalid_subscription && status.public_unlisted_visibility? && status.account.user&.setting_reject_public_unlisted_subscription) || - (@domain_block.detect_invalid_subscription && status.public_visibility? && status.account.user&.setting_reject_unlisted_subscription) || - (@domain_block.reject_send_sensitive && ((status.with_media? && status.sensitive) || status.spoiler_text?)) - end + (@domain_block.detect_invalid_subscription && status.sending_maybe_compromised_privacy?) || + (@domain_block.reject_send_sensitive && status.sending_sensitive?) else false end diff --git a/config/locales/simple_form.en.yml b/config/locales/simple_form.en.yml index 6d20f856b3..538ced10ca 100644 --- a/config/locales/simple_form.en.yml +++ b/config/locales/simple_form.en.yml @@ -285,7 +285,6 @@ en: setting_reject_public_unlisted_subscription: Reject sending public unlisted visibility/non-public searchability posts to Misskey, Calckey setting_reject_unlisted_subscription: Reject sending unlisted visibility/non-public searchability posts to Misskey, Calckey setting_reverse_search_quote: Perform word-by-word search when search keywords are not enclosed in double quotes - 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_show_emoji_reaction_on_timeline: Show all stamps on timeline setting_show_quote_in_home: Show quotes in home, list or antenna timelines diff --git a/config/locales/simple_form.ja.yml b/config/locales/simple_form.ja.yml index 9d3ea08a21..7fb63b8523 100644 --- a/config/locales/simple_form.ja.yml +++ b/config/locales/simple_form.ja.yml @@ -60,7 +60,6 @@ ja: person: これは人が使用している通常のアカウントです phrase: 投稿内容の大文字小文字や閲覧注意に関係なく一致 scopes: アプリの API に許可するアクセス権を選択してください。最上位のスコープを選択する場合、個々のスコープを選択する必要はありません。 - setting_send_without_domain_blocks: 管理人が同人コンテンツの配送にふさわしくないと判断したサーバーに、制限に関係なく全ての投稿を配送します。ただし何が起きても自己責任になります setting_aggregate_reblogs: 最近ブーストされた投稿が新たにブーストされても表示しません (設定後受信したものにのみ影響) setting_always_send_emails: 通常、Mastodon からメール通知は行われません。 setting_bookmark_category_needed: すべてのカテゴリから削除したとき、ブックマークが自動で外れるようになります @@ -296,7 +295,6 @@ ja: setting_reject_public_unlisted_subscription: Misskey系サーバーに「ローカル公開」かつ検索許可「誰でも以外」の投稿を「フォロワーのみ」に変換して配送する setting_reject_unlisted_subscription: Misskey系サーバーに「非収載」かつ検索許可「誰でも以外」の投稿を「フォロワーのみ」に変換して配送する setting_reverse_search_quote: ダブルクオートで囲まず検索した時、単語単位で検索する - setting_send_without_domain_blocks: 管理人の設定した配送停止設定を拒否する (非推奨) setting_show_application: 送信したアプリを開示する setting_show_emoji_reaction_on_timeline: タイムライン上に他の人のつけたスタンプを表示する setting_simple_timeline_menu: タイムライン上でメニューの項目を減らす diff --git a/spec/lib/activitypub/tag_manager_spec.rb b/spec/lib/activitypub/tag_manager_spec.rb index caa940d169..34b4370d1b 100644 --- a/spec/lib/activitypub/tag_manager_spec.rb +++ b/spec/lib/activitypub/tag_manager_spec.rb @@ -158,19 +158,24 @@ RSpec.describe ActivityPub::TagManager do end it 'returns public collection for public status' do - status = Fabricate(:status, visibility: :public) + status = Fabricate(:status, account: user.account, visibility: :public) expect(subject.cc_for_misskey(status)).to eq [account_followers_url(status.account)] end it 'returns empty array for public_unlisted status' do - status = Fabricate(:status, account: user.account, visibility: :public_unlisted) + status = Fabricate(:status, account: user.account, visibility: :public_unlisted, searchability: :private) expect(subject.cc_for_misskey(status)).to eq [] end it 'returns empty array for unlisted status' do - status = Fabricate(:status, account: user.account, visibility: :unlisted) + status = Fabricate(:status, account: user.account, visibility: :unlisted, searchability: :private) expect(subject.cc_for_misskey(status)).to eq [] end + + it 'returns public collection for unlisted status but public searchability' do + status = Fabricate(:status, account: user.account, visibility: :unlisted, searchability: :public) + expect(subject.cc_for_misskey(status)).to eq ['https://www.w3.org/ns/activitystreams#Public'] + end end describe '#searchable_by' do diff --git a/spec/serializers/activitypub/note_for_misskey_serializer_spec.rb b/spec/serializers/activitypub/note_for_misskey_serializer_spec.rb index 233260f104..5666f4ed49 100644 --- a/spec/serializers/activitypub/note_for_misskey_serializer_spec.rb +++ b/spec/serializers/activitypub/note_for_misskey_serializer_spec.rb @@ -8,7 +8,7 @@ describe ActivityPub::NoteForMisskeySerializer do let(:serialization) { ActiveModelSerializers::SerializableResource.new(parent, serializer: described_class, adapter: ActivityPub::Adapter) } let!(:account) { Fabricate(:account) } let!(:other) { Fabricate(:account) } - let!(:parent) { Fabricate(:status, account: account, visibility: :unlisted) } + let!(:parent) { Fabricate(:status, account: account, visibility: :unlisted, searchability: :private) } let!(:reply_by_account_first) { Fabricate(:status, account: account, thread: parent, visibility: :public) } let!(:reply_by_account_next) { Fabricate(:status, account: account, thread: parent, visibility: :public) } let!(:reply_by_other_first) { Fabricate(:status, account: other, thread: parent, visibility: :public) }