From 294acdfd94c391486ae9a50111ced2a75dbaaa3a 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: Wed, 2 Oct 2024 08:22:30 +0900 Subject: [PATCH] =?UTF-8?q?Change:=20#844=20`searchableBy`=E3=81=AB?= =?UTF-8?q?=E6=84=8F=E5=9B=B3=E3=81=97=E3=81=AA=E3=81=84=E5=80=A4=E3=81=8C?= =?UTF-8?q?=E5=85=A5=E3=81=A3=E3=81=A6=E3=81=84=E3=81=9F=E3=81=A8=E3=81=8D?= =?UTF-8?q?=E3=81=AE=E6=8C=99=E5=8B=95=20(#862)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/lib/activitypub/parser/status_parser.rb | 7 +++--- .../activitypub/process_account_service.rb | 10 +++++---- spec/lib/activitypub/activity/create_spec.rb | 22 +++++++++---------- .../process_account_service_spec.rb | 16 +++++++------- 4 files changed, 29 insertions(+), 26 deletions(-) diff --git a/app/lib/activitypub/parser/status_parser.rb b/app/lib/activitypub/parser/status_parser.rb index cc9788e964..5867f07d86 100644 --- a/app/lib/activitypub/parser/status_parser.rb +++ b/app/lib/activitypub/parser/status_parser.rb @@ -147,7 +147,7 @@ class ActivityPub::Parser::StatusParser def audience_searchable_by return nil if @object['searchableBy'].nil? - @audience_searchable_by = as_array(@object['searchableBy']).map { |x| value_or_id(x) } + @audience_searchable_by = as_array(@object['searchableBy']).map { |x| value_or_id(x) }.compact_blank end def summary_language_map? @@ -204,17 +204,18 @@ class ActivityPub::Parser::StatusParser def searchability_from_audience return nil if audience_searchable_by.blank? + return :limited if audience_searchable_by.include?('kmyblue:Limited') || audience_searchable_by.include?('as:Limited') if audience_searchable_by.any? { |uri| ActivityPub::TagManager.instance.public_collection?(uri) } :public - elsif audience_searchable_by.include?('kmyblue:Limited') || audience_searchable_by.include?('as:Limited') - :limited elsif audience_searchable_by.include?('kmyblue:LocalPublic') && @friend :public_unlisted elsif audience_searchable_by.include?(@account.followers_url) :private elsif audience_searchable_by.include?(@account.uri) || audience_searchable_by.include?(@account.url) :direct + else + :limited end end end diff --git a/app/services/activitypub/process_account_service.rb b/app/services/activitypub/process_account_service.rb index da2b9db379..a7825594bd 100644 --- a/app/services/activitypub/process_account_service.rb +++ b/app/services/activitypub/process_account_service.rb @@ -278,7 +278,7 @@ class ActivityPub::ProcessAccountService < BaseService def audience_searchable_by return nil if @json['searchableBy'].nil? - @audience_searchable_by_processaccountservice = as_array(@json['searchableBy']).map { |x| value_or_id(x) } + @audience_searchable_by_processaccountservice = as_array(@json['searchableBy']).map { |x| value_or_id(x) }.compact_blank end def searchability_from_audience @@ -289,14 +289,16 @@ class ActivityPub::ProcessAccountService < BaseService return invalid_subscription_software? ? misskey_searchability_from_indexable : :direct end + return :limited if audience_searchable_by.include?('kmyblue:Limited') || audience_searchable_by.include?('as:Limited') + if audience_searchable_by.any? { |uri| ActivityPub::TagManager.instance.public_collection?(uri) } :public elsif audience_searchable_by.include?(@account.followers_url) :private - elsif audience_searchable_by.include?('kmyblue:Limited') || audience_searchable_by.include?('as:Limited') - :limited - else + elsif audience_searchable_by.include?(@account.uri) || audience_searchable_by.include?(@account.url) :direct + else + :limited end end diff --git a/spec/lib/activitypub/activity/create_spec.rb b/spec/lib/activitypub/activity/create_spec.rb index f51d9ddb06..fad45d3cb7 100644 --- a/spec/lib/activitypub/activity/create_spec.rb +++ b/spec/lib/activitypub/activity/create_spec.rb @@ -653,6 +653,17 @@ RSpec.describe ActivityPub::Activity::Create do end end + context 'with unintended value' do + let(:searchable_by) { 'ohagi' } + + it 'create status' do + status = sender.statuses.first + + expect(status).to_not be_nil + expect(status.searchability).to eq 'limited' + end + end + context 'with direct when not specify' do let(:searchable_by) { nil } @@ -675,17 +686,6 @@ RSpec.describe ActivityPub::Activity::Create do end end - context 'with limited old spec' do - let(:searchable_by) { 'as:Limited' } - - it 'create status' do - status = sender.statuses.first - - expect(status).to_not be_nil - expect(status.searchability).to eq 'limited' - end - end - context 'with bio' do let(:searchable_by) { nil } diff --git a/spec/services/activitypub/process_account_service_spec.rb b/spec/services/activitypub/process_account_service_spec.rb index d775589b20..21d6c15ac3 100644 --- a/spec/services/activitypub/process_account_service_spec.rb +++ b/spec/services/activitypub/process_account_service_spec.rb @@ -165,14 +165,6 @@ RSpec.describe ActivityPub::ProcessAccountService do end end - context 'when limited old spec' do - let(:searchable_by) { 'as:Limited' } - - it 'searchability is limited' do - expect(subject.searchability).to eq 'limited' - end - end - context 'when empty array' do let(:searchable_by) { '' } @@ -181,6 +173,14 @@ RSpec.describe ActivityPub::ProcessAccountService do end end + context 'when unintended value' do + let(:searchable_by) { 'ohagi' } + + it 'searchability is direct' do + expect(subject.searchability).to eq 'limited' + end + end + context 'when default value' do let(:searchable_by) { nil }