diff --git a/cmd/ntech/main.go b/cmd/ntech/main.go index 70dd93b..c72d0d5 100644 --- a/cmd/ntech/main.go +++ b/cmd/ntech/main.go @@ -125,7 +125,13 @@ func main() { slog.Info("šifrovane postojeće TOTP tajne", "broj", br) } - napraviBackup(db, putanjaBaze) + { + max := procitajIntPodesavanje(db, "backup_broj_kopija", 7) + if os.Getenv("NTECH_ENV") == "demo" { + max = 2 + } + napraviBackup(db, putanjaBaze, max) + } os.MkdirAll("web/static/uploads", 0755) @@ -168,7 +174,11 @@ func main() { }) time.Sleep(time.Duration(sati) * time.Hour) h.SaBazom(func(db *sql.DB) { - napraviBackup(db, putanjaBaze) + max := procitajIntPodesavanje(db, "backup_broj_kopija", 7) + if h.JelDemo { + max = 2 + } + napraviBackup(db, putanjaBaze, max) }) } }() @@ -456,7 +466,7 @@ func postaviDemoKorisnika(ctx context.Context, repo db.KorisniciRepository) erro // napraviBackup kreira konzistentnu kopiju baze i briše najstarije preko zadatog broja kopija. // Koristi već otvorenu vezu ka bazi (VACUUM INTO je bezbedan na pooled konekciji). -func napraviBackup(db *sql.DB, putanjaBaze string) { +func napraviBackup(db *sql.DB, putanjaBaze string, maxKopija int) { if _, err := os.Stat(putanjaBaze); os.IsNotExist(err) { return } @@ -476,7 +486,7 @@ func napraviBackup(db *sql.DB, putanjaBaze string) { } slog.Info("backup kreiran", "putanja", odrediste) - ocistiStareBackupe(folder, procitajIntPodesavanje(db, "backup_broj_kopija", 7)) + ocistiStareBackupe(folder, maxKopija) } // procitajIntPodesavanje vraća celobrojnu vrednost podešavanja iz baze, diff --git a/internal/handler/admin.go b/internal/handler/admin.go index af4c783..302136b 100644 --- a/internal/handler/admin.go +++ b/internal/handler/admin.go @@ -35,6 +35,7 @@ type podaciAdminProfil struct { BrojRezervnih int // koliko neiskorišćenih rezervnih kodova je preostalo LokalnaTema string KoristiLokalnuTemu bool + JelDemo bool } type podaciProfilTema struct { @@ -312,6 +313,7 @@ func (h *Handler) AdminProfil(w http.ResponseWriter, r *http.Request) { BrojRezervnih: brojRezervnih, LokalnaTema: svezi.LokalnaTema, KoristiLokalnuTemu: svezi.KoristiLokalnuTemu, + JelDemo: h.JelDemo, }) } @@ -352,6 +354,7 @@ func (h *Handler) generisiIPrikaziKodove(w http.ResponseWriter, r *http.Request, TotpAktivan: true, RezervniKodovi: kodovi, BrojRezervnih: len(kodovi), + JelDemo: h.JelDemo, }) } @@ -363,6 +366,12 @@ func (h *Handler) AdminPromeniLozinku(w http.ResponseWriter, r *http.Request) { return } + if h.JelDemo { + middleware.SetFlash(w, r, h.DB, "greska", "Promena lozinke nije dozvoljena u demo modu.") + http.Redirect(w, r, "/admin/profil", http.StatusSeeOther) + return + } + if err := r.ParseForm(); err != nil { middleware.SetFlash(w, r, h.DB, "greska", "Greška. Pokušajte ponovo.") http.Redirect(w, r, "/admin/profil", http.StatusSeeOther) @@ -426,6 +435,7 @@ func (h *Handler) AdminTotpPokreni(w http.ResponseWriter, r *http.Request) { TotpURI: totp.URI, TotpTajna: totp.Tajna, TotpQR: template.URL("data:image/png;base64," + totp.QRBase64), + JelDemo: h.JelDemo, }) } @@ -465,6 +475,7 @@ func (h *Handler) AdminTotpAktivacija(w http.ResponseWriter, r *http.Request) { TotpTajna: tajna, TotpQR: template.URL("data:image/png;base64," + qr), Greska: "totp", + JelDemo: h.JelDemo, }) return } diff --git a/web/templates/stranice/admin_profil.html b/web/templates/stranice/admin_profil.html index 1dbe04f..1211f6f 100644 --- a/web/templates/stranice/admin_profil.html +++ b/web/templates/stranice/admin_profil.html @@ -5,6 +5,9 @@
Promena lozinke
+ {{if .JelDemo}} +

Promena lozinke nije dostupna u demo modu.

+ {{else}}
@@ -24,6 +27,7 @@
+ {{end}}