- Kompletna Go implementacija licencnog servera (19 Go fajlova) - Klijentski API: activate, deactivate, validate - Admin API: CRUD licence, stats, audit log - Admin dashboard: htmx + Go templates - RSA-2048 potpisivanje licencnih podataka - Rate limiting i API key autentifikacija - MySQL migracije i seed podaci (ESIR, ARV, LIGHT_TICKET) - Unit testovi: keygen, crypto, model, middleware (24 testa) - Dokumentacija: SPEC.md, ARCHITECTURE.md, SETUP.md, API.md, TESTING.md, README.md Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
3.4 KiB
3.4 KiB
DAL License Server — Test Checklista
Health
- GET /api/v1/health vraca {"status":"ok"}
Proizvodi
- GET /api/v1/admin/products vraca 3 proizvoda (ESIR, ARV, LIGHT_TICKET)
Kreiranje licence
- Kreiranje ESIR licence sa svim poljima
- Kreiranje ARV licence sa svim poljima
- Kreiranje LIGHT_TICKET licence sa svim poljima
- Kreiranje bez customer_name → error
- Kreiranje sa nepostojecim proizvodom → error
- Generisani kljuc ima pravilan prefix (ESIR-, ARV-, LT-)
- Generisani kljuc ima format XXXX-XXXX-XXXX-XXXX
Lista licenci
- GET /api/v1/admin/licenses vraca sve licence
- Filter po proizvodu radi ispravno
Detalji licence
- GET /api/v1/admin/licenses/{id} vraca sve podatke
- Nepostojeci ID → 404
Aktivacija
- Aktivacija sa validnim kljucem i fingerprint-om → 200 + potpis
- Response sadrzi RSA-SHA256 potpis
- Response sadrzi sve licencne podatke (limits, features, customer)
- Ponovna aktivacija istog fingerprint-a → 200 (isti racunar)
- Aktivacija sa drugog racunara (drugi fingerprint) → ALREADY_ACTIVATED error
- Aktivacija sa nepostojecim kljucem → INVALID_KEY error
- Aktivacija opozvane licence → KEY_REVOKED error
Deaktivacija
- Deaktivacija aktivne licence → 200
- Deaktivacija vec deaktivirane → error
- Deaktivacija sa pogresnim fingerprint-om → error
Ponovna aktivacija
- Posle deaktivacije, aktivacija sa novim fingerprint-om → 200
Online validacija
- Validacija aktivne licence → valid: true
- Validacija opozvane licence → valid: false / revoked: true
- Validacija sa pogresnim fingerprint-om → error
- Validacija nepostojeceg kljuca → error
Opozivanje (Revoke)
- Revoke licence → uspesno
- Revoke vec opozvane → error
- Posle revoke-a, aktivacija odbija → KEY_REVOKED
Force Release
- Release aktivacije → uspesno
- Posle release-a, aktivacija sa novog racunara → 200
API Key autentifikacija
- Admin endpoint bez X-API-Key → 401
- Admin endpoint sa pogresnim kljucem → 401
- Admin endpoint sa validnim kljucem → 200
Rate limiting
- Vise od 10 activate zahteva u minuti → 429
- Vise od 60 validate zahteva u minuti → 429
Statistike
- GET /api/v1/admin/stats vraca podatke po proizvodima
- Brojevi se azuriraju nakon kreiranja/aktiviranja licence
Audit log
- GET /api/v1/admin/audit vraca log
- Aktivacija se loguje
- Deaktivacija se loguje
- Revoke se loguje
- Kreiranje licence se loguje
- Force release se loguje
Dashboard — Login
- GET /login prikazuje login formu
- Login sa ispravnom lozinkom → redirect na /dashboard
- Login sa pogresnom lozinkom → error
- Pristup /dashboard bez logina → redirect na /login
Dashboard — Stranice
- /dashboard prikazuje statistike po proizvodu
- /licenses prikazuje tabelu licenci
- /licenses?product=ESIR filtrira po proizvodu
- /licenses/new prikazuje formu za novu licencu
- POST /licenses kreira licencu i prikazuje detalje
- /licenses/{id} prikazuje detalje licence sa aktivacijama
- /audit prikazuje audit log
Dashboard — Akcije
- Revoke iz dashboard-a → uspesno, prikazuje poruku
- Force release iz dashboard-a → uspesno
Bezbednost
- .env nije u git-u
- crypto/private.pem nije u git-u
- Licencni kljuc je maskiran u logovima
Poslednje azuriranje: mart 2026