Commit Graph
9 Commits
Author SHA1 Message Date
Dasko d9f337617b Nizak prioritet iz pregleda koda: indeksi, greške, sitne popravke
- migracija 102: indeksi na FK kolonama (stavke_prodaje, servisni_delovi,
  servisni_potrazivani_delovi, magacinske_promene, stavke_nabavke, pdv_kir,
  pdv_kpr) — potvrđeno kreiranje i idempotentnost
- BrojKriticnihZaliha/KriticneZalihe filtriraju samo proizvode i aktivne
  artikle, usklađeno sa ArtikalRepo.Lista(SamoKriticni)
- url.QueryEscape na query string u magacin.go/klijent.go (paginacija)
- TestFiskalizacije/BeStatus vraćaju generičku poruku, detalj u slog
- SetFlash loguje grešku umesto tihog ignorisanja
- os.WriteFile/os.MkdirAll u main.go proveravaju grešku
- dummyHash generisanje panikuje na startu ako bcrypt ikad zakaže
  (umesto tihog sloma anti-enumeracije)
- PrihvatiPredlozene proverava redovi.Err()
- /healthz endpoint (DB ping)
- hx-boost na "Osveži" linkovima (blokirane_ip, fiskal_pazar)
- MaxBytesReader (4KB) na javne /status/{token}/* POST rute
- komentar u auth.go zašto postoje dva flash mehanizma (namerno, ne spojeno)

Provereno: jePrivatnaAdresa ne radi DNS lookup (nema net.LookupIP u repou),
pa DNS-rebinding nalaz iz pregleda nije primenljiv na trenutni kod.
2026-07-03 23:31:00 +02:00
Dasko 809d29ea49 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 18dd2fc460 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 ab75a60857 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 3f431e51c9 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 9466c7133b 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 742d0a528c Bezbednost: ispravke kontrole pristupa u admin i handler sloju 2026-06-05 22:41:20 +02:00
Dasko c0bb36c1b3 Dodato go:embed - disk-first logika za statičke fajlove i šablone 2026-06-04 20:14:03 +02:00
Dasko e9933eaf3e Ispravka QR koda za 2FA — generisanje na serveru kao base64 PNG 2026-06-02 22:29:53 +02:00