Commit Graph
17 Commits
Author SHA1 Message Date
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 53d9ada97b Ispravljen prikaz fontova na Chart.js grafikonu u Chromium browserima (Opera, Chrome, Edge)
Problem: u Operi i Chrome-u na Chart.js grafikonu (Izveštaji) stubići
se vide, ali slova i brojevi ne. U Firefoxu sve radi ispravno.
Uzrok 1 — CSP font-src 'self' (internal/middleware/bezbednost.go):
Chromium primenjuje CSP font-src direktivu i na canvas.fillText(),
blokirajući sistemske fontove jer nisu sa 'self' origina.
Firefox ovu proveru ne radi.
Uzrok 2 — nedostaje font family u Chart.js konfiguraciji:
Canvas na Linuxu ne ume sam da pronađe font sa ćiriličnim slovima
(Helvetica/Arial ih često nemaju za canvas iako ih imaju u DOM-u).
Rešenje:
- Uklonjena font-src direktiva iz CSP-a
- Dodat family: 'DejaVu Sans, Ubuntu, system-ui, sans-serif' na
legendu, x-osu i y-osu Chart.js grafikona
2026-06-09 22:15:44 +02:00
Dasko eb506ce519 Lokalizovane frontend biblioteke i popravljen prikaz u Opera/Chromium
Uklonjena zavisnost od spoljnih CDN-ova koja je u Operi prouzrokovala
nestanak stilova i elemenata kada blocker/ekstenzija blokira CDN:
- Tailwind (cdn.tailwindcss.com) potpuno izbačen; 9 korišćenih klasa
(grid, grid-cols-*, md:grid-cols-*, gap-*, mb-6) prebačeno u main.css
- HTMX i Chart.js skinuti lokalno u web/static/js/ i serviraju se
preko go:embed umesto sa jsdelivr CDN-a
- CSP očišćen u bezbednost.go — uklonjeni svi spoljni izvori, ostaje 'self'
Popravljen grafikon na stranici Izveštaji: dodato color-scheme:only light
na canvas i wrapper, jer Operin "tamni režim za web" (force-dark) zatamni
canvas i učini tekst na osama nevidljivim.
2026-06-09 02:32:24 +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 eb389dedf9 Magacin premeštanje, backup podešavanja, čišćenje RBAC sistema
Magacin:
- Dodato premeštanje artikla u drugu kategoriju (dugme + nativni
<details> meni, bez JS-a; radi na desktopu i mobilnom)
- Endpoint POST /magacin/premesti/{id} uz proveru dozvole artikal.premesti
Backup:
- Nova podešavanja: interval automatskog backupa i broj kopija (rotacija)
- Periodični backup uz onaj pri pokretanju; interval se čita iz baze
- Migracija 037_backup_podesavanja.sql
Dozvole (RBAC):
- Dodate kartice koje su nedostajale (dashboard.prihod, prodaja.storno,
podesavanja.login_pozadina, tema.lokalno) — popravljen i bug gde su se
gasile pri svakom čuvanju matrice
- Aktivirana kontrola pregleda za prodaju, servis, klijente i dobavljače
(provera u handlerima + skrivanje iz sidebara)
- Uklonjene mrtve/obmanjujuće dozvole iz matrice i sveAkcije (korisnici,
podsetnici, artikal.pregled, kategorija.izmeni, tema.globalno,
podesavanja.app_pozadina); sveAkcije 47 -> 34
- Čišćenje zastarelih redova (siročića) u tabeli dozvola pri startu
Ostalo:
- Statički fajlovi: embed celog web/static i ispravan MIME za .js/.css
- Keš šablona: dodat admin_dozvole (stranica Dozvole se nije otvarala)
- Sidebar accordion: radi i skupljen i proširen, međusobno isključiv
2026-06-09 00:55:15 +02:00
Dasko be74b22508 Premešten responsive CSS u main.css zbog HTMX navigacije
- Premešten sav responsive CSS (display: none za kartice, @media pravila)
iz {{define "dodatni-css"}} blokova u globalni main.css
- Pogođene stranice: nabavke, dobavljači, klijenti, magacin, servis,
prodaja, podsetnici, nabavka forma/detalji, servis forma, podešavanja
- Razlog: HTMX pri navigaciji menja samo <main> sadržaj, <head> ostaje —
page-specifičan CSS iz dodatni-css nije bio aktivan nakon navigacije
2026-06-07 22:41:09 +02:00
Dasko ef3a323203 Bezbednosni audit i refaktoring: HP popravke, RBAC, flash poruke, go:embed, CSP 2026-06-07 22:41:09 +02:00
Dasko 52a6e1df1b Bezbednost: rešeno 7 kritičnih nalaza (HP-01 do HP-07) 2026-06-07 22:41:09 +02:00
Dasko 1b2d701b7c Izmena u radu tema 2026-06-06 17:47:52 +02:00
Dasko d90ba424b5 Podešavanja: pozadinska slika i glass efekt za aplikaciju sa live preview sliderom 2026-06-05 23:49:05 +02:00
Dasko 6516bda88d Flash poruke: toast notifikacije umesto ?greska= i ?sacuvano= u URL-u 2026-06-05 23:15:49 +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 e48354ed7a Ispravke — bezbednost, CSS teme, handleri, sidebar, servis forma 2026-06-03 23:13:15 +02:00
Dasko 5ca85f9b50 Bezbednost — security headers, fail2ban logovanje, bruteforce zaštita, CSRF zaštita 2026-06-03 21:38:16 +02:00
Dasko e9933eaf3e Ispravka QR koda za 2FA — generisanje na serveru kao base64 PNG 2026-06-02 22:29:53 +02:00