From 23d4604bb218629b26f4fc2cf97a9b418c865146 Mon Sep 17 00:00:00 2001 From: Allison Doami Date: Thu, 9 Jan 2025 16:20:46 -0800 Subject: [PATCH] feat: Remove refresh token if token is too big (#1092) --- oidc_cli/oidc_impl/cache/cache.go | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/oidc_cli/oidc_impl/cache/cache.go b/oidc_cli/oidc_impl/cache/cache.go index 0c314110..94c3f6cf 100644 --- a/oidc_cli/oidc_impl/cache/cache.go +++ b/oidc_cli/oidc_impl/cache/cache.go @@ -96,7 +96,26 @@ func (c *Cache) refresh(ctx context.Context) (*client.Token, error) { err = c.storage.Set(ctx, compressedToken) if err != nil { - return nil, errors.Wrap(err, "Unable to cache the strToken") + if err.Error() == "could not set value to keyring: data passed to Set was too big" { + // TODO: Upgrade keyring library to v0.2.2 to use ErrSetDataTooBig + // if errors.Is(err, keyring.ErrSetDataTooBig) { + logrus.Debug("Token too big, removing refresh token") + strToken, err := token.Marshal(append(c.storage.MarshalOpts(), client.MarshalOptNoRefresh)...) + if err != nil { + return nil, errors.Wrap(err, "unable to marshall token") + } + // gzip encode and save token to storage + compressedToken, err = compressToken(strToken) + if err != nil { + return nil, errors.Wrap(err, "unable to compress token") + } + err = c.storage.Set(ctx, compressedToken) + if err != nil { + return nil, errors.Wrap(err, "Unable to cache the strToken") + } + } else { + return nil, errors.Wrap(err, "Unable to cache the strToken") + } } return token, nil