summaryrefslogtreecommitdiff
path: root/internal/processing
diff options
context:
space:
mode:
Diffstat (limited to 'internal/processing')
-rw-r--r--internal/processing/fedi/collections.go12
-rw-r--r--internal/processing/status/create.go20
-rw-r--r--internal/processing/status/create_test.go195
-rw-r--r--internal/processing/workers/federate.go8
4 files changed, 110 insertions, 125 deletions
diff --git a/internal/processing/fedi/collections.go b/internal/processing/fedi/collections.go
index e81d3e269..fd84e7688 100644
--- a/internal/processing/fedi/collections.go
+++ b/internal/processing/fedi/collections.go
@@ -129,6 +129,18 @@ func (p *Processor) OutboxGet(
hi = statuses[0].ID
}
+ // Reslice statuses dropping all those invisible to requester
+ // (eg., local-only statuses, if the requester is remote).
+ statuses, err = p.visFilter.StatusesVisible(
+ ctx,
+ auth.requestingAcct,
+ statuses,
+ )
+ if err != nil {
+ err := gtserror.Newf("error filtering statuses: %w", err)
+ return nil, gtserror.NewErrorInternalError(err)
+ }
+
// Start building AS collection page params.
params.Total = util.Ptr(*receivingAcct.Stats.StatusesCount)
var pageParams ap.CollectionPageParams
diff --git a/internal/processing/status/create.go b/internal/processing/status/create.go
index 11dece87d..d5898ffe9 100644
--- a/internal/processing/status/create.go
+++ b/internal/processing/status/create.go
@@ -45,7 +45,7 @@ func (p *Processor) Create(
ctx context.Context,
requester *gtsmodel.Account,
application *gtsmodel.Application,
- form *apimodel.AdvancedStatusCreateForm,
+ form *apimodel.StatusCreateRequest,
) (
*apimodel.Status,
gtserror.WithCode,
@@ -290,7 +290,7 @@ func (p *Processor) processThreadID(ctx context.Context, status *gtsmodel.Status
return nil
}
-func (p *Processor) processMediaIDs(ctx context.Context, form *apimodel.AdvancedStatusCreateForm, thisAccountID string, status *gtsmodel.Status) gtserror.WithCode {
+func (p *Processor) processMediaIDs(ctx context.Context, form *apimodel.StatusCreateRequest, thisAccountID string, status *gtsmodel.Status) gtserror.WithCode {
if form.MediaIDs == nil {
return nil
}
@@ -338,7 +338,7 @@ func (p *Processor) processMediaIDs(ctx context.Context, form *apimodel.Advanced
}
func processVisibility(
- form *apimodel.AdvancedStatusCreateForm,
+ form *apimodel.StatusCreateRequest,
accountDefaultVis gtsmodel.Visibility,
status *gtsmodel.Status,
) error {
@@ -356,16 +356,16 @@ func processVisibility(
status.Visibility = gtsmodel.VisibilityDefault
}
- // Set federated flag to form value
- // if provided, or default to true.
- federated := util.PtrOrValue(form.Federated, true)
- status.Federated = &federated
+ // Set federated according to "local_only" field,
+ // assuming federated (ie., not local-only) by default.
+ localOnly := util.PtrOrValue(form.LocalOnly, false)
+ status.Federated = util.Ptr(!localOnly)
return nil
}
func processInteractionPolicy(
- _ *apimodel.AdvancedStatusCreateForm,
+ _ *apimodel.StatusCreateRequest,
settings *gtsmodel.AccountSettings,
status *gtsmodel.Status,
) error {
@@ -413,7 +413,7 @@ func processInteractionPolicy(
return nil
}
-func processLanguage(form *apimodel.AdvancedStatusCreateForm, accountDefaultLanguage string, status *gtsmodel.Status) error {
+func processLanguage(form *apimodel.StatusCreateRequest, accountDefaultLanguage string, status *gtsmodel.Status) error {
if form.Language != "" {
status.Language = form.Language
} else {
@@ -425,7 +425,7 @@ func processLanguage(form *apimodel.AdvancedStatusCreateForm, accountDefaultLang
return nil
}
-func (p *Processor) processContent(ctx context.Context, parseMention gtsmodel.ParseMentionFunc, form *apimodel.AdvancedStatusCreateForm, status *gtsmodel.Status) error {
+func (p *Processor) processContent(ctx context.Context, parseMention gtsmodel.ParseMentionFunc, form *apimodel.StatusCreateRequest, status *gtsmodel.Status) error {
if form.ContentType == "" {
// If content type wasn't specified, use the author's preferred content-type.
contentType := apimodel.StatusContentType(status.Account.Settings.StatusContentType)
diff --git a/internal/processing/status/create_test.go b/internal/processing/status/create_test.go
index a8211d1c1..84168880e 100644
--- a/internal/processing/status/create_test.go
+++ b/internal/processing/status/create_test.go
@@ -26,6 +26,7 @@ import (
"github.com/superseriousbusiness/gotosocial/internal/config"
"github.com/superseriousbusiness/gotosocial/internal/db"
"github.com/superseriousbusiness/gotosocial/internal/gtsmodel"
+ "github.com/superseriousbusiness/gotosocial/internal/util"
)
type StatusCreateTestSuite struct {
@@ -38,22 +39,18 @@ func (suite *StatusCreateTestSuite) TestProcessContentWarningWithQuotationMarks(
creatingAccount := suite.testAccounts["local_account_1"]
creatingApplication := suite.testApplications["application_1"]
- statusCreateForm := &apimodel.AdvancedStatusCreateForm{
- StatusCreateRequest: apimodel.StatusCreateRequest{
- Status: "poopoo peepee",
- MediaIDs: []string{},
- Poll: nil,
- InReplyToID: "",
- Sensitive: false,
- SpoilerText: "\"test\"", // these should not be html-escaped when the final text is rendered
- Visibility: apimodel.VisibilityPublic,
- ScheduledAt: "",
- Language: "en",
- ContentType: apimodel.StatusContentTypePlain,
- },
- AdvancedVisibilityFlagsForm: apimodel.AdvancedVisibilityFlagsForm{
- Federated: nil,
- },
+ statusCreateForm := &apimodel.StatusCreateRequest{
+ Status: "poopoo peepee",
+ MediaIDs: []string{},
+ Poll: nil,
+ InReplyToID: "",
+ Sensitive: false,
+ SpoilerText: "\"test\"", // these should not be html-escaped when the final text is rendered
+ Visibility: apimodel.VisibilityPublic,
+ LocalOnly: util.Ptr(false),
+ ScheduledAt: "",
+ Language: "en",
+ ContentType: apimodel.StatusContentTypePlain,
}
apiStatus, err := suite.status.Create(ctx, creatingAccount, creatingApplication, statusCreateForm)
@@ -69,22 +66,18 @@ func (suite *StatusCreateTestSuite) TestProcessContentWarningWithHTMLEscapedQuot
creatingAccount := suite.testAccounts["local_account_1"]
creatingApplication := suite.testApplications["application_1"]
- statusCreateForm := &apimodel.AdvancedStatusCreateForm{
- StatusCreateRequest: apimodel.StatusCreateRequest{
- Status: "poopoo peepee",
- MediaIDs: []string{},
- Poll: nil,
- InReplyToID: "",
- Sensitive: false,
- SpoilerText: "&#34test&#34", // the html-escaped quotation marks should appear as normal quotation marks in the finished text
- Visibility: apimodel.VisibilityPublic,
- ScheduledAt: "",
- Language: "en",
- ContentType: apimodel.StatusContentTypePlain,
- },
- AdvancedVisibilityFlagsForm: apimodel.AdvancedVisibilityFlagsForm{
- Federated: nil,
- },
+ statusCreateForm := &apimodel.StatusCreateRequest{
+ Status: "poopoo peepee",
+ MediaIDs: []string{},
+ Poll: nil,
+ InReplyToID: "",
+ Sensitive: false,
+ SpoilerText: "&#34test&#34", // the html-escaped quotation marks should appear as normal quotation marks in the finished text
+ Visibility: apimodel.VisibilityPublic,
+ LocalOnly: util.Ptr(false),
+ ScheduledAt: "",
+ Language: "en",
+ ContentType: apimodel.StatusContentTypePlain,
}
apiStatus, err := suite.status.Create(ctx, creatingAccount, creatingApplication, statusCreateForm)
@@ -105,21 +98,17 @@ func (suite *StatusCreateTestSuite) TestProcessStatusMarkdownWithUnderscoreEmoji
creatingAccount := suite.testAccounts["local_account_1"]
creatingApplication := suite.testApplications["application_1"]
- statusCreateForm := &apimodel.AdvancedStatusCreateForm{
- StatusCreateRequest: apimodel.StatusCreateRequest{
- Status: "poopoo peepee :_rainbow_:",
- MediaIDs: []string{},
- Poll: nil,
- InReplyToID: "",
- Sensitive: false,
- Visibility: apimodel.VisibilityPublic,
- ScheduledAt: "",
- Language: "en",
- ContentType: apimodel.StatusContentTypeMarkdown,
- },
- AdvancedVisibilityFlagsForm: apimodel.AdvancedVisibilityFlagsForm{
- Federated: nil,
- },
+ statusCreateForm := &apimodel.StatusCreateRequest{
+ Status: "poopoo peepee :_rainbow_:",
+ MediaIDs: []string{},
+ Poll: nil,
+ InReplyToID: "",
+ Sensitive: false,
+ Visibility: apimodel.VisibilityPublic,
+ LocalOnly: util.Ptr(false),
+ ScheduledAt: "",
+ Language: "en",
+ ContentType: apimodel.StatusContentTypeMarkdown,
}
apiStatus, err := suite.status.Create(ctx, creatingAccount, creatingApplication, statusCreateForm)
@@ -135,22 +124,18 @@ func (suite *StatusCreateTestSuite) TestProcessStatusMarkdownWithSpoilerTextEmoj
creatingAccount := suite.testAccounts["local_account_1"]
creatingApplication := suite.testApplications["application_1"]
- statusCreateForm := &apimodel.AdvancedStatusCreateForm{
- StatusCreateRequest: apimodel.StatusCreateRequest{
- Status: "poopoo peepee",
- SpoilerText: "testing something :rainbow:",
- MediaIDs: []string{},
- Poll: nil,
- InReplyToID: "",
- Sensitive: false,
- Visibility: apimodel.VisibilityPublic,
- ScheduledAt: "",
- Language: "en",
- ContentType: apimodel.StatusContentTypeMarkdown,
- },
- AdvancedVisibilityFlagsForm: apimodel.AdvancedVisibilityFlagsForm{
- Federated: nil,
- },
+ statusCreateForm := &apimodel.StatusCreateRequest{
+ Status: "poopoo peepee",
+ SpoilerText: "testing something :rainbow:",
+ MediaIDs: []string{},
+ Poll: nil,
+ InReplyToID: "",
+ Sensitive: false,
+ Visibility: apimodel.VisibilityPublic,
+ LocalOnly: util.Ptr(false),
+ ScheduledAt: "",
+ Language: "en",
+ ContentType: apimodel.StatusContentTypeMarkdown,
}
apiStatus, err := suite.status.Create(ctx, creatingAccount, creatingApplication, statusCreateForm)
@@ -170,22 +155,18 @@ func (suite *StatusCreateTestSuite) TestProcessMediaDescriptionTooShort() {
creatingAccount := suite.testAccounts["local_account_1"]
creatingApplication := suite.testApplications["application_1"]
- statusCreateForm := &apimodel.AdvancedStatusCreateForm{
- StatusCreateRequest: apimodel.StatusCreateRequest{
- Status: "poopoo peepee",
- MediaIDs: []string{suite.testAttachments["local_account_1_unattached_1"].ID},
- Poll: nil,
- InReplyToID: "",
- Sensitive: false,
- SpoilerText: "",
- Visibility: apimodel.VisibilityPublic,
- ScheduledAt: "",
- Language: "en",
- ContentType: apimodel.StatusContentTypePlain,
- },
- AdvancedVisibilityFlagsForm: apimodel.AdvancedVisibilityFlagsForm{
- Federated: nil,
- },
+ statusCreateForm := &apimodel.StatusCreateRequest{
+ Status: "poopoo peepee",
+ MediaIDs: []string{suite.testAttachments["local_account_1_unattached_1"].ID},
+ Poll: nil,
+ InReplyToID: "",
+ Sensitive: false,
+ SpoilerText: "",
+ Visibility: apimodel.VisibilityPublic,
+ LocalOnly: util.Ptr(false),
+ ScheduledAt: "",
+ Language: "en",
+ ContentType: apimodel.StatusContentTypePlain,
}
apiStatus, err := suite.status.Create(ctx, creatingAccount, creatingApplication, statusCreateForm)
@@ -199,22 +180,18 @@ func (suite *StatusCreateTestSuite) TestProcessLanguageWithScriptPart() {
creatingAccount := suite.testAccounts["local_account_1"]
creatingApplication := suite.testApplications["application_1"]
- statusCreateForm := &apimodel.AdvancedStatusCreateForm{
- StatusCreateRequest: apimodel.StatusCreateRequest{
- Status: "你好世界", // hello world
- MediaIDs: []string{},
- Poll: nil,
- InReplyToID: "",
- Sensitive: false,
- SpoilerText: "",
- Visibility: apimodel.VisibilityPublic,
- ScheduledAt: "",
- Language: "zh-Hans",
- ContentType: apimodel.StatusContentTypePlain,
- },
- AdvancedVisibilityFlagsForm: apimodel.AdvancedVisibilityFlagsForm{
- Federated: nil,
- },
+ statusCreateForm := &apimodel.StatusCreateRequest{
+ Status: "你好世界", // hello world
+ MediaIDs: []string{},
+ Poll: nil,
+ InReplyToID: "",
+ Sensitive: false,
+ SpoilerText: "",
+ Visibility: apimodel.VisibilityPublic,
+ LocalOnly: util.Ptr(false),
+ ScheduledAt: "",
+ Language: "zh-Hans",
+ ContentType: apimodel.StatusContentTypePlain,
}
apiStatus, err := suite.status.Create(ctx, creatingAccount, creatingApplication, statusCreateForm)
@@ -233,22 +210,18 @@ func (suite *StatusCreateTestSuite) TestProcessReplyToUnthreadedRemoteStatus() {
// Reply to a remote status that
// doesn't have a threadID set on it.
- statusCreateForm := &apimodel.AdvancedStatusCreateForm{
- StatusCreateRequest: apimodel.StatusCreateRequest{
- Status: "boobies",
- MediaIDs: []string{},
- Poll: nil,
- InReplyToID: inReplyTo.ID,
- Sensitive: false,
- SpoilerText: "this is a reply",
- Visibility: apimodel.VisibilityPublic,
- ScheduledAt: "",
- Language: "en",
- ContentType: apimodel.StatusContentTypePlain,
- },
- AdvancedVisibilityFlagsForm: apimodel.AdvancedVisibilityFlagsForm{
- Federated: nil,
- },
+ statusCreateForm := &apimodel.StatusCreateRequest{
+ Status: "boobies",
+ MediaIDs: []string{},
+ Poll: nil,
+ InReplyToID: inReplyTo.ID,
+ Sensitive: false,
+ SpoilerText: "this is a reply",
+ Visibility: apimodel.VisibilityPublic,
+ LocalOnly: util.Ptr(false),
+ ScheduledAt: "",
+ Language: "en",
+ ContentType: apimodel.StatusContentTypePlain,
}
apiStatus, err := suite.status.Create(ctx, creatingAccount, creatingApplication, statusCreateForm)
diff --git a/internal/processing/workers/federate.go b/internal/processing/workers/federate.go
index d71bb0a83..6e8b558c8 100644
--- a/internal/processing/workers/federate.go
+++ b/internal/processing/workers/federate.go
@@ -146,7 +146,7 @@ func (f *federate) DeleteAccount(ctx context.Context, account *gtsmodel.Account)
func (f *federate) CreateStatus(ctx context.Context, status *gtsmodel.Status) error {
// Do nothing if the status
// shouldn't be federated.
- if !*status.Federated {
+ if status.IsLocalOnly() {
return nil
}
@@ -201,7 +201,7 @@ func (f *federate) CreatePollVote(ctx context.Context, poll *gtsmodel.Poll, vote
// Do nothing if the status
// shouldn't be federated.
- if !*status.Federated {
+ if status.IsLocalOnly() {
return nil
}
@@ -234,7 +234,7 @@ func (f *federate) CreatePollVote(ctx context.Context, poll *gtsmodel.Poll, vote
func (f *federate) DeleteStatus(ctx context.Context, status *gtsmodel.Status) error {
// Do nothing if the status
// shouldn't be federated.
- if !*status.Federated {
+ if status.IsLocalOnly() {
return nil
}
@@ -272,7 +272,7 @@ func (f *federate) DeleteStatus(ctx context.Context, status *gtsmodel.Status) er
func (f *federate) UpdateStatus(ctx context.Context, status *gtsmodel.Status) error {
// Do nothing if the status
// shouldn't be federated.
- if !*status.Federated {
+ if status.IsLocalOnly() {
return nil
}