From 74c5d842cecd82caefe40208181c1b5132260c31 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dawid=20Wysoki=C5=84ski?= Date: Tue, 6 Feb 2024 07:14:19 +0100 Subject: [PATCH] refactor: version cursor - update payload --- internal/domain/validation.go | 1 + internal/domain/version.go | 13 ++++++++++--- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/internal/domain/validation.go b/internal/domain/validation.go index c070255..399c326 100644 --- a/internal/domain/validation.go +++ b/internal/domain/validation.go @@ -241,6 +241,7 @@ var ErrNil error = simpleError{ code: "nil", } +// ErrInvalidCursor is an error that is returned when a cursor can't be decoded (e.g. is malformed). var ErrInvalidCursor error = simpleError{ msg: "invalid cursor", typ: ErrorTypeIncorrectInput, diff --git a/internal/domain/version.go b/internal/domain/version.go index 1ef2427..c444a75 100644 --- a/internal/domain/version.go +++ b/internal/domain/version.go @@ -4,6 +4,7 @@ import ( "encoding/base64" "fmt" "net/url" + "strings" ) const ( @@ -140,13 +141,19 @@ func decodeVersionCursor(encoded string) (VersionCursor, error) { return VersionCursor{}, err } - decoded, err := base64.StdEncoding.DecodeString(encoded) + decodedBytes, err := base64.StdEncoding.DecodeString(encoded) if err != nil { return VersionCursor{}, ErrInvalidCursor } + decoded := string(decodedBytes) + + code, ok := strings.CutPrefix(decoded, "code=") + if !ok { + return VersionCursor{}, ErrInvalidCursor + } vc, err := NewVersionCursor(NullString{ - Value: string(decoded), + Value: code, Valid: true, }) if err != nil { @@ -169,7 +176,7 @@ func (vc VersionCursor) Encode() string { return "" } - return base64.StdEncoding.EncodeToString([]byte(vc.code.Value)) + return base64.StdEncoding.EncodeToString([]byte("code=" + vc.code.Value)) } type ListVersionsParams struct {