Srednji prioritet iz pregleda koda: konzistentnost, refaktor, sitne popravke
- konstantno-vremensko poređenje CSRF tokena i kartica-PIN-a
- CSRF grupa proširena na /prijava, /prijava/totp, /setup
- router-level dozvola na svim /admin/podesavanja/* i modul("fiskalizacija")
na fiskal.pazar rutama
- KlijentRepo.Pronadji razlikuje sql.ErrNoRows od stvarnih DB grešaka
- izdvojen zajednički vratiStavkeNaStanje umesto 4 duplirana bloka
(ProdajaRepo/ServisRepo Storno/Obrisi)
- datumi u KIR/KPR sada se upisuju/porede kao "2006-01-02", usklađeno sa KPO
- ArtikalRepo.DohvatiVise (batch dohvat) — ukida N+1 upite u SacuvajNabavku
- KategorijaRepo.Obrisi umesto direktnog SQL-a u handleru, sa
ErrKategorijaUUpotrebi porukom
- KolicinMin -> KolicinaMin (tipfeler), Trosak/Usluga.DatumUnosa string -> time.Time
- dedup OznakaPoreskogBroja (KIR/KPR)
- inicijali() template funkcija (rune, ne bajtovi) za avatar inicijale
This commit is contained in:
+27
-19
@@ -238,14 +238,21 @@ func main() {
|
||||
http.FileServer(http.FS(staticFS)).ServeHTTP(w, req)
|
||||
})))
|
||||
|
||||
// javne rute (bez autentifikacije)
|
||||
r.Get("/prijava", h.PrikazPrijave)
|
||||
r.Post("/prijava", h.Prijava)
|
||||
r.Get("/prijava/totp", h.PrikazTotp)
|
||||
r.Post("/prijava/totp", h.VerifikujTotp)
|
||||
r.Get("/setup", h.PrikazSetupa)
|
||||
r.Post("/setup", h.SacuvajSetup)
|
||||
// javne rute (bez autentifikacije), ali i dalje sa CSRF zaštitom — sprečava login-CSRF
|
||||
r.Group(func(r chi.Router) {
|
||||
r.Use(ntechmw.CsrfMiddleware)
|
||||
r.Get("/prijava", h.PrikazPrijave)
|
||||
r.Post("/prijava", h.Prijava)
|
||||
r.Get("/prijava/totp", h.PrikazTotp)
|
||||
r.Post("/prijava/totp", h.VerifikujTotp)
|
||||
r.Get("/setup", h.PrikazSetupa)
|
||||
r.Post("/setup", h.SacuvajSetup)
|
||||
})
|
||||
r.Get("/odjava", h.Odjava)
|
||||
// /status/{token}/* NAMERNO je van CSRF grupe — autentikacija je jednokratni
|
||||
// tajni token u URL-u (capability model), ne kolačić/sesija, pa CSRF ovde ne
|
||||
// primenjuje isti pretpostavljeni napadački model (napadač bez tokena ne može
|
||||
// ni da pogodi rutu).
|
||||
r.Get("/status/{token}", h.ServisJavniStatus)
|
||||
r.Post("/status/{token}/prihvati", h.ServisJavniPrihvati)
|
||||
r.Post("/status/{token}/odbij", h.ServisJavniOdbij)
|
||||
@@ -283,18 +290,19 @@ func main() {
|
||||
})
|
||||
r.Get("/dashboard", h.Dashboard)
|
||||
r.Get("/podesavanja", h.Podesavanja)
|
||||
r.Get("/admin/podesavanja/opste", h.PodesavanjaOpste)
|
||||
r.Get("/admin/podesavanja/izgled", h.PodesavanjaIzgled)
|
||||
r.Get("/admin/podesavanja/sistem", h.PodesavanjaSistem)
|
||||
r.Get("/admin/podesavanja/servis", h.PodesavanjaServis)
|
||||
r.Get("/admin/podesavanja/fiskalizacija", h.PodesavanjaFiskalizacija)
|
||||
r.Get("/podesavanja/fiskalizacija/test", h.TestFiskalizacije)
|
||||
r.Get("/podesavanja/fiskalizacija/be-status", h.BeStatus)
|
||||
r.Post("/podesavanja/fiskalizacija/be-reset-audit", h.BeResetAudit)
|
||||
r.With(ntechmw.RequireDozvola(h.DozvoleRepo.ImaDozvolu, "fiskal.pazar")).Get("/fiskal/pazar", h.FiskalniPazar)
|
||||
r.With(doz("fiskal.pazar")).Post("/fiskal/pazar/izvestaj", h.FiskalniIzvestaj)
|
||||
r.With(doz("fiskal.zakljucenje")).Post("/fiskal/pazar/zakljuci", h.ZakljuciFiskalniDan)
|
||||
r.Get("/admin/podesavanja/kalkulacija-pdv", h.PdvStope)
|
||||
pregledPodesavanja := ntechmw.RequireDozvola(h.DozvoleRepo.ImaDozvolu, "podesavanja.pregled")
|
||||
r.With(pregledPodesavanja).Get("/admin/podesavanja/opste", h.PodesavanjaOpste)
|
||||
r.With(pregledPodesavanja).Get("/admin/podesavanja/izgled", h.PodesavanjaIzgled)
|
||||
r.With(pregledPodesavanja).Get("/admin/podesavanja/sistem", h.PodesavanjaSistem)
|
||||
r.With(pregledPodesavanja).Get("/admin/podesavanja/servis", h.PodesavanjaServis)
|
||||
r.With(pregledPodesavanja).Get("/admin/podesavanja/fiskalizacija", h.PodesavanjaFiskalizacija)
|
||||
r.With(pregledPodesavanja).Get("/podesavanja/fiskalizacija/test", h.TestFiskalizacije)
|
||||
r.With(pregledPodesavanja).Get("/podesavanja/fiskalizacija/be-status", h.BeStatus)
|
||||
r.With(doz("podesavanja.izmeni")).Post("/podesavanja/fiskalizacija/be-reset-audit", h.BeResetAudit)
|
||||
r.With(modul("fiskalizacija"), ntechmw.RequireDozvola(h.DozvoleRepo.ImaDozvolu, "fiskal.pazar")).Get("/fiskal/pazar", h.FiskalniPazar)
|
||||
r.With(modul("fiskalizacija"), doz("fiskal.pazar")).Post("/fiskal/pazar/izvestaj", h.FiskalniIzvestaj)
|
||||
r.With(modul("fiskalizacija"), doz("fiskal.zakljucenje")).Post("/fiskal/pazar/zakljuci", h.ZakljuciFiskalniDan)
|
||||
r.With(pregledPodesavanja).Get("/admin/podesavanja/kalkulacija-pdv", h.PdvStope)
|
||||
r.With(doz("podesavanja.izmeni")).Post("/podesavanja/pdv-stope/dodaj", h.DodajPdvStopu)
|
||||
r.With(doz("podesavanja.izmeni")).Post("/podesavanja/pdv-stope/{id}/izmeni", h.IzmeniPdvStopu)
|
||||
r.With(doz("podesavanja.izmeni")).Post("/podesavanja/pdv-stope/{id}/aktivnost", h.PromeniAktivnostPdvStope)
|
||||
|
||||
Reference in New Issue
Block a user