diff options
Diffstat (limited to 'internal/typeutils')
| -rw-r--r-- | internal/typeutils/internaltofrontend.go | 85 | ||||
| -rw-r--r-- | internal/typeutils/internaltofrontend_test.go | 127 |
2 files changed, 19 insertions, 193 deletions
diff --git a/internal/typeutils/internaltofrontend.go b/internal/typeutils/internaltofrontend.go index bef44e32f..ecf817c66 100644 --- a/internal/typeutils/internaltofrontend.go +++ b/internal/typeutils/internaltofrontend.go @@ -32,7 +32,6 @@ import ( "code.superseriousbusiness.org/gotosocial/internal/config" "code.superseriousbusiness.org/gotosocial/internal/db" statusfilter "code.superseriousbusiness.org/gotosocial/internal/filter/status" - "code.superseriousbusiness.org/gotosocial/internal/filter/usermute" "code.superseriousbusiness.org/gotosocial/internal/gtserror" "code.superseriousbusiness.org/gotosocial/internal/gtsmodel" "code.superseriousbusiness.org/gotosocial/internal/id" @@ -851,7 +850,6 @@ func (c *Converter) StatusToAPIStatus( requestingAccount *gtsmodel.Account, filterContext statusfilter.FilterContext, filters []*gtsmodel.Filter, - mutes *usermute.CompiledUserMuteList, ) (*apimodel.Status, error) { return c.statusToAPIStatus( ctx, @@ -859,7 +857,6 @@ func (c *Converter) StatusToAPIStatus( requestingAccount, filterContext, filters, - mutes, true, true, ) @@ -875,7 +872,6 @@ func (c *Converter) statusToAPIStatus( requestingAccount *gtsmodel.Account, filterContext statusfilter.FilterContext, filters []*gtsmodel.Filter, - mutes *usermute.CompiledUserMuteList, placeholdAttachments bool, addPendingNote bool, ) (*apimodel.Status, error) { @@ -885,7 +881,6 @@ func (c *Converter) statusToAPIStatus( requestingAccount, // Can be nil. filterContext, // Can be empty. filters, - mutes, ) if err != nil { return nil, err @@ -952,77 +947,18 @@ func (c *Converter) statusToAPIFilterResults( requestingAccount *gtsmodel.Account, filterContext statusfilter.FilterContext, filters []*gtsmodel.Filter, - mutes *usermute.CompiledUserMuteList, ) ([]apimodel.FilterResult, error) { // If there are no filters or mutes, we're done. // We never hide statuses authored by the requesting account, // since not being able to see your own posts is confusing. - if filterContext == "" || (len(filters) == 0 && mutes.Len() == 0) || s.AccountID == requestingAccount.ID { + if filterContext == "" || (len(filters) == 0) || s.AccountID == requestingAccount.ID { return nil, nil } - // Both mutes and filters can expire. + // Both mutes and + // filters can expire. now := time.Now() - // If requesting account mutes the author (taking boosts into account), hide the status. - if (s.BoostOfAccountID != "" && mutes.Matches(s.BoostOfAccountID, filterContext, now)) || - mutes.Matches(s.AccountID, filterContext, now) { - return nil, statusfilter.ErrHideStatus - } - - // If this status is part of a multi-account discussion, - // and all of the accounts replied to or mentioned are invisible to the requesting account - // (due to blocks, domain blocks, moderation, etc.), - // or are muted, hide the status. - // First, collect the accounts we have to check. - otherAccounts := make([]*gtsmodel.Account, 0, 1+len(s.Mentions)) - if s.InReplyToAccount != nil { - otherAccounts = append(otherAccounts, s.InReplyToAccount) - } - for _, mention := range s.Mentions { - otherAccounts = append(otherAccounts, mention.TargetAccount) - } - - // If there are no other accounts, skip this check. - if len(otherAccounts) > 0 { - // Start by assuming that they're all invisible or muted. - allOtherAccountsInvisibleOrMuted := true - - for _, account := range otherAccounts { - // Is this account visible? - visible, err := c.visFilter.AccountVisible(ctx, requestingAccount, account) - if err != nil { - return nil, err - } - if !visible { - // It's invisible. Check the next account. - continue - } - - // If visible, is it muted? - if mutes.Matches(account.ID, filterContext, now) { - // It's muted. Check the next account. - continue - } - - // If we get here, the account is visible and not muted. - // We should show this status, and don't have to check any more accounts. - allOtherAccountsInvisibleOrMuted = false - break - } - - // If we didn't find any visible non-muted accounts, hide the status. - if allOtherAccountsInvisibleOrMuted { - return nil, statusfilter.ErrHideStatus - } - } - - // At this point, the status isn't muted, but might still be filtered. - if len(filters) == 0 { - // If it can't be filtered because there are no filters, we're done. - return nil, nil - } - // Key this status based on ID + last updated time, // to ensure we always filter on latest version. statusKey := s.ID + strconv.FormatInt(s.UpdatedAt().Unix(), 10) @@ -1130,7 +1066,6 @@ func (c *Converter) StatusToWebStatus( nil, // No authed requester. statusfilter.FilterContextNone, // No filters. nil, // No filters. - nil, // No mutes. ) if err != nil { return nil, err @@ -1301,7 +1236,6 @@ func (c *Converter) statusToFrontend( requestingAccount *gtsmodel.Account, filterContext statusfilter.FilterContext, filters []*gtsmodel.Filter, - mutes *usermute.CompiledUserMuteList, ) ( *apimodel.Status, error, @@ -1311,7 +1245,6 @@ func (c *Converter) statusToFrontend( requestingAccount, filterContext, filters, - mutes, ) if err != nil { return nil, err @@ -1323,7 +1256,6 @@ func (c *Converter) statusToFrontend( requestingAccount, filterContext, filters, - mutes, ) if errors.Is(err, statusfilter.ErrHideStatus) { // If we'd hide the original status, hide the boost. @@ -1357,7 +1289,6 @@ func (c *Converter) baseStatusToFrontend( requestingAccount *gtsmodel.Account, filterContext statusfilter.FilterContext, filters []*gtsmodel.Filter, - mutes *usermute.CompiledUserMuteList, ) ( *apimodel.Status, error, @@ -1535,7 +1466,7 @@ func (c *Converter) baseStatusToFrontend( } // Apply filters. - filterResults, err := c.statusToAPIFilterResults(ctx, s, requestingAccount, filterContext, filters, mutes) + filterResults, err := c.statusToAPIFilterResults(ctx, s, requestingAccount, filterContext, filters) if err != nil { if errors.Is(err, statusfilter.ErrHideStatus) { return nil, err @@ -2052,7 +1983,6 @@ func (c *Converter) NotificationToAPINotification( ctx context.Context, n *gtsmodel.Notification, filters []*gtsmodel.Filter, - mutes *usermute.CompiledUserMuteList, ) (*apimodel.Notification, error) { // Ensure notif populated. if err := c.state.DB.PopulateNotification(ctx, n); err != nil { @@ -2072,7 +2002,7 @@ func (c *Converter) NotificationToAPINotification( ctx, n.Status, n.TargetAccount, statusfilter.FilterContextNotifications, - filters, mutes, + filters, ) if err != nil && !errors.Is(err, statusfilter.ErrHideStatus) { return nil, gtserror.Newf("error converting status to api: %w", err) @@ -2108,7 +2038,6 @@ func (c *Converter) ConversationToAPIConversation( conversation *gtsmodel.Conversation, requester *gtsmodel.Account, filters []*gtsmodel.Filter, - mutes *usermute.CompiledUserMuteList, ) (*apimodel.Conversation, error) { apiConversation := &apimodel.Conversation{ ID: conversation.ID, @@ -2125,7 +2054,6 @@ func (c *Converter) ConversationToAPIConversation( requester, statusfilter.FilterContextNotifications, filters, - mutes, ) if err != nil && !errors.Is(err, statusfilter.ErrHideStatus) { return nil, gtserror.Newf( @@ -2394,7 +2322,6 @@ func (c *Converter) ReportToAdminAPIReport(ctx context.Context, r *gtsmodel.Repo requestingAccount, statusfilter.FilterContextNone, nil, // No filters. - nil, // No mutes. true, // Placehold unknown attachments. // Don't add note about @@ -3057,7 +2984,6 @@ func (c *Converter) InteractionReqToAPIInteractionReq( requestingAcct, statusfilter.FilterContextNone, nil, // No filters. - nil, // No mutes. ) if err != nil { err := gtserror.Newf("error converting interacted status: %w", err) @@ -3072,7 +2998,6 @@ func (c *Converter) InteractionReqToAPIInteractionReq( requestingAcct, statusfilter.FilterContextNone, nil, // No filters. - nil, // No mutes. true, // Placehold unknown attachments. // Don't add note about pending; diff --git a/internal/typeutils/internaltofrontend_test.go b/internal/typeutils/internaltofrontend_test.go index c1b29ad21..d19bd6a2f 100644 --- a/internal/typeutils/internaltofrontend_test.go +++ b/internal/typeutils/internaltofrontend_test.go @@ -28,7 +28,6 @@ import ( "code.superseriousbusiness.org/gotosocial/internal/config" "code.superseriousbusiness.org/gotosocial/internal/db" statusfilter "code.superseriousbusiness.org/gotosocial/internal/filter/status" - "code.superseriousbusiness.org/gotosocial/internal/filter/usermute" "code.superseriousbusiness.org/gotosocial/internal/gtsmodel" "code.superseriousbusiness.org/gotosocial/internal/util" "code.superseriousbusiness.org/gotosocial/testrig" @@ -466,7 +465,7 @@ func (suite *InternalToFrontendTestSuite) TestLocalInstanceAccountToFrontendBloc func (suite *InternalToFrontendTestSuite) TestStatusToFrontend() { testStatus := suite.testStatuses["admin_account_status_1"] requestingAccount := suite.testAccounts["local_account_1"] - apiStatus, err := suite.typeconverter.StatusToAPIStatus(suite.T().Context(), testStatus, requestingAccount, statusfilter.FilterContextNone, nil, nil) + apiStatus, err := suite.typeconverter.StatusToAPIStatus(suite.T().Context(), testStatus, requestingAccount, statusfilter.FilterContextNone, nil) suite.NoError(err) b, err := json.MarshalIndent(apiStatus, "", " ") @@ -629,7 +628,7 @@ func (suite *InternalToFrontendTestSuite) TestStatusToFrontendHTMLContentWarning testStatus.ContentWarning = `<p>First paragraph of content warning</p><h4>Here's the title!</h4><p></p><p>Big boobs<br>Tee hee!<br><br>Some more text<br>And a bunch more<br><br>Hasta la victoria siempre!</p>` requestingAccount := suite.testAccounts["local_account_1"] - apiStatus, err := suite.typeconverter.StatusToAPIStatus(suite.T().Context(), testStatus, requestingAccount, statusfilter.FilterContextNone, nil, nil) + apiStatus, err := suite.typeconverter.StatusToAPIStatus(suite.T().Context(), testStatus, requestingAccount, statusfilter.FilterContextNone, nil) suite.NoError(err) b, err := json.MarshalIndent(apiStatus, "", " ") @@ -795,7 +794,7 @@ func (suite *InternalToFrontendTestSuite) TestStatusToFrontendApplicationDeleted } requestingAccount := suite.testAccounts["local_account_1"] - apiStatus, err := suite.typeconverter.StatusToAPIStatus(ctx, testStatus, requestingAccount, statusfilter.FilterContextNone, nil, nil) + apiStatus, err := suite.typeconverter.StatusToAPIStatus(ctx, testStatus, requestingAccount, statusfilter.FilterContextNone, nil) suite.NoError(err) b, err := json.MarshalIndent(apiStatus, "", " ") @@ -984,7 +983,6 @@ func (suite *InternalToFrontendTestSuite) filteredStatusToFrontend(action gtsmod requestingAccount, statusfilter.FilterContextHome, requestingAccountFilters, - nil, ) } @@ -1538,7 +1536,6 @@ func (suite *InternalToFrontendTestSuite) testHashtagFilteredStatusToFrontend(wh requestingAccount, statusfilter.FilterContextHome, []*gtsmodel.Filter{filter}, - nil, ) if err != nil { suite.FailNow(err.Error()) @@ -1563,102 +1560,11 @@ func (suite *InternalToFrontendTestSuite) TestHashtagAnywhereFilteredBoostToFron suite.testHashtagFilteredStatusToFrontend(false, true) } -// Test that a status from a user muted by the requesting user results in the ErrHideStatus error. -func (suite *InternalToFrontendTestSuite) TestMutedStatusToFrontend() { - testStatus := suite.testStatuses["admin_account_status_1"] - requestingAccount := suite.testAccounts["local_account_1"] - - mutes := usermute.NewCompiledUserMuteList([]*gtsmodel.UserMute{ - { - AccountID: requestingAccount.ID, - TargetAccountID: testStatus.AccountID, - Notifications: util.Ptr(false), - }, - }) - - _, err := suite.typeconverter.StatusToAPIStatus( - suite.T().Context(), - testStatus, - requestingAccount, - statusfilter.FilterContextHome, - nil, - mutes, - ) - suite.ErrorIs(err, statusfilter.ErrHideStatus) -} - -// Test that a status replying to a user muted by the requesting user results in the ErrHideStatus error. -func (suite *InternalToFrontendTestSuite) TestMutedReplyStatusToFrontend() { - mutedAccount := suite.testAccounts["local_account_2"] - testStatus := suite.testStatuses["admin_account_status_1"] - testStatus.InReplyToID = suite.testStatuses["local_account_2_status_1"].ID - testStatus.InReplyToAccountID = mutedAccount.ID - requestingAccount := suite.testAccounts["local_account_1"] - - mutes := usermute.NewCompiledUserMuteList([]*gtsmodel.UserMute{ - { - AccountID: requestingAccount.ID, - TargetAccountID: mutedAccount.ID, - Notifications: util.Ptr(false), - }, - }) - - // Populate status so the converter has the account objects it needs for muting. - err := suite.db.PopulateStatus(suite.T().Context(), testStatus) - if err != nil { - suite.FailNow(err.Error()) - } - - // Convert the status to API format, which should fail. - _, err = suite.typeconverter.StatusToAPIStatus( - suite.T().Context(), - testStatus, - requestingAccount, - statusfilter.FilterContextHome, - nil, - mutes, - ) - suite.ErrorIs(err, statusfilter.ErrHideStatus) -} - -func (suite *InternalToFrontendTestSuite) TestMutedBoostStatusToFrontend() { - mutedAccount := suite.testAccounts["local_account_2"] - testStatus := suite.testStatuses["admin_account_status_1"] - testStatus.BoostOfID = suite.testStatuses["local_account_2_status_1"].ID - testStatus.BoostOfAccountID = mutedAccount.ID - requestingAccount := suite.testAccounts["local_account_1"] - - mutes := usermute.NewCompiledUserMuteList([]*gtsmodel.UserMute{ - { - AccountID: requestingAccount.ID, - TargetAccountID: mutedAccount.ID, - Notifications: util.Ptr(false), - }, - }) - - // Populate status so the converter has the account objects it needs for muting. - err := suite.db.PopulateStatus(suite.T().Context(), testStatus) - if err != nil { - suite.FailNow(err.Error()) - } - - // Convert the status to API format, which should fail. - _, err = suite.typeconverter.StatusToAPIStatus( - suite.T().Context(), - testStatus, - requestingAccount, - statusfilter.FilterContextHome, - nil, - mutes, - ) - suite.ErrorIs(err, statusfilter.ErrHideStatus) -} - func (suite *InternalToFrontendTestSuite) TestStatusToFrontendUnknownAttachments() { testStatus := suite.testStatuses["remote_account_2_status_1"] requestingAccount := suite.testAccounts["admin_account"] - apiStatus, err := suite.typeconverter.StatusToAPIStatus(suite.T().Context(), testStatus, requestingAccount, statusfilter.FilterContextNone, nil, nil) + apiStatus, err := suite.typeconverter.StatusToAPIStatus(suite.T().Context(), testStatus, requestingAccount, statusfilter.FilterContextNone, nil) suite.NoError(err) b, err := json.MarshalIndent(apiStatus, "", " ") @@ -1985,7 +1891,7 @@ func (suite *InternalToFrontendTestSuite) TestStatusToFrontendUnknownLanguage() *testStatus = *suite.testStatuses["admin_account_status_1"] testStatus.Language = "" requestingAccount := suite.testAccounts["local_account_1"] - apiStatus, err := suite.typeconverter.StatusToAPIStatus(suite.T().Context(), testStatus, requestingAccount, statusfilter.FilterContextNone, nil, nil) + apiStatus, err := suite.typeconverter.StatusToAPIStatus(suite.T().Context(), testStatus, requestingAccount, statusfilter.FilterContextNone, nil) suite.NoError(err) b, err := json.MarshalIndent(apiStatus, "", " ") @@ -2146,7 +2052,7 @@ func (suite *InternalToFrontendTestSuite) TestStatusToFrontendPartialInteraction *testStatus = *suite.testStatuses["local_account_1_status_3"] testStatus.Language = "" requestingAccount := suite.testAccounts["admin_account"] - apiStatus, err := suite.typeconverter.StatusToAPIStatus(suite.T().Context(), testStatus, requestingAccount, statusfilter.FilterContextNone, nil, nil) + apiStatus, err := suite.typeconverter.StatusToAPIStatus(suite.T().Context(), testStatus, requestingAccount, statusfilter.FilterContextNone, nil) suite.NoError(err) b, err := json.MarshalIndent(apiStatus, "", " ") @@ -2261,7 +2167,6 @@ func (suite *InternalToFrontendTestSuite) TestStatusToAPIStatusPendingApproval() requestingAccount, statusfilter.FilterContextNone, nil, - nil, ) if err != nil { suite.FailNow(err.Error()) @@ -4020,11 +3925,10 @@ func (suite *InternalToFrontendTestSuite) TestIntReqToAPI() { func (suite *InternalToFrontendTestSuite) TestConversationToAPISelfConvo() { var ( - ctx = suite.T().Context() - requester = suite.testAccounts["local_account_1"] - lastStatus = suite.testStatuses["local_account_1_status_1"] - filters []*gtsmodel.Filter = nil - mutes *usermute.CompiledUserMuteList = nil + ctx = suite.T().Context() + requester = suite.testAccounts["local_account_1"] + lastStatus = suite.testStatuses["local_account_1_status_1"] + filters []*gtsmodel.Filter = nil ) convo := >smodel.Conversation{ @@ -4043,7 +3947,6 @@ func (suite *InternalToFrontendTestSuite) TestConversationToAPISelfConvo() { convo, requester, filters, - mutes, ) if err != nil { suite.FailNow(err.Error()) @@ -4195,11 +4098,10 @@ func (suite *InternalToFrontendTestSuite) TestConversationToAPISelfConvo() { func (suite *InternalToFrontendTestSuite) TestConversationToAPI() { var ( - ctx = suite.T().Context() - requester = suite.testAccounts["local_account_1"] - lastStatus = suite.testStatuses["local_account_1_status_1"] - filters []*gtsmodel.Filter = nil - mutes *usermute.CompiledUserMuteList = nil + ctx = suite.T().Context() + requester = suite.testAccounts["local_account_1"] + lastStatus = suite.testStatuses["local_account_1_status_1"] + filters []*gtsmodel.Filter = nil ) convo := >smodel.Conversation{ @@ -4220,7 +4122,6 @@ func (suite *InternalToFrontendTestSuite) TestConversationToAPI() { convo, requester, filters, - mutes, ) if err != nil { suite.FailNow(err.Error()) |
