Skip to content

Commit 0bc86fb

Browse files
committed
fix: set token ttl correctly in redis
1 parent e1d98b1 commit 0bc86fb

File tree

3 files changed

+20
-12
lines changed

3 files changed

+20
-12
lines changed

internal/db/token_repo_redis.go

Lines changed: 15 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,14 @@ 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+
}
6472
return r.setAuthTokenExpiry(ctx, token, expiresAt)
6573
}
6674

@@ -71,10 +79,14 @@ func (r RedisAdapter) SetIDToken(ctx context.Context, token models.AuthToken) er
7179
return r.setAuthToken(ctx, token)
7280
}
7381

74-
func (r RedisAdapter) SetIDTokenExpiry(ctx context.Context, token models.AuthToken, expiresAt time.Time) error {
82+
func (r RedisAdapter) SetIDTokenExpiry(ctx context.Context, token models.AuthToken, expiresAtLimit time.Time) error {
7583
if token.Type != models.IDTokenType {
7684
return fmt.Errorf("token is not of the right type")
7785
}
86+
expiresAt := expiresAtLimit
87+
if !token.ExpiresAt.IsZero() && token.ExpiresAt.Before(expiresAtLimit) {
88+
expiresAt = token.ExpiresAt
89+
}
7890
return r.setAuthTokenExpiry(ctx, token, expiresAt)
7991
}
8092

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: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package sessions
22

33
import (
4+
"log/slog"
45
"time"
56

67
"github.com/SwissDataScienceCenter/renku-gateway/internal/gwerrors"
@@ -135,7 +136,7 @@ func (sessions *SessionStore) SaveTokens(c echo.Context, session *models.Session
135136
session.TokenIDs = models.SerializableMap{}
136137
}
137138
session.TokenIDs[providerID] = tokens.AccessToken.ID
138-
expiresAt := sessions.getTokenStorageExpiration(tokens, *session)
139+
expiresAt := sessions.getTokenStorageExpiration(*session)
139140
err = sessions.tokenStore.SetAccessToken(c.Request().Context(), tokens.AccessToken)
140141
if err != nil {
141142
return err
@@ -175,11 +176,6 @@ func (*SessionStore) idTokenKey(tokenID string) string {
175176
return IDTokenCtxKey + ":" + tokenID
176177
}
177178

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-
}
179+
func (*SessionStore) getTokenStorageExpiration(session models.Session) time.Time {
184180
return session.CreatedAt.Add(session.MaxTTL())
185181
}

0 commit comments

Comments
 (0)