Files
egutierrez 9153a20384 feat: session_create, session_validate, session_cleanup
Fase 3 del issue 0010 — sesiones SQLite como alternativa a JWT.
- Tabla sessions creada con CREATE TABLE IF NOT EXISTS (autosetup)
- Tokens de 32 bytes aleatorios (crypto/rand) codificados en hex (256 bits)
- Indices en user_id y expires_at
- Prepared statements para evitar SQL injection
- SessionCleanup para eliminar expiradas periodicamente
2026-04-18 17:40:13 +02:00

25 lines
584 B
Go

package infra
import (
"database/sql"
"fmt"
"time"
)
// SessionCleanup elimina todas las sesiones con expires_at < ahora.
// Retorna el numero de filas eliminadas.
func SessionCleanup(db *sql.DB) (int64, error) {
if db == nil {
return 0, fmt.Errorf("session_cleanup: db nil")
}
res, err := db.Exec("DELETE FROM sessions WHERE expires_at < ?", time.Now().Unix())
if err != nil {
return 0, fmt.Errorf("session_cleanup: delete: %w", err)
}
n, err := res.RowsAffected()
if err != nil {
return 0, fmt.Errorf("session_cleanup: rows_affected: %w", err)
}
return n, nil
}