Add password hashing, user settings with 2FA, and project image lightbox.

Hardens auth with PBKDF2, lockouts, local QR setup, and safer embeds while moving account security under the username menu.
This commit is contained in:
Atakan Doğan Özban
2026-07-17 18:49:34 +02:00
parent 8ec6e3fd50
commit e97a71e5b2
18 changed files with 1253 additions and 62 deletions
+8
View File
@@ -0,0 +1,8 @@
IF COL_LENGTH('dbo.admins', 'two_factor_enabled') IS NULL
BEGIN
ALTER TABLE dbo.admins ADD two_factor_enabled BIT NOT NULL CONSTRAINT DF_admins_two_factor_enabled DEFAULT(0);
END
IF COL_LENGTH('dbo.admins', 'two_factor_secret') IS NULL
BEGIN
ALTER TABLE dbo.admins ADD two_factor_secret NVARCHAR(64) NULL;
END
+24
View File
@@ -0,0 +1,24 @@
IF COL_LENGTH('dbo.admins', 'two_factor_secret') IS NOT NULL
BEGIN
ALTER TABLE dbo.admins ALTER COLUMN two_factor_secret NVARCHAR(512) NULL;
END
IF COL_LENGTH('dbo.admins', 'password') IS NOT NULL
BEGIN
ALTER TABLE dbo.admins ALTER COLUMN password NVARCHAR(255) NOT NULL;
END
IF COL_LENGTH('dbo.admins', 'login_failed_count') IS NULL
BEGIN
ALTER TABLE dbo.admins ADD login_failed_count INT NOT NULL CONSTRAINT DF_admins_login_failed_count DEFAULT(0);
END
IF COL_LENGTH('dbo.admins', 'login_lock_until') IS NULL
BEGIN
ALTER TABLE dbo.admins ADD login_lock_until DATETIME2 NULL;
END
IF COL_LENGTH('dbo.admins', 'totp_failed_count') IS NULL
BEGIN
ALTER TABLE dbo.admins ADD totp_failed_count INT NOT NULL CONSTRAINT DF_admins_totp_failed_count DEFAULT(0);
END
IF COL_LENGTH('dbo.admins', 'totp_lock_until') IS NULL
BEGIN
ALTER TABLE dbo.admins ADD totp_lock_until DATETIME2 NULL;
END
+9 -3
View File
@@ -17,9 +17,15 @@ GO
-- Admin users (used for the /login and /admin panel)
-- =========================================================
CREATE TABLE dbo.admins (
id INT IDENTITY(1,1) NOT NULL PRIMARY KEY,
username NVARCHAR(100) NOT NULL,
password NVARCHAR(255) NOT NULL
id INT IDENTITY(1,1) NOT NULL PRIMARY KEY,
username NVARCHAR(100) NOT NULL,
password NVARCHAR(255) NOT NULL,
two_factor_enabled BIT NOT NULL CONSTRAINT DF_admins_two_factor_enabled DEFAULT(0),
two_factor_secret NVARCHAR(512) NULL,
login_failed_count INT NOT NULL CONSTRAINT DF_admins_login_failed_count DEFAULT(0),
login_lock_until DATETIME2 NULL,
totp_failed_count INT NOT NULL CONSTRAINT DF_admins_totp_failed_count DEFAULT(0),
totp_lock_until DATETIME2 NULL
);
GO