diff --git a/src/session/session_errors.go b/src/session/session_errors.go index a128365..29f0ca0 100644 --- a/src/session/session_errors.go +++ b/src/session/session_errors.go @@ -5,3 +5,4 @@ import "errors" var ErrSessionNotFound = errors.New("session not found") var ErrSessionAlreadyExists = errors.New("session already exists") var ErrSessionExpired = errors.New("session expired") +var ErrSessionBackend = errors.New("session backend") diff --git a/src/session/session_redis.go b/src/session/session_redis.go index 300bbaa..b50f33e 100644 --- a/src/session/session_redis.go +++ b/src/session/session_redis.go @@ -2,6 +2,8 @@ package session import ( "context" + "encoding/json" + "time" "astraltech.xyz/accountmanager/src/logging" "github.com/redis/go-redis/v9" @@ -45,19 +47,25 @@ func (m *RedisStore) Create(sessionID string, session *SessionData) (err error) func (m *RedisStore) Get(sessionID string) (*SessionData, error) { hashed := hashSession(sessionID) - _, err := m.client.Get(m.ctx, hashed).Result() + data, err := m.client.Get(m.ctx, hashed).Bytes() if err == redis.Nil { return nil, ErrSessionNotFound } else if err != nil { logging.Error(err.Error()) + return nil, ErrSessionBackend } - // if time.Now().After(data.ExpiresAt) { - // _ = m.Delete(sessionID) // ignore error - // return nil, ErrSessionExpired - // } - // copy := *data - return nil, nil + var session_data SessionData + if err := json.Unmarshal(data, &session_data); err != nil { + logging.Error(err.Error()) + return nil, ErrSessionBackend + } + + if time.Now().After(session_data.ExpiresAt) { + _ = m.Delete(sessionID) + return nil, ErrSessionBackend + } + return &session_data, nil } func (m *RedisStore) Update(sessionID string, session *SessionData) error { return nil diff --git a/src/session/session_store.go b/src/session/session_store.go index 95d6e6e..0b2a43b 100644 --- a/src/session/session_store.go +++ b/src/session/session_store.go @@ -3,9 +3,9 @@ package session import "time" type SessionData struct { - UserID string - CSRFToken string - ExpiresAt time.Time + UserID string `json:"userid"` + CSRFToken string `json:"csrftoken"` + ExpiresAt time.Time `json:"expiresat"` } type SessionStore interface {