Files
GoNtech/migrations/039_rezervni_kodovi.sql
T
Dasko b112d46e4e feat(2fa): rezervni (jednokratni) kodovi za 2FA
Alternativa TOTP-u kada uređaj nije dostupan. Po CLAUDE.md specifikaciji:
10 kodova pri aktivaciji, čuvani kao bcrypt heš.

Backend:
- migracija 039 (tabela rezervni_kodovi, FK CASCADE)
- auth.GenerisiRezervneKodove (Crockford base32, XXXX-XXXX) + NormalizujRezervniKod
- RezervniKodoviRepository (Zameni/Iskoristi/BrojPreostalih/Obrisi) + SQLite impl
- žičenje u Handler (+ reinicijalizuj)

Prijava:
- VerifikujTotp prvo proba TOTP, pa rezervni kod (isto polje); kod je jednokratni
- totp_provera.html: input opušten (slova/crtica), napomena o rezervnom kodu

Profil:
- aktivacija generiše i prikazuje kodove JEDNOM; dugme Regeneriši; brojač preostalo X/10
- deaktivacija briše kodove

Testovi: auth (generisanje/format/normalizacija), repo (jednokratnost/regeneracija),
prijava rezervnim kodom end-to-end. Ukupno 36 test funkcija.
2026-06-12 23:44:09 +02:00

13 lines
640 B
SQL

-- Rezervni (jednokratni) kodovi za 2FA — alternativa TOTP-u kada uređaj nije dostupan.
-- Kod se čuva kao bcrypt heš; jednom iskorišćen kod se označava (iskoriscen=1).
CREATE TABLE IF NOT EXISTS rezervni_kodovi (
id INTEGER PRIMARY KEY AUTOINCREMENT,
korisnik_id INTEGER NOT NULL REFERENCES korisnici(id) ON DELETE CASCADE,
kod_hash TEXT NOT NULL,
iskoriscen INTEGER NOT NULL DEFAULT 0,
datum_kreiranja DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
datum_koriscenja DATETIME
);
CREATE INDEX IF NOT EXISTS idx_rezervni_kodovi_korisnik ON rezervni_kodovi(korisnik_id);