Commit Graph

8 Commits

Author SHA1 Message Date
Dasko b07297f323 Demo mod: Secure kolačići i blokada TOTP aktivacije
- Secure flag na kolačićima se postavlja i u demo modu (HTTPS kroz Caddy)
- Podešavanje 2FA je blokirano u demo modu — handler odbija zahtev,
  a šablon sakriva dugme i prikazuje obaveštenje
2026-06-19 01:54:36 +02:00
Dasko 532f95848c Bezbednost: open redirect i kolačići bez Secure atributa
- _next parametar: sanitizacija preko url.Parse (Host+Scheme prazan = relativan URL)
  umesto ručnog string check-a koji CodeQL nije prepoznavao
- Kolačići: dodat Secure atribut (true u produkciji, false u razvoju)
  na 4 mesta: ntech_sesija brisanje (auth.go, prijava.go),
  ntech_flash_greska postavljanje i brisanje (auth.go, dashboard.go)
2026-06-16 03:32:07 +02:00
Dasko 4c461522d3 feat(rbac): zaštita mutirajućih ruta na ruteru (RequireDozvolaMut)
Mutirajuće rute (POST + brisanja preko GET-a) više se ne oslanjaju samo na
ručnu proveru u handleru. Uvedena middleware RequireDozvolaMut koja na odbijanje
vraća 403 (za razliku od RequireDozvola koja redirektuje, a ostaje za GET
preglede). U main.go svaka mutacija je obmotana helperom doz("modul.akcija"),
pa je ruter sada garantovani sloj zaštite — zaboravljena provera u handleru ne
ostavlja endpoint nezaštićenim.

Mapiranje rute->dozvola izvučeno iz postojećih provera u handlerima. Ručne
provere (zahtevajDozvolu) zadržane kao odbrana u dubinu. Namerni izuzeci:
javne rute, /podsetnici/* (bez dozvole po dizajnu), /admin/* (RequireAdmin po
ulozi) i lične profil-akcije.
2026-06-12 19:34:16 +02:00
Dasko ffb77ed122 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).
2026-06-12 19:26:46 +02:00
Dasko cf13d0fe15 Code-review popravke: RequireDozvola middleware, validacija backupa, dedup partiala
Bezbednost / dozvole:
  - Nov RequireDozvola(proveri, akcija) middleware (po uzoru na RequireAdmin):
    na odbijanje redirekt na /dashboard sa flash porukom umesto golog 403
  - 10 "pregled" ruta (prodaja, servis, klijenti, dobavljači, nabavke) prešlo
    na deklarativnu proveru na nivou rute
  - Uklonjene inline pregled-provere iz handlera — provera je sad na jednom
    mestu po ruti, vidljiva u ruteru

  Backup podešavanja:
  - Neispravan unos (van opsega ili ne-broj) više se ne preskače tiho;
    prikazuje se jasna greška i ne prikazuje se lažno "sačuvano"
  - Hvata se greška pri čuvanju u bazu (uklonjen progutani _ =)

  Šabloni:
  - "Premesti" dropdown izvučen u jedan {{define "premestiMeni"}} partial
    (više nije dupliran u tabeli i mobilnoj kartici)
  - Dodat dict helper u FuncMap saSidebar šablona radi prosleđivanja više
    vrednosti partialu; standalone šabloni namerno ostaju bez izmene
2026-06-09 01:26:10 +02:00
Dasko 2b3636528f Bezbednost: ispravke kontrole pristupa u admin i handler sloju 2026-06-05 22:41:20 +02:00
Dasko ccc08aee08 Dodato go:embed - disk-first logika za statičke fajlove i šablone 2026-06-04 20:14:03 +02:00
Dasko 2401f6d5ec Ispravka QR koda za 2FA — generisanje na serveru kao base64 PNG 2026-06-02 22:29:53 +02:00