From 279e4465ac359f94353a5a2b242b8b99c95868aa Mon Sep 17 00:00:00 2001 From: KMY Date: Thu, 25 May 2023 11:20:26 +0900 Subject: [PATCH 01/10] Fix loginonly activitypub spec --- app/lib/activitypub/activity/create.rb | 2 +- app/lib/activitypub/parser/status_parser.rb | 2 +- app/lib/activitypub/tag_manager.rb | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/app/lib/activitypub/activity/create.rb b/app/lib/activitypub/activity/create.rb index 414ada0fa0..e9ef9de370 100644 --- a/app/lib/activitypub/activity/create.rb +++ b/app/lib/activitypub/activity/create.rb @@ -526,7 +526,7 @@ class ActivityPub::Activity::Create < ActivityPub::Activity :public elsif audience_cc.any? { |cc| ActivityPub::TagManager.instance.public_collection?(cc) } :unlisted - elsif audience_cc.include?('as:LoginOnly') + elsif audience_to.include?('as:LoginOnly') :login elsif audience_to.include?(@account.followers_url) :private diff --git a/app/lib/activitypub/parser/status_parser.rb b/app/lib/activitypub/parser/status_parser.rb index aa871656e9..7ceb0a3584 100644 --- a/app/lib/activitypub/parser/status_parser.rb +++ b/app/lib/activitypub/parser/status_parser.rb @@ -77,7 +77,7 @@ class ActivityPub::Parser::StatusParser :public elsif audience_cc.any? { |cc| ActivityPub::TagManager.instance.public_collection?(cc) } :unlisted - elsif audience_cc.include?('as:LoginOnly') + elsif audience_to.include?('as:LoginOnly') :login elsif audience_to.include?(@magic_values[:followers_collection]) :private diff --git a/app/lib/activitypub/tag_manager.rb b/app/lib/activitypub/tag_manager.rb index ea319bf6ae..b57023507e 100644 --- a/app/lib/activitypub/tag_manager.rb +++ b/app/lib/activitypub/tag_manager.rb @@ -86,8 +86,10 @@ class ActivityPub::TagManager case status.visibility when 'public' [COLLECTIONS[:public]] - when 'unlisted', 'public_unlisted', 'login', 'private' + when 'unlisted', 'public_unlisted', 'private' [account_followers_url(status.account)] + when 'login' + [account_followers_url(status.account), 'as:LoginOnly'] when 'direct', 'limited' if status.account.silenced? # Only notify followers if the account is locally silenced @@ -124,8 +126,6 @@ class ActivityPub::TagManager cc << account_followers_url(status.account) when 'unlisted', 'public_unlisted' cc << COLLECTIONS[:public] - when 'login' - cc << 'as:LoginOnly' end cc + cc_private_visibility(status) From 399606a55ca7095558b971e86ef1cde20c2c9b21 Mon Sep 17 00:00:00 2001 From: KMY Date: Thu, 25 May 2023 14:46:20 +0900 Subject: [PATCH 02/10] Fix receiving loginonly --- app/lib/activitypub/activity/create.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/lib/activitypub/activity/create.rb b/app/lib/activitypub/activity/create.rb index e9ef9de370..414ada0fa0 100644 --- a/app/lib/activitypub/activity/create.rb +++ b/app/lib/activitypub/activity/create.rb @@ -526,7 +526,7 @@ class ActivityPub::Activity::Create < ActivityPub::Activity :public elsif audience_cc.any? { |cc| ActivityPub::TagManager.instance.public_collection?(cc) } :unlisted - elsif audience_to.include?('as:LoginOnly') + elsif audience_cc.include?('as:LoginOnly') :login elsif audience_to.include?(@account.followers_url) :private From e726982065ff140c04bb5f04a1f963d518f9b53b Mon Sep 17 00:00:00 2001 From: KMY Date: Thu, 25 May 2023 14:46:34 +0900 Subject: [PATCH 03/10] Fix searchability=4 error --- app/models/account.rb | 2 +- app/models/status.rb | 2 +- app/serializers/rest/account_serializer.rb | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/models/account.rb b/app/models/account.rb index 357d62404a..2bf9be7b97 100644 --- a/app/models/account.rb +++ b/app/models/account.rb @@ -86,7 +86,7 @@ class Account < ApplicationRecord enum protocol: { ostatus: 0, activitypub: 1 } enum suspension_origin: { local: 0, remote: 1 }, _prefix: true - enum searchability: { public: 0, unlisted: 1, private: 2, direct: 3, limited: 4, public_unlisted: 10 }, _suffix: :searchability + enum searchability: { public: 0, private: 1, direct: 2, limited: 3, unsupported: 4, public_unlisted: 10 }, _suffix: :searchability validates :username, presence: true validates_with UniqueUsernameValidator, if: -> { will_save_change_to_username? } diff --git a/app/models/status.rb b/app/models/status.rb index b6f5ac1152..2f275cbd86 100644 --- a/app/models/status.rb +++ b/app/models/status.rb @@ -388,7 +388,7 @@ class Status < ApplicationRecord # searchability || Status.searchabilities.invert.fetch([Account.searchabilities[account.searchability], Status.visibilities[visibility] || 0].max, nil) || 'direct' # Reactions only (generic: direct) return searchability if searchability - return account.searchability if account.local? && account.searchability + return account.searchability if account.local? && account.searchability && !account.unsupported_searchability? 'direct' end diff --git a/app/serializers/rest/account_serializer.rb b/app/serializers/rest/account_serializer.rb index a8355c7063..dbd6ab2186 100644 --- a/app/serializers/rest/account_serializer.rb +++ b/app/serializers/rest/account_serializer.rb @@ -5,7 +5,7 @@ class REST::AccountSerializer < ActiveModel::Serializer include FormattingHelper attributes :id, :username, :acct, :display_name, :locked, :bot, :discoverable, :group, :created_at, - :note, :url, :avatar, :avatar_static, :header, :header_static, :searchability, :subscribable, + :note, :url, :avatar, :avatar_static, :header, :header_static, :subscribable, :followers_count, :following_count, :statuses_count, :last_status_at, :other_settings, :noindex From e67c73846f789ced473654e01caa346c0fe96c11 Mon Sep 17 00:00:00 2001 From: KMY Date: Thu, 25 May 2023 14:47:41 +0900 Subject: [PATCH 04/10] Revert "Fix receiving loginonly" This reverts commit 399606a55ca7095558b971e86ef1cde20c2c9b21. --- app/lib/activitypub/activity/create.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/lib/activitypub/activity/create.rb b/app/lib/activitypub/activity/create.rb index 414ada0fa0..e9ef9de370 100644 --- a/app/lib/activitypub/activity/create.rb +++ b/app/lib/activitypub/activity/create.rb @@ -526,7 +526,7 @@ class ActivityPub::Activity::Create < ActivityPub::Activity :public elsif audience_cc.any? { |cc| ActivityPub::TagManager.instance.public_collection?(cc) } :unlisted - elsif audience_cc.include?('as:LoginOnly') + elsif audience_to.include?('as:LoginOnly') :login elsif audience_to.include?(@account.followers_url) :private From 32e18efd195c98e727506d6baa8f12e5bf311814 Mon Sep 17 00:00:00 2001 From: KMY Date: Thu, 25 May 2023 14:57:25 +0900 Subject: [PATCH 05/10] Fix account searchability --- app/services/activitypub/process_account_service.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/services/activitypub/process_account_service.rb b/app/services/activitypub/process_account_service.rb index 13103a8414..0903a5652a 100644 --- a/app/services/activitypub/process_account_service.rb +++ b/app/services/activitypub/process_account_service.rb @@ -246,9 +246,9 @@ class ActivityPub::ProcessAccountService < BaseService if audience_searchable_by.any? { |uri| ActivityPub::TagManager.instance.public_collection?(uri) } :public elsif audience_searchable_by.include?(@account.followers_url) - :unlisted # Followers only in kmyblue (generics: private) + :private # Followers only in kmyblue (generics: private) else - :private # Reaction only in kmyblue (generics: direct) + :direct # Reaction only in kmyblue (generics: direct) end end From 57a7ad4e57d103534ee7b3dcb82230d8cd6fd987 Mon Sep 17 00:00:00 2001 From: KMY Date: Thu, 25 May 2023 15:26:13 +0900 Subject: [PATCH 06/10] Fix status unsupported searchability --- app/models/status.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/models/status.rb b/app/models/status.rb index 2f275cbd86..6dca9cc2a4 100644 --- a/app/models/status.rb +++ b/app/models/status.rb @@ -53,7 +53,7 @@ class Status < ApplicationRecord update_index('statuses', :proper) enum visibility: { public: 0, unlisted: 1, private: 2, direct: 3, limited: 4, public_unlisted: 10, login: 11 }, _suffix: :visibility - enum searchability: { public: 0, private: 1, direct: 2, limited: 3, public_unlisted: 10 }, _suffix: :searchability + enum searchability: { public: 0, private: 1, direct: 2, limited: 3, unsupported: 4, public_unlisted: 10 }, _suffix: :searchability belongs_to :application, class_name: 'Doorkeeper::Application', optional: true @@ -387,6 +387,7 @@ class Status < ApplicationRecord # Fedibird code # searchability || Status.searchabilities.invert.fetch([Account.searchabilities[account.searchability], Status.visibilities[visibility] || 0].max, nil) || 'direct' # Reactions only (generic: direct) + return 'direct' if searchability && unsupported_searchability? return searchability if searchability return account.searchability if account.local? && account.searchability && !account.unsupported_searchability? From e6c6c47b7cda0a5b4eeb3e12ae25f9b7ceed3858 Mon Sep 17 00:00:00 2001 From: KMY Date: Thu, 25 May 2023 15:43:55 +0900 Subject: [PATCH 07/10] Fix searchability = 4 --- app/models/status.rb | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/app/models/status.rb b/app/models/status.rb index 6dca9cc2a4..c210633941 100644 --- a/app/models/status.rb +++ b/app/models/status.rb @@ -527,7 +527,15 @@ class Status < ApplicationRecord def set_searchability return if searchability.nil? - self.searchability = [Status.searchabilities[searchability], Status.visibilities[visibility == 'public_unlisted' || visibility == 'login' ? 'public' : visibility]].max + if visibility == 'public' || visibility == 'public_unlisted' || visibility == 'login' + self.searchability = [Status.searchabilities[searchability], Status.visibilities['public']].max + elsif visibility == 'limited' + self.searchability = Status.searchabilities['limited'] + else + s = [Status.searchabilities[searchability], Status.visibilities[visibility]].max + s = [s, 3].max + self.searchability = s + end end def set_conversation From f69db38c2f35961d1a51c710deccc3cb58bbeb84 Mon Sep 17 00:00:00 2001 From: KMY Date: Thu, 25 May 2023 17:37:44 +0900 Subject: [PATCH 08/10] Fix login visibility is not streaming public --- app/services/fan_out_on_write_service.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/services/fan_out_on_write_service.rb b/app/services/fan_out_on_write_service.rb index b8d37952e3..41b704c684 100644 --- a/app/services/fan_out_on_write_service.rb +++ b/app/services/fan_out_on_write_service.rb @@ -234,7 +234,7 @@ class FanOutOnWriteService < BaseService end def broadcastable? - @status.public_visibility? && !@status.reblog? && !@account.silenced? + (@status.public_visibility? || @status.login_visibility?) && !@status.reblog? && !@account.silenced? end def broadcastable_unlisted? From 072540946ef6b10a2ad53f84d96051a03a90e04b Mon Sep 17 00:00:00 2001 From: KMY Date: Thu, 25 May 2023 20:00:19 +0900 Subject: [PATCH 09/10] Reorder sidebar menu --- .../ui/components/navigation_panel.jsx | 57 ++++++++++++------- 1 file changed, 35 insertions(+), 22 deletions(-) diff --git a/app/javascript/mastodon/features/ui/components/navigation_panel.jsx b/app/javascript/mastodon/features/ui/components/navigation_panel.jsx index b62d216ae9..c136223c7f 100644 --- a/app/javascript/mastodon/features/ui/components/navigation_panel.jsx +++ b/app/javascript/mastodon/features/ui/components/navigation_panel.jsx @@ -43,6 +43,12 @@ class NavigationPanel extends React.Component { const { intl } = this.props; const { signedIn, disabledAccountId } = this.context.identity; + const explorer = (showTrends ? ( + + ) : ( + + )); + return (
@@ -53,16 +59,10 @@ class NavigationPanel extends React.Component { {signedIn && ( - } text={intl.formatMessage(messages.notifications)} /> - )} - {showTrends ? ( - - ) : ( - - )} + {!signedIn && explorer} {(signedIn || timelinePreview) && ( <> @@ -71,6 +71,34 @@ class NavigationPanel extends React.Component { )} + {signedIn && ( + + +
+
+ )} + + {signedIn && ( + + } text={intl.formatMessage(messages.notifications)} /> + + + + )} + + {signedIn && explorer} + + {signedIn && ( + + + + +
+ + +
+ )} + {!signedIn && (

@@ -78,21 +106,6 @@ class NavigationPanel extends React.Component {
)} - {signedIn && ( - - - - - - - - -
- - -
- )} -

From 39b22ba91b179baa85a986026af779935a663665 Mon Sep 17 00:00:00 2001 From: KMY Date: Fri, 26 May 2023 13:48:59 +0900 Subject: [PATCH 10/10] Change activitypub as:LoginOnly to LoginUser --- app/lib/activitypub/activity/create.rb | 2 +- app/lib/activitypub/parser/status_parser.rb | 2 +- app/lib/activitypub/tag_manager.rb | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/lib/activitypub/activity/create.rb b/app/lib/activitypub/activity/create.rb index e9ef9de370..13a5d11361 100644 --- a/app/lib/activitypub/activity/create.rb +++ b/app/lib/activitypub/activity/create.rb @@ -526,7 +526,7 @@ class ActivityPub::Activity::Create < ActivityPub::Activity :public elsif audience_cc.any? { |cc| ActivityPub::TagManager.instance.public_collection?(cc) } :unlisted - elsif audience_to.include?('as:LoginOnly') + elsif audience_to.include?('as:LoginOnly') || audience_to.include?('LoginUser') :login elsif audience_to.include?(@account.followers_url) :private diff --git a/app/lib/activitypub/parser/status_parser.rb b/app/lib/activitypub/parser/status_parser.rb index 7ceb0a3584..0e38861838 100644 --- a/app/lib/activitypub/parser/status_parser.rb +++ b/app/lib/activitypub/parser/status_parser.rb @@ -77,7 +77,7 @@ class ActivityPub::Parser::StatusParser :public elsif audience_cc.any? { |cc| ActivityPub::TagManager.instance.public_collection?(cc) } :unlisted - elsif audience_to.include?('as:LoginOnly') + elsif audience_to.include?('as:LoginOnly') || audience_to.include?('LoginUser') :login elsif audience_to.include?(@magic_values[:followers_collection]) :private diff --git a/app/lib/activitypub/tag_manager.rb b/app/lib/activitypub/tag_manager.rb index b57023507e..2e0d36b325 100644 --- a/app/lib/activitypub/tag_manager.rb +++ b/app/lib/activitypub/tag_manager.rb @@ -89,7 +89,7 @@ class ActivityPub::TagManager when 'unlisted', 'public_unlisted', 'private' [account_followers_url(status.account)] when 'login' - [account_followers_url(status.account), 'as:LoginOnly'] + [account_followers_url(status.account), 'as:LoginOnly', 'LoginUser'] when 'direct', 'limited' if status.account.silenced? # Only notify followers if the account is locally silenced