mirror of
https://github.com/nais/wonderwall.git
synced 2026-05-07 00:46:56 +00:00
feat(session): store metadata
This commit is contained in:
@@ -93,7 +93,8 @@ func (h *Handler) createSession(w http.ResponseWriter, r *http.Request, tokens *
|
||||
return fmt.Errorf("setting session cookie: %w", err)
|
||||
}
|
||||
|
||||
sessionData := session.NewData(externalSessionID, tokens, rawTokens.RefreshToken)
|
||||
sessionMetadata := session.NewMetadata(time.Now().Add(sessionLifetime))
|
||||
sessionData := session.NewData(externalSessionID, tokens, rawTokens.RefreshToken, sessionMetadata)
|
||||
|
||||
encryptedSessionData, err := sessionData.Encrypt(h.Crypter)
|
||||
if err != nil {
|
||||
|
||||
@@ -72,7 +72,7 @@ func (h *Handler) GetSessionFallback(r *http.Request) (*session.Data, error) {
|
||||
return nil, fmt.Errorf("parsing tokens: %w", err)
|
||||
}
|
||||
|
||||
return session.NewData(externalSessionID, tokens, ""), nil
|
||||
return session.NewData(externalSessionID, tokens, "", nil), nil
|
||||
}
|
||||
|
||||
func (h *Handler) DeleteSessionFallback(w http.ResponseWriter, r *http.Request) {
|
||||
|
||||
@@ -51,7 +51,7 @@ func TestHandler_SetSessionFallback(t *testing.T) {
|
||||
writer := httptest.NewRecorder()
|
||||
expiresIn := time.Minute
|
||||
tokens := makeTokens(provider)
|
||||
data := session.NewData("sid", tokens, "")
|
||||
data := session.NewData("sid", tokens, "", nil)
|
||||
err := h.SetSessionFallback(writer, data, expiresIn)
|
||||
assert.NoError(t, err)
|
||||
|
||||
@@ -110,7 +110,7 @@ func TestHandler_DeleteSessionFallback(t *testing.T) {
|
||||
func makeRequestWithFallbackCookies(t *testing.T, h *router.Handler, tokens *jwt.Tokens) *http.Request {
|
||||
writer := httptest.NewRecorder()
|
||||
expiresIn := time.Minute
|
||||
data := session.NewData("sid", tokens, "")
|
||||
data := session.NewData("sid", tokens, "", nil)
|
||||
err := h.SetSessionFallback(writer, data, expiresIn)
|
||||
assert.NoError(t, err)
|
||||
|
||||
|
||||
@@ -30,7 +30,8 @@ func TestMemory(t *testing.T) {
|
||||
AccessToken: jwt.NewAccessToken("access_token", accessToken),
|
||||
}
|
||||
refreshToken := "some-refresh-token"
|
||||
data := session.NewData("myid", tokens, refreshToken)
|
||||
metadata := session.NewMetadata(time.Now().Add(time.Hour))
|
||||
data := session.NewData("myid", tokens, refreshToken, metadata)
|
||||
|
||||
encryptedData, err := data.Encrypt(crypter)
|
||||
assert.NoError(t, err)
|
||||
|
||||
@@ -32,8 +32,8 @@ func TestRedis(t *testing.T) {
|
||||
AccessToken: jwt.NewAccessToken("access_token", accessToken),
|
||||
}
|
||||
refreshToken := "some-refresh-token"
|
||||
|
||||
data := session.NewData("myid", tokens, refreshToken)
|
||||
metadata := session.NewMetadata(time.Now().Add(time.Hour))
|
||||
data := session.NewData("myid", tokens, refreshToken, metadata)
|
||||
|
||||
encryptedData, err := data.Encrypt(crypter)
|
||||
assert.NoError(t, err)
|
||||
|
||||
@@ -85,16 +85,41 @@ type Data struct {
|
||||
IDToken string `json:"id_token"`
|
||||
RefreshToken string `json:"refresh_token"`
|
||||
Claims jwt.Claims `json:"claims"`
|
||||
Metadata Metadata `json:"metadata"`
|
||||
}
|
||||
|
||||
func NewData(externalSessionID string, tokens *jwt.Tokens, refreshToken string) *Data {
|
||||
return &Data{
|
||||
type Metadata struct {
|
||||
CreatedAt int64 `json:"created_at"`
|
||||
RefreshedAt int64 `json:"refreshed_at"`
|
||||
ExpiresAt int64 `json:"expires_at"`
|
||||
}
|
||||
|
||||
func NewMetadata(expiresAt time.Time) *Metadata {
|
||||
return &Metadata{
|
||||
CreatedAt: time.Now().Unix(),
|
||||
RefreshedAt: time.Now().Unix(),
|
||||
ExpiresAt: expiresAt.Unix(),
|
||||
}
|
||||
}
|
||||
|
||||
func (in *Metadata) UpdateRefreshedAt() {
|
||||
in.RefreshedAt = time.Now().Unix()
|
||||
}
|
||||
|
||||
func NewData(externalSessionID string, tokens *jwt.Tokens, refreshToken string, metadata *Metadata) *Data {
|
||||
data := &Data{
|
||||
ExternalSessionID: externalSessionID,
|
||||
AccessToken: tokens.AccessToken.GetSerialized(),
|
||||
IDToken: tokens.IDToken.GetSerialized(),
|
||||
RefreshToken: refreshToken,
|
||||
Claims: tokens.Claims(),
|
||||
}
|
||||
|
||||
if metadata != nil {
|
||||
data.Metadata = *metadata
|
||||
}
|
||||
|
||||
return data
|
||||
}
|
||||
|
||||
func (in *Data) Encrypt(crypter crypto.Crypter) (*EncryptedData, error) {
|
||||
|
||||
Reference in New Issue
Block a user