Files
omnex/control-plane/api/internal/session/session.go
T
Nuxgrid 6b4274d12b
docker-publish / publish (push) Failing after 14m14s
feat: add api
2026-07-27 16:06:19 +02:00

42 lines
1.3 KiB
Go

// Package session : sessions utilisateurs stockées côté serveur dans Redis.
// Tokens opaques aléatoires (révocables), pas de JWT.
package session
import (
"context"
"crypto/rand"
"encoding/base64"
"time"
)
// CookieName : nom du cookie de session (httpOnly).
const CookieName = "omnex_session"
// Session : données associées à un token de session.
type Session struct {
UserID string `json:"user_id"`
Role string `json:"role"`
CreatedAt time.Time `json:"created_at"`
}
// Manager : cycle de vie des sessions.
type Manager interface {
// Create génère un token opaque et persiste la session (TTL appliqué).
Create(ctx context.Context, s Session) (token string, err error)
// Get récupère une session par token (found=false si absente/expirée).
Get(ctx context.Context, token string) (s Session, found bool, err error)
// Delete révoque une session (logout).
Delete(ctx context.Context, token string) error
// TTL renvoie la durée de vie configurée.
TTL() time.Duration
}
// newToken génère un token de session cryptographiquement aléatoire (256 bits).
func newToken() (string, error) {
b := make([]byte, 32)
if _, err := rand.Read(b); err != nil {
return "", err
}
return base64.RawURLEncoding.EncodeToString(b), nil
}