From 6a8af426474acd1ffd5cb3265a2372003977326a Mon Sep 17 00:00:00 2001 From: Vyr Cossont Date: Tue, 26 Nov 2024 08:23:00 -0800 Subject: [bugfix] Allow unsetting filter expiration dates (#3560) * Regression tests for #3497 (v1 and v2) * use Nullable type for v2 form.expires_in --------- Co-authored-by: tobi --- internal/processing/filters/v2/create.go | 2 +- internal/processing/filters/v2/update.go | 13 +++++++++---- 2 files changed, 10 insertions(+), 5 deletions(-) (limited to 'internal/processing/filters/v2') diff --git a/internal/processing/filters/v2/create.go b/internal/processing/filters/v2/create.go index 7095a643c..60dd46f43 100644 --- a/internal/processing/filters/v2/create.go +++ b/internal/processing/filters/v2/create.go @@ -41,7 +41,7 @@ func (p *Processor) Create(ctx context.Context, account *gtsmodel.Account, form Title: form.Title, Action: typeutils.APIFilterActionToFilterAction(*form.FilterAction), } - if form.ExpiresIn != nil { + if form.ExpiresIn != nil && *form.ExpiresIn != 0 { filter.ExpiresAt = time.Now().Add(time.Second * time.Duration(*form.ExpiresIn)) } for _, context := range form.Context { diff --git a/internal/processing/filters/v2/update.go b/internal/processing/filters/v2/update.go index 0d443d58e..d5b5cce01 100644 --- a/internal/processing/filters/v2/update.go +++ b/internal/processing/filters/v2/update.go @@ -21,8 +21,6 @@ import ( "context" "errors" "fmt" - "time" - apimodel "github.com/superseriousbusiness/gotosocial/internal/api/model" "github.com/superseriousbusiness/gotosocial/internal/db" "github.com/superseriousbusiness/gotosocial/internal/gtserror" @@ -30,6 +28,7 @@ import ( "github.com/superseriousbusiness/gotosocial/internal/id" "github.com/superseriousbusiness/gotosocial/internal/typeutils" "github.com/superseriousbusiness/gotosocial/internal/util" + "time" ) // Update an existing filter for the given account, using the provided parameters. @@ -68,10 +67,16 @@ func (p *Processor) Update( filterColumns = append(filterColumns, "action") filter.Action = typeutils.APIFilterActionToFilterAction(*form.FilterAction) } - // TODO: (Vyr) is it possible to unset a filter expiration with this API? if form.ExpiresIn != nil { + expiresIn := *form.ExpiresIn filterColumns = append(filterColumns, "expires_at") - filter.ExpiresAt = time.Now().Add(time.Second * time.Duration(*form.ExpiresIn)) + if expiresIn == 0 { + // Unset the expiration date. + filter.ExpiresAt = time.Time{} + } else { + // Update the expiration date. + filter.ExpiresAt = time.Now().Add(time.Second * time.Duration(expiresIn)) + } } if form.Context != nil { filterColumns = append(filterColumns, -- cgit v1.2.3