Store and use refresh tokens in the client cache (#3857)

* Refresh resources using refresh tokens
This commit is contained in:
Todd authored and Johan Brandhorst-Satzkorn committed 2024-01-05 07:43:20 -08:00
1 parent 5daef58f54
commit b2fec2e4f0
22 files changed
+1388 -105

No files matched your search

@@ -153,6 +153,25 @@ func InvalidArgumentErrorf(msg string, fields map[string]string) *ApiError {
return apiErr
}
func invalidRefreshTokenError(err error) *ApiError {
const op = "handlers.invalidRefreshTokenError"
ctx := context.TODO()
var domainErr *errors.Err
if !errors.As(err, &domainErr) {
event.WriteError(ctx, op, err, event.WithInfoMsg("Unable to build invalid argument api error."))
}
return &ApiError{
Status: http.StatusBadRequest,
Inner: &pb.Error{
Kind: domainErr.Info().Message,
Op: string(domainErr.Op),
Message: domainErr.Msg,
},
}
}
// ConflictErrorf generates an ApiErr when a pre-conditional check is violated.
// Note, this deliberately doesn't translate to the similarly named '412
// Precondition Failed' HTTP response status. The ApiErr returned is a 400 bad
@@ -199,6 +218,8 @@ func backendErrorToApiError(inErr error) *ApiError {
return NotFoundErrorf(genericNotFoundMsg)
case errors.Match(errors.T(errors.AccountAlreadyAssociated), inErr):
return InvalidArgumentErrorf(inErr.Error(), nil)
case errors.Match(errors.T(errors.InvalidRefreshToken), inErr):
return invalidRefreshTokenError(inErr)
case errors.Match(errors.T(errors.InvalidFieldMask), inErr), errors.Match(errors.T(errors.EmptyFieldMask), inErr):
return InvalidArgumentErrorf("Error in provided request", map[string]string{"update_mask": "Invalid update mask provided."})
case errors.IsUniqueError(inErr):
@@ -219,6 +219,18 @@ func TestApiErrorHandler(t *testing.T) {
},
},
},
{
name: "Invalid refresh token error",
err: errors.New(ctx, errors.InvalidRefreshToken, errors.Op("test.op"), "this is a test invalid refresh token error"),
expected: ApiError{
Status: http.StatusBadRequest,
Inner: &pb.Error{
Kind: "invalid refresh token",
Op: "test.op",
Message: "this is a test invalid refresh token error",
},
},
},
{
name: "Wrapped forbidden domain error",
err: fmt.Errorf("got error: %w", errors.E(ctx, errors.WithCode(errors.Forbidden), errors.WithMsg("test msg"))),