-- Private-beta email allowlist. -- -- The framework supports a deployment-gated sign-in mode: when this -- table contains rows, only emails listed here (case-insensitively) -- may sign in via OAuth. Users already provisioned in the `users` -- table are grandfathered in by gitea_id and never re-checked against -- this list — so the operator who allow-listed themselves, signed in -- once, then removed their own email from the list does not lose -- access. -- -- An empty `allowed_emails` table is the "open" state: no allowlist -- gate runs, and any successful OAuth sign-in provisions a new user -- as before. This means a fresh framework install behaves exactly as -- prior versions until the operator adds the first row, at which -- point the gate turns on for everyone not yet in `users`. CREATE TABLE allowed_emails ( email TEXT PRIMARY KEY COLLATE NOCASE, added_by_user_id INTEGER REFERENCES users(id) ON DELETE SET NULL, note TEXT, created_at TEXT NOT NULL DEFAULT (datetime('now')) );