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.
This commit is contained in:
@@ -149,7 +149,12 @@ func RequireDozvolaMut(proveri func(ctx context.Context, uloga, akcija string) b
|
||||
}
|
||||
}
|
||||
|
||||
// postaviFlashGresku upisuje jednokratnu poruku o grešci u kolačić
|
||||
// postaviFlashGresku upisuje jednokratnu poruku o grešci u kolačić. Namerno
|
||||
// odvojen mehanizam od SetFlash/GetFlash (flash.go): ove funkcije se pozivaju
|
||||
// iz middleware-a koji nema pristup *sql.DB, a redirect je uvek na /dashboard
|
||||
// (jedino mesto koje čita ovaj kolačić) — pa kolačić bez DB upisa dovoljan.
|
||||
// SetFlash/GetFlash (kolona sesije.flash) koristi se u handlerima koji imaju
|
||||
// DB i redirect na proizvoljnu stranicu.
|
||||
func postaviFlashGresku(w http.ResponseWriter, poruka string) {
|
||||
http.SetCookie(w, &http.Cookie{
|
||||
Name: "ntech_flash_greska",
|
||||
|
||||
@@ -3,6 +3,7 @@ package middleware
|
||||
import (
|
||||
"database/sql"
|
||||
"encoding/json"
|
||||
"log/slog"
|
||||
"net/http"
|
||||
|
||||
"ntech/internal/model"
|
||||
@@ -18,9 +19,11 @@ func SetFlash(w http.ResponseWriter, r *http.Request, db *sql.DB, tip, poruka st
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
db.ExecContext(r.Context(),
|
||||
if _, err := db.ExecContext(r.Context(),
|
||||
`UPDATE sesije SET flash = ? WHERE token = ?`,
|
||||
string(data), kolacic.Value)
|
||||
string(data), kolacic.Value); err != nil {
|
||||
slog.Error("SetFlash: upis nije uspeo", "error", err)
|
||||
}
|
||||
}
|
||||
|
||||
// GetFlash čita i atomično briše flash poruku iz aktivne sesije
|
||||
|
||||
Reference in New Issue
Block a user