9153a20384
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
25 lines
584 B
Go
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
|
|
}
|