Skip to content

Commit 60bf5cb

Browse files
committed
fix: set token ttl correctly in redis
1 parent e1d98b1 commit 60bf5cb

File tree

4 files changed

+23
-15
lines changed

4 files changed

+23
-15
lines changed

internal/db/token_repo_redis.go

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,10 +42,14 @@ func (r RedisAdapter) SetAccessToken(ctx context.Context, token models.AuthToken
4242
return r.setAuthToken(ctx, token)
4343
}
4444

45-
func (r RedisAdapter) SetAccessTokenExpiry(ctx context.Context, token models.AuthToken, expiresAt time.Time) error {
45+
func (r RedisAdapter) SetAccessTokenExpiry(ctx context.Context, token models.AuthToken, expiresAtLimit time.Time) error {
4646
if token.Type != models.AccessTokenType {
4747
return fmt.Errorf("token is not of the right type")
4848
}
49+
expiresAt := expiresAtLimit
50+
if !token.ExpiresAt.IsZero() && token.ExpiresAt.Before(expiresAtLimit) {
51+
expiresAt = token.ExpiresAt
52+
}
4953
return r.setAuthTokenExpiry(ctx, token, expiresAt)
5054
}
5155

@@ -57,10 +61,15 @@ func (r RedisAdapter) SetRefreshToken(ctx context.Context, token models.AuthToke
5761
return r.setAuthToken(ctx, token)
5862
}
5963

60-
func (r RedisAdapter) SetRefreshTokenExpiry(ctx context.Context, token models.AuthToken, expiresAt time.Time) error {
64+
func (r RedisAdapter) SetRefreshTokenExpiry(ctx context.Context, token models.AuthToken, expiresAtLimit time.Time) error {
6165
if token.Type != models.RefreshTokenType {
6266
return fmt.Errorf("token is not of the right type")
6367
}
68+
expiresAt := expiresAtLimit
69+
if !token.ExpiresAt.IsZero() && token.ExpiresAt.Before(expiresAtLimit) {
70+
expiresAt = token.ExpiresAt
71+
}
72+
slog.Info("refresh token expiry", "limit", expiresAtLimit, "expires", token.ExpiresAt, "zero", token.ExpiresAt.IsZero())
6473
return r.setAuthTokenExpiry(ctx, token, expiresAt)
6574
}
6675

@@ -71,10 +80,14 @@ func (r RedisAdapter) SetIDToken(ctx context.Context, token models.AuthToken) er
7180
return r.setAuthToken(ctx, token)
7281
}
7382

74-
func (r RedisAdapter) SetIDTokenExpiry(ctx context.Context, token models.AuthToken, expiresAt time.Time) error {
83+
func (r RedisAdapter) SetIDTokenExpiry(ctx context.Context, token models.AuthToken, expiresAtLimit time.Time) error {
7584
if token.Type != models.IDTokenType {
7685
return fmt.Errorf("token is not of the right type")
7786
}
87+
expiresAt := expiresAtLimit
88+
if !token.ExpiresAt.IsZero() && token.ExpiresAt.Before(expiresAtLimit) {
89+
expiresAt = token.ExpiresAt
90+
}
7891
return r.setAuthTokenExpiry(ctx, token, expiresAt)
7992
}
8093

internal/models/token_repository.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ type AccessTokenGetter interface {
2424

2525
type AccessTokenSetter interface {
2626
SetAccessToken(ctx context.Context, token AuthToken) error
27-
SetAccessTokenExpiry(ctx context.Context, token AuthToken, expiresAt time.Time) error
27+
SetAccessTokenExpiry(ctx context.Context, token AuthToken, expiresAtLimit time.Time) error
2828
}
2929

3030
type AccessTokenRemover interface {
@@ -37,7 +37,7 @@ type RefreshTokenGetter interface {
3737

3838
type RefreshTokenSetter interface {
3939
SetRefreshToken(ctx context.Context, token AuthToken) error
40-
SetRefreshTokenExpiry(ctx context.Context, token AuthToken, expiresAt time.Time) error
40+
SetRefreshTokenExpiry(ctx context.Context, token AuthToken, expiresAtLimit time.Time) error
4141
}
4242

4343
type RefreshTokenRemover interface {
@@ -50,7 +50,7 @@ type IDTokenGetter interface {
5050

5151
type IDTokenSetter interface {
5252
SetIDToken(ctx context.Context, token AuthToken) error
53-
SetIDTokenExpiry(ctx context.Context, token AuthToken, expiresAt time.Time) error
53+
SetIDTokenExpiry(ctx context.Context, token AuthToken, expiresAtLimit time.Time) error
5454
}
5555

5656
type IDTokenRemover interface {

internal/sessions/session_maker.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,9 @@ func (sm *SessionMakerImpl) NewSession() (models.Session, error) {
3232
if session.IdleTTL() == time.Duration(0) {
3333
session.ExpiresAt = time.Time{}
3434
} else if session.MaxTTL() == time.Duration(0) {
35-
session.ExpiresAt = session.CreatedAt.Add(session.MaxTTL())
36-
} else {
3735
session.ExpiresAt = session.CreatedAt.Add(session.IdleTTL())
36+
} else {
37+
session.ExpiresAt = session.CreatedAt.Add(session.MaxTTL())
3838
}
3939
slog.Info("NEW SESSION", "session", session)
4040
return session, nil

internal/sessions/token_handling.go

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ func (sessions *SessionStore) SaveTokens(c echo.Context, session *models.Session
135135
session.TokenIDs = models.SerializableMap{}
136136
}
137137
session.TokenIDs[providerID] = tokens.AccessToken.ID
138-
expiresAt := sessions.getTokenStorageExpiration(tokens, *session)
138+
expiresAt := sessions.getTokenStorageExpiration(*session)
139139
err = sessions.tokenStore.SetAccessToken(c.Request().Context(), tokens.AccessToken)
140140
if err != nil {
141141
return err
@@ -175,11 +175,6 @@ func (*SessionStore) idTokenKey(tokenID string) string {
175175
return IDTokenCtxKey + ":" + tokenID
176176
}
177177

178-
// getTokenStorageExpiration returns the max session expiration unless the provider is Renku or GitLab, in which case there is no expiration
179-
func (*SessionStore) getTokenStorageExpiration(tokens models.AuthTokenSet, session models.Session) time.Time {
180-
providerID := tokens.AccessToken.ProviderID
181-
if providerID == "renku" || providerID == "gitlab" {
182-
return time.Time{}
183-
}
178+
func (*SessionStore) getTokenStorageExpiration(session models.Session) time.Time {
184179
return session.CreatedAt.Add(session.MaxTTL())
185180
}

0 commit comments

Comments
 (0)