-- =====================================================================
-- Repurpose неиспользуемого черновика Magic Link (auth_sessions) под
-- реальный флоу: ротируемые refresh-токены для веб-сессий. Раньше access-JWT
-- жил 10 минут без какого-либо обновления, и юзера тихо разлогинивало каждые
-- 10 минут — см. README/SECURITY_AUDIT.md. Храним только SHA-256 хеш
-- предъявляемого токена, никогда сырое значение.
-- =====================================================================
DROP TABLE IF EXISTS auth_sessions;

CREATE TABLE refresh_sessions (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    user_id UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE,
    token_hash VARCHAR(64) NOT NULL UNIQUE, -- hex(sha256(refresh_token))
    user_agent VARCHAR(255),
    created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
    expires_at TIMESTAMPTZ NOT NULL,
    revoked_at TIMESTAMPTZ
);

CREATE INDEX idx_refresh_sessions_user ON refresh_sessions(user_id);

-- =====================================================================
-- Поля, недостающие для полноценного TunnelConfig в GET /nodes/routing:
-- статический публичный ключ ноды (для клиентского пиннинга) и домен-декой
-- для ClientHello (см. src/modules/nodes/controller.rs::get_node_routing).
-- =====================================================================
ALTER TABLE vpn_nodes
    ADD COLUMN public_key TEXT,
    ADD COLUMN sni_domain VARCHAR(255);
