summaryrefslogtreecommitdiff
path: root/internal/typeutils
diff options
context:
space:
mode:
Diffstat (limited to 'internal/typeutils')
-rw-r--r--internal/typeutils/internaltofrontend.go85
-rw-r--r--internal/typeutils/internaltofrontend_test.go127
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 := &gtsmodel.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 := &gtsmodel.Conversation{
@@ -4220,7 +4122,6 @@ func (suite *InternalToFrontendTestSuite) TestConversationToAPI() {
convo,
requester,
filters,
- mutes,
)
if err != nil {
suite.FailNow(err.Error())