Files
fn_registry/functions/infra/session_validate.md
T
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

1.7 KiB

name, kind, lang, domain, version, purity, signature, description, tags, uses_functions, uses_types, returns, returns_optional, error_type, imports, params, output, tested, tests, test_file_path, file_path
name kind lang domain version purity signature description tags uses_functions uses_types returns returns_optional error_type imports params output tested tests test_file_path file_path
session_validate function go infra 1.0.0 impure func SessionValidate(db *sql.DB, token string) (Session, error) Busca un token en la tabla sessions, verifica que no este expirado y retorna la Session con metadata deserializada. Error si no existe o expirado.
session
auth
sqlite
validate
infra
Session_go_infra
Session_go_infra
false error_go_core
database/sql
encoding/json
errors
fmt
time
name desc
db conexion SQL abierta a la BD de la app
name desc
token token opaco recibido del cliente (ej: header X-Session-Token o cookie)
Session valida con user_id, metadata y timestamps. Error si token invalido o expirado true
valida token existente no expirado
rechaza token inexistente
rechaza token expirado
functions/infra/session_test.go functions/infra/session_validate.go

Ejemplo

token := r.Header.Get("X-Session-Token")
session, err := SessionValidate(db, token)
if err != nil {
    HTTPErrorResponse(w, HTTPError{Status: 401, Code: "invalid_session", Message: "sesion invalida o expirada"})
    return
}
role, _ := session.Metadata["role"].(string)

Notas

Impura — I/O en SQLite, lee time.Now() para validar expiracion. Query con prepared statement (? placeholder) para evitar SQL injection. En respuestas HTTP al cliente no distinguir entre "token no existe" y "expirado" para no filtrar informacion. Si necesitas invalidar la sesion tras validar (ej: renovar token): DELETE FROM sessions WHERE token = ? en el mismo handler.