From 29d316349b5898bb691caaaa2f3a9825726efc40 Mon Sep 17 00:00:00 2001 From: Neeraj Gupta <254676+ua741@users.noreply.github.com> Date: Tue, 12 Aug 2025 11:47:46 +0530 Subject: [PATCH] Allow empty string --- server/ente/remotestore.go | 10 +++++----- server/pkg/controller/remotestore/controller.go | 12 ++++++++---- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/server/ente/remotestore.go b/server/ente/remotestore.go index 3a9a965bf7..ea96d8de1c 100644 --- a/server/ente/remotestore.go +++ b/server/ente/remotestore.go @@ -17,14 +17,14 @@ type GetValueResponse struct { } type UpdateKeyValueRequest struct { - Key string `json:"key" binding:"required"` - Value string `json:"value" binding:"required"` + Key string `json:"key" binding:"required"` + Value *string `json:"value" binding:"required"` } type AdminUpdateKeyValueRequest struct { - UserID int64 `json:"userID" binding:"required"` - Key string `json:"key" binding:"required"` - Value string `json:"value" binding:"required"` + UserID int64 `json:"userID" binding:"required"` + Key string `json:"key" binding:"required"` + Value *string `json:"value" binding:"required"` } type FeatureFlagResponse struct { diff --git a/server/pkg/controller/remotestore/controller.go b/server/pkg/controller/remotestore/controller.go index 131a6e7c2f..eac04534ba 100644 --- a/server/pkg/controller/remotestore/controller.go +++ b/server/pkg/controller/remotestore/controller.go @@ -26,10 +26,10 @@ func (c *Controller) InsertOrUpdate(ctx *gin.Context, request ente.UpdateKeyValu if err := c._validateRequest(userID, request.Key, request.Value, false); err != nil { return err } - if request.Value == "" && ente.FlagKey(request.Key).CanRemove() { + if *request.Value == "" && ente.FlagKey(request.Key).CanRemove() { return c.Repo.RemoveKey(ctx, userID, request.Key) } - return c.Repo.InsertOrUpdate(ctx, userID, request.Key, request.Value) + return c.Repo.InsertOrUpdate(ctx, userID, request.Key, *request.Value) } // RemoveKey removes the key from remote store @@ -48,7 +48,7 @@ func (c *Controller) AdminInsertOrUpdate(ctx *gin.Context, request ente.AdminUpd if err := c._validateRequest(request.UserID, request.Key, request.Value, true); err != nil { return err } - return c.Repo.InsertOrUpdate(ctx, request.UserID, request.Key, request.Value) + return c.Repo.InsertOrUpdate(ctx, request.UserID, request.Key, *request.Value) } func (c *Controller) Get(ctx *gin.Context, req ente.GetValueRequest) (*ente.GetValueResponse, error) { @@ -108,10 +108,14 @@ func (c *Controller) DomainOwner(ctx *gin.Context, domain string) (*int64, error return c.Repo.DomainOwner(ctx, domain) } -func (c *Controller) _validateRequest(userID int64, key, value string, byAdmin bool) error { +func (c *Controller) _validateRequest(userID int64, key string, valuePtr *string, byAdmin bool) error { if !ente.IsValidFlagKey(key) { return stacktrace.Propagate(ente.NewBadRequestWithMessage(fmt.Sprintf("key %s is not allowed", key)), "invalid flag key") } + if valuePtr == nil { + return stacktrace.Propagate(ente.NewBadRequestWithMessage("value is missing"), "value is nil") + } + value := *valuePtr flag := ente.FlagKey(key) if err := flag.IsValidValue(value); err != nil { return stacktrace.Propagate(err, "")