-- Additive migration from 0.0.1. The configuration table is never cleared. CREATE TABLE IF NOT EXISTS configuration ( id INTEGER PRIMARY KEY CHECK (id = 1), revision INTEGER NOT NULL CHECK (revision >= 0), document TEXT NOT NULL ); CREATE TABLE IF NOT EXISTS administrator ( id INTEGER PRIMARY KEY CHECK (id = 1), username TEXT NOT NULL UNIQUE, password_hash TEXT NOT NULL, generation INTEGER NOT NULL DEFAULT 1 CHECK (generation > 0), created_at INTEGER NOT NULL ); CREATE TABLE IF NOT EXISTS admin_sessions ( token_hash TEXT PRIMARY KEY CHECK (length(token_hash) = 64), csrf_token TEXT NOT NULL CHECK (length(csrf_token) = 64), generation INTEGER NOT NULL, created_at INTEGER NOT NULL, last_seen INTEGER NOT NULL, expires_at INTEGER NOT NULL, kind TEXT NOT NULL CHECK (kind IN ('browser', 'cli')) ); CREATE INDEX IF NOT EXISTS admin_sessions_expiry ON admin_sessions(expires_at); CREATE TABLE IF NOT EXISTS admin_audit ( id INTEGER PRIMARY KEY AUTOINCREMENT, time INTEGER NOT NULL, actor TEXT NOT NULL, action TEXT NOT NULL, detail TEXT NOT NULL ); CREATE TABLE IF NOT EXISTS auth_throttle ( id INTEGER PRIMARY KEY CHECK (id = 1), window_start INTEGER NOT NULL DEFAULT 0, attempts INTEGER NOT NULL DEFAULT 0 ); INSERT OR IGNORE INTO auth_throttle(id) VALUES(1);