ensure 'none' gets included in serializable visibilities (#4007)

This commit is contained in:
kim
2025-04-14 12:33:37 +00:00
committed by GitHub
parent 36758ea0de
commit 67fc1fd904
2 changed files with 12 additions and 14 deletions

View File

@@ -221,9 +221,8 @@ func (p *Processor) Create(
return nil, errWithCode return nil, errWithCode
} }
if err := p.processVisibility(ctx, form, requester.Settings.Privacy, status); err != nil { // Process the incoming created status visibility.
return nil, gtserror.NewErrorInternalError(err) processVisibility(form, requester.Settings.Privacy, status)
}
// Process policy AFTER visibility as it relies // Process policy AFTER visibility as it relies
// on status.Visibility and form.Visibility being set. // on status.Visibility and form.Visibility being set.
@@ -485,12 +484,11 @@ func (p *Processor) processThreadID(ctx context.Context, status *gtsmodel.Status
return nil return nil
} }
func (p *Processor) processVisibility( func processVisibility(
ctx context.Context,
form *apimodel.StatusCreateRequest, form *apimodel.StatusCreateRequest,
accountDefaultVis gtsmodel.Visibility, accountDefaultVis gtsmodel.Visibility,
status *gtsmodel.Status, status *gtsmodel.Status,
) error { ) {
switch { switch {
// Visibility set on form, use that. // Visibility set on form, use that.
case form.Visibility != "": case form.Visibility != "":
@@ -500,21 +498,19 @@ func (p *Processor) processVisibility(
// this back on the form for later use. // this back on the form for later use.
case accountDefaultVis != 0: case accountDefaultVis != 0:
status.Visibility = accountDefaultVis status.Visibility = accountDefaultVis
form.Visibility = p.converter.VisToAPIVis(ctx, accountDefaultVis) form.Visibility = typeutils.VisToAPIVis(accountDefaultVis)
// What? Fall back to global default, set // What? Fall back to global default, set
// this back on the form for later use. // this back on the form for later use.
default: default:
status.Visibility = gtsmodel.VisibilityDefault status.Visibility = gtsmodel.VisibilityDefault
form.Visibility = p.converter.VisToAPIVis(ctx, gtsmodel.VisibilityDefault) form.Visibility = typeutils.VisToAPIVis(gtsmodel.VisibilityDefault)
} }
// Set federated according to "local_only" field, // Set federated according to "local_only" field,
// assuming federated (ie., not local-only) by default. // assuming federated (ie., not local-only) by default.
localOnly := util.PtrOrValue(form.LocalOnly, false) localOnly := util.PtrOrValue(form.LocalOnly, false)
status.Federated = util.Ptr(!localOnly) status.Federated = util.Ptr(!localOnly)
return nil
} }
func processInteractionPolicy( func processInteractionPolicy(

View File

@@ -139,8 +139,8 @@ func (c *Converter) AccountToAPIAccountSensitive(ctx context.Context, a *gtsmode
} }
apiAccount.Source = &apimodel.Source{ apiAccount.Source = &apimodel.Source{
Privacy: c.VisToAPIVis(ctx, a.Settings.Privacy), Privacy: VisToAPIVis(a.Settings.Privacy),
WebVisibility: c.VisToAPIVis(ctx, a.Settings.WebVisibility), WebVisibility: VisToAPIVis(a.Settings.WebVisibility),
WebLayout: a.Settings.WebLayout.String(), WebLayout: a.Settings.WebLayout.String(),
Sensitive: *a.Settings.Sensitive, Sensitive: *a.Settings.Sensitive,
Language: a.Settings.Language, Language: a.Settings.Language,
@@ -1395,7 +1395,7 @@ func (c *Converter) baseStatusToFrontend(
InReplyToID: nil, // Set below. InReplyToID: nil, // Set below.
InReplyToAccountID: nil, // Set below. InReplyToAccountID: nil, // Set below.
Sensitive: *s.Sensitive, Sensitive: *s.Sensitive,
Visibility: c.VisToAPIVis(ctx, s.Visibility), Visibility: VisToAPIVis(s.Visibility),
LocalOnly: s.IsLocalOnly(), LocalOnly: s.IsLocalOnly(),
Language: nil, // Set below. Language: nil, // Set below.
URI: s.URI, URI: s.URI,
@@ -1654,7 +1654,7 @@ func (c *Converter) StatusToAPIEdits(ctx context.Context, status *gtsmodel.Statu
} }
// VisToAPIVis converts a gts visibility into its api equivalent // VisToAPIVis converts a gts visibility into its api equivalent
func (c *Converter) VisToAPIVis(ctx context.Context, m gtsmodel.Visibility) apimodel.Visibility { func VisToAPIVis(m gtsmodel.Visibility) apimodel.Visibility {
switch m { switch m {
case gtsmodel.VisibilityPublic: case gtsmodel.VisibilityPublic:
return apimodel.VisibilityPublic return apimodel.VisibilityPublic
@@ -1664,6 +1664,8 @@ func (c *Converter) VisToAPIVis(ctx context.Context, m gtsmodel.Visibility) apim
return apimodel.VisibilityPrivate return apimodel.VisibilityPrivate
case gtsmodel.VisibilityDirect: case gtsmodel.VisibilityDirect:
return apimodel.VisibilityDirect return apimodel.VisibilityDirect
case gtsmodel.VisibilityNone:
return apimodel.VisibilityNone
} }
return "" return ""
} }