diff --git a/backend/internal/database/models.go b/backend/internal/database/models.go index e4e293f..2dae83f 100644 --- a/backend/internal/database/models.go +++ b/backend/internal/database/models.go @@ -19,13 +19,14 @@ type ConfirmationCode struct { } type LoginInformation struct { - ID int64 - UserID int64 - Email pgtype.Text - PasswordHash string - TotpEncrypted pgtype.Text - Email2faEnabled pgtype.Bool - PasswordChangeTime pgtype.Timestamp + ID int64 + UserID int64 + Email pgtype.Text + PasswordHash string + TotpEncrypted pgtype.Text + Email2faEnabled pgtype.Bool + PasswordChangeDate pgtype.Timestamp + PasswordTimesChanged pgtype.Int4 } type Profile struct { diff --git a/sqlc/schema.sql b/sqlc/schema.sql index dd9ca6d..cadddcc 100644 --- a/sqlc/schema.sql +++ b/sqlc/schema.sql @@ -1,20 +1,20 @@ --- TODO: login information must exist too CREATE TABLE IF NOT EXISTS "users" ( id BIGSERIAL PRIMARY KEY, username VARCHAR(20) UNIQUE NOT NULL, - verified BOOLEAN, - banned BOOLEAN, - registration_date TIMESTAMP NOT NULL + verified BOOLEAN DEFAULT FALSE, + banned BOOLEAN DEFAULT FALSE, + registration_date TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ); CREATE TABLE IF NOT EXISTS "login_informations" ( id BIGSERIAL PRIMARY KEY, user_id BIGINT UNIQUE NOT NULL REFERENCES users(id) ON DELETE CASCADE, - email VARCHAR(75), + email VARCHAR(75) UNIQUE, password_hash VARCHAR(512) NOT NULL, totp_encrypted VARCHAR(512), - email_2fa_enabled BOOLEAN, - password_change_time TIMESTAMP + email_2fa_enabled BOOLEAN DEFAULT FALSE, + password_change_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + password_times_changed INTEGER DEFAULT 0 ); CREATE TABLE IF NOT EXISTS "confirmation_codes" ( @@ -22,9 +22,9 @@ CREATE TABLE IF NOT EXISTS "confirmation_codes" ( user_id BIGINT UNIQUE NOT NULL REFERENCES users(id) ON DELETE CASCADE, type INTEGER NOT NULL, code VARCHAR(36) NOT NULL, - expires_at TIMESTAMP NOT NULL, - used BOOLEAN, - deleted BOOLEAN + expires_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP + INTERVAL '10 minutes', + used BOOLEAN DEFAULT FALSE, + deleted BOOLEAN DEFAULT FALSE ); CREATE TABLE IF NOT EXISTS "sessions" ( @@ -34,9 +34,9 @@ CREATE TABLE IF NOT EXISTS "sessions" ( name VARCHAR(100), platform VARCHAR(32), latest_ip VARCHAR(16), - login_time TIMESTAMP NOT NULL, - last_seen_date TIMESTAMP NOT NULL, - terminated BOOLEAN + login_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + last_seen_date TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + terminated BOOLEAN DEFAULT FALSE ); CREATE TABLE IF NOT EXISTS "profiles" (