feat(auth): šifrovanje TOTP tajni u mirovanju (AES-256-GCM)
TOTP tajne se više ne čuvaju kao čist tekst u koloni korisnici.totp_tajna. Uvedene auth.Sifruj/auth.Desifruj (AES-256-GCM) u internal/auth/kripto.go. sqliteKorisniciRepo šifruje pri SacuvajTotpTajnu i dešifruje pri čitanju (DohvatiPoImenu/PoID/Lista), pa ostatak programa i dalje vidi čistu tajnu. Ključ je 32-bajtni NTECH_TOTP_KEY (base64), učitava se ili generiše pri pokretanju (ucitajTotpKljuc) i upisuje u ntech.env van baze. Stare nešifrovane tajne se tolerišu pri čitanju (fallback) i jednokratno šifruju pri startu (ZasifrujPostojeceTotp). RequireAuth i Handler provode ključ do repo-a. Dodati prvi testovi u repozitorijumu (internal/auth/kripto_test.go).
This commit is contained in:
@@ -16,10 +16,11 @@ type kontekstKljuc string
|
||||
// KljucKorisnika je ključ za korisnika u request contextu
|
||||
const KljucKorisnika kontekstKljuc = "korisnik"
|
||||
|
||||
// RequireAuth je chi middleware koji proverava sesiju i injektuje korisnika u context
|
||||
func RequireAuth(db *sql.DB) func(http.Handler) http.Handler {
|
||||
// RequireAuth je chi middleware koji proverava sesiju i injektuje korisnika u context.
|
||||
// totpKljuc je ključ za dešifrovanje TOTP tajne (korisRepo ga koristi pri čitanju).
|
||||
func RequireAuth(db *sql.DB, totpKljuc []byte) func(http.Handler) http.Handler {
|
||||
sesijeRepo := sqlite.NoviSesijeRepo(db)
|
||||
korisRepo := sqlite.NoviKorisniciRepo(db)
|
||||
korisRepo := sqlite.NoviKorisniciRepo(db, totpKljuc)
|
||||
|
||||
return func(next http.Handler) http.Handler {
|
||||
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
|
||||
Reference in New Issue
Block a user