Skip to content

Commit a065913

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

File tree

3 files changed

+19
-12
lines changed

3 files changed

+19
-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: 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)