From 8f249d0080392c362b5c2b0cc77dfc5975789f7a Mon Sep 17 00:00:00 2001 From: Marco Date: Thu, 4 Apr 2024 17:47:08 +0200 Subject: [PATCH] Add PostgreSQL schema for new tables 'users_2fa' and 'users_otps' --- Database/PostgreSQL.sql | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/Database/PostgreSQL.sql b/Database/PostgreSQL.sql index 46325b3..8f957ff 100644 --- a/Database/PostgreSQL.sql +++ b/Database/PostgreSQL.sql @@ -18,6 +18,16 @@ CREATE TABLE IF NOT EXISTS "users" ( "force_logout" INTEGER NOT NULL DEFAULT '0' CHECK ("force_logout" >= 0) ); +CREATE TABLE IF NOT EXISTS "users_2fa" ( + "id" BIGSERIAL PRIMARY KEY CHECK ("id" >= 0), + "user_id" INTEGER NOT NULL CHECK ("user_id" >= 0), + "mechanism" SMALLINT NOT NULL CHECK ("mechanism" >= 0), + "seed" VARCHAR(255) DEFAULT NULL, + "created_at" INTEGER NOT NULL CHECK ("created_at" >= 0), + "expires_at" INTEGER DEFAULT NULL CHECK ("expires_at" >= 0), +); +CREATE UNIQUE INDEX IF NOT EXISTS "user_id_mechanism" ON "users_2fa" ("user_id", "mechanism"); + CREATE TABLE IF NOT EXISTS "users_confirmations" ( "id" SERIAL PRIMARY KEY CHECK ("id" >= 0), "user_id" INTEGER NOT NULL CHECK ("user_id" >= 0), @@ -29,6 +39,18 @@ CREATE TABLE IF NOT EXISTS "users_confirmations" ( CREATE INDEX IF NOT EXISTS "email_expires" ON "users_confirmations" ("email", "expires"); CREATE INDEX IF NOT EXISTS "user_id" ON "users_confirmations" ("user_id"); +CREATE TABLE IF NOT EXISTS "users_otps" ( + "id" BIGSERIAL PRIMARY KEY CHECK ("id" >= 0), + "user_id" INTEGER NOT NULL CHECK ("user_id" >= 0), + "mechanism" SMALLINT NOT NULL CHECK ("mechanism" >= 0), + "single_factor" SMALLINT NOT NULL DEFAULT '0' CHECK ("single_factor" >= 0), + "selector" VARCHAR(24) NOT NULL, + "token" VARCHAR(255) NOT NULL, + "expires_at" INTEGER DEFAULT NULL CHECK ("expires_at" >= 0), +); +CREATE INDEX IF NOT EXISTS "user_id_mechanism" ON "users_otps" ("user_id", "mechanism"); +CREATE INDEX IF NOT EXISTS "selector_user_id" ON "users_otps" ("selector", "user_id"); + CREATE TABLE IF NOT EXISTS "users_remembered" ( "id" BIGSERIAL PRIMARY KEY CHECK ("id" >= 0), "user" INTEGER NOT NULL CHECK ("user" >= 0),