Ispravke — bezbednost, CSS teme, handleri, sidebar, servis forma

This commit is contained in:
2026-06-03 23:13:15 +02:00
parent f5b6b0c7ee
commit 4b7ed36473
19 changed files with 352 additions and 519 deletions
+48 -36
View File
@@ -1,6 +1,6 @@
# NTech
![Go Version](https://img.shields.io/badge/go-1.26-blue)
![Go Version](https://img.shields.io/badge/go-1.24-blue)
![License](https://img.shields.io/badge/license-MIT-green)
Poslovna aplikacija za upravljanje servisom računara, magacinom delova i prodajom. Napravljena u Go-u, radi u brauzeru, ne zahteva internet vezu ni eksterne servise.
@@ -23,22 +23,27 @@ Cilj je jednostavan: sve što servis treba da prati nalazi se na jednom mestu, b
- Inicijalno podešavanje pri prvom pokretanju (setup wizard)
- Sistem migracija baze podataka
- Osnovna struktura baze: artikli, kategorije, klijenti, dobavljači, servisni nalozi, prodajni nalozi, podsetnici
### U razvoju
- Korisničko sučelje — sidebar navigacija, sistem tema, dashboard
- Magacin — praćenje stanja delova, lokacija, količina
- Servisni nalozi — prijem, dijagnostika, statusna traka, cene
- Prodajni nalozi — stavke, obračun, evidencija kupaca
- Klijenti i dobavljači — baza kontakata, istorija
- Korisnički interfejs — sidebar navigacija, sistem tema (tamna/svetla), dashboard sa statistikama
- Prijava korisnika — sesije na serveru, zaključavanje naloga
- Dvofaktorska autentifikacija (TOTP) — aktivacija sa QR kodom, rezervni kodovi
- Bruteforce zaštita — IP zaključavanje nakon 5 neuspelih pokušaja u 15 minuta
- CSRF zaštita — double-submit cookie pattern, automatska injekcija tokena u sve forme
- Bezbednosni HTTP headeri (CSP, X-Frame-Options, Referrer-Policy, nosniff...)
- Evidencija pokušaja prijave — istorija po korisniku, IP, razlog, datum
- Korisnici i uloge — admin panel, upravljanje korisnicima
- Magacin — artikli, kategorije, filtriranje, kritični nivoi zaliha
- Servisni nalozi — prijem, statusna traka, troškovi, priznanica
- Prodajni nalozi — stavke, obračun, priznanica sa podacima firme i klijenta
- Nabavke — evidencija nabavki od dobavljača
- Klijenti i dobavljači — baza kontakata
- Podsetnici — evidencija sa rokom
- Izveštaji — pregled prihoda, stanje magacina
- Podešavanja — naziv, adresa, PIB, logo firme; promena teme
### Planirano
- Prijava korisnika — sesije, zaključavanje naloga
- Dvofaktorska autentifikacija (TOTP)
- Izveštaji — prodaja, stanje magacina, prihodi
- Podrška za PostgreSQL (za višekorisničko okruženje)
- WebAuthn / Passkey prijava (šema baze je pripremljena)
- Obaveštenja (e-pošta / WhatsApp) — odloženo za kasniju fazu
- Skeniranje barkodova putem kamere — odloženo za kasniju fazu
@@ -46,16 +51,14 @@ Cilj je jednostavan: sve što servis treba da prati nalazi se na jednom mestu, b
## Tehnologije
| Tehnologija | Uloga |
| ------------------------------------------------------------------------------------ | -------------------------------- |
| [Go](https://go.dev) | backend jezik |
| [chi](https://github.com/go-chi/chi) | HTTP ruter |
| [html/template](https://pkg.go.dev/html/template) | serverski šabloni |
| [HTMX](https://htmx.org) | interaktivnost bez build procesa |
| [TailwindCSS](https://tailwindcss.com) | stilizovanje |
| [Alpine.js](https://alpinejs.dev) | UI logika na strani klijenta |
| [SQLite](https://sqlite.org) + [modernc.org/sqlite](https://gitlab.com/cznic/sqlite) | glavna baza (čisti Go, bez CGO) |
| [PostgreSQL](https://www.postgresql.org) + [pgx/v5](https://github.com/jackc/pgx) | opciona baza za produkciju |
| Tehnologija | Uloga |
| ------------------------------------------------------------------------------------ | ------------------------------- |
| [Go](https://go.dev) | backend jezik |
| [chi](https://github.com/go-chi/chi) | HTTP ruter |
| [html/template](https://pkg.go.dev/html/template) | serverski šabloni |
| [Alpine.js](https://alpinejs.dev) | UI logika na strani klijenta |
| [SQLite](https://sqlite.org) + [modernc.org/sqlite](https://gitlab.com/cznic/sqlite) | glavna baza (čisti Go, bez CGO) |
| [PostgreSQL](https://www.postgresql.org) + [pgx/v5](https://github.com/jackc/pgx) | opciona baza za produkciju |
---
@@ -73,22 +76,29 @@ Cilj je jednostavan: sve što servis treba da prati nalazi se na jednom mestu, b
git clone <url-repozitorijuma>
cd GoNtech
# 2. Kopiranje i popunjavanje .env fajla
cp .env.example .env
# Otvori .env i postavi vrednosti (videti tabelu ispod)
# 2. Kopiranje konfiguracionog fajla
cp ntech.env.example ntech.env
# Otvori ntech.env i postavi vrednosti (videti tabelu ispod)
# 3. Pokretanje u razvojnom okruženju
# 3. Učitavanje promenljivih i pokretanje u razvojnom okruženju
export $(grep -v '^#' ntech.env | xargs)
go run ./cmd/ntech
```
Program se otvara na `http://localhost:8080`.
Program se otvara na `http://localhost:8080` (ili na portu definisanom u `ntech.env`).
Pri prvom pokretanju automatski se pokreće setup wizard.
### Produkcioni build
```bash
CGO_ENABLED=0 go build -o ntech ./cmd/ntech
# Pomoću build.sh skripte (prima opcioni argument verzije)
./build.sh 1.0.0
# Ili ručno
CGO_ENABLED=0 GOARCH=amd64 GOOS=linux go build \
-ldflags "-X main.Verzija=1.0.0 -s -w" \
-o ntech ./cmd/ntech
./ntech
```
@@ -98,7 +108,7 @@ Rezultat je jedan statički binarni fajl bez zavisnosti.
## Promenljive okruženja
Kopirati `.env.example` u `.env` i popuniti vrednosti. Fajl `.env` se **ne commituje** u Git.
Kopirati `ntech.env.example` u `ntech.env` i popuniti vrednosti. Fajl `ntech.env` se **ne commituje** u Git.
| Promenljiva | Podrazumevano | Opis |
| -------------- | ------------- | -------------------------------------------- |
@@ -118,19 +128,21 @@ ntech/
├── cmd/
│ └── ntech/ # ulazna tačka programa
├── internal/
│ ├── auth/ # prijava, sesije, 2FA
│ ├── auth/ # prijava, sesije, fail2ban log
│ ├── config/ # podešavanja, setup wizard
│ ├── db/ # sloj baze podataka
│ │ ── sqlite/ # SQLite implementacija
│ │ └── postgres/ # PostgreSQL implementacija
│ │ ── sqlite/ # SQLite implementacija
│ ├── handler/ # HTTP handleri
│ ├── middleware/ # autentifikacija, logovanje, ograničavanje zahteva
│ ├── middleware/ # CSRF, bezbednost headeri, autentifikacija
│ └── model/ # zajednički tipovi podataka
├── web/
│ ├── static/ # CSS, JavaScript, slike
│ ├── static/ # CSS, JavaScript, slike, logotipi
│ └── templates/ # HTML šabloni
├── migrations/ # SQL migracije (001_opis.sql, 002_opis.sql, ...)
├── .env.example # primer konfiguracije
├── logs/ # auth.log i ostali logovi
├── backups/ # rezervne kopije baze
├── build.sh # skripta za produkcioni build
├── ntech.env # lokalna konfiguracija (ne commituje se)
├── go.mod
└── go.sum
```