feat: add api
docker-publish / publish (push) Failing after 14m14s

This commit is contained in:
Nuxgrid
2026-07-27 16:06:19 +02:00
parent 8397a4470f
commit 6b4274d12b
46 changed files with 3922 additions and 0 deletions
@@ -0,0 +1,41 @@
// 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
}