# 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*