# DAL License Server — Specifikacija ## Cilj Univerzalni licencni server koji zamenjuje stari `esir-license-server` i podržava sve DAL proizvode: ESIR, ARV, Light-Ticket, i buduće aplikacije. ## Principi - **Jedan server, svi proizvodi** — License Server opslužuje N proizvoda sa jednog mesta - **RSA potpisivanje** — Server ima private key, klijenti imaju public key ugrađen u binary - **Offline rad** — Klijentske aplikacije rade offline sa lokalnim `license.enc` fajlom - **Audit sve** — Svaka akcija (aktivacija, deaktivacija, revoke) se loguje ## Proizvodi | Proizvod | Prefix | Default limiti | |----------|--------|----------------| | ESIR Fiskalizacija | `ESIR-` | max_installations: 1 | | ARV Evidencija RV | `ARV-` | max_employees: 50, max_readers: 4 | | Light-Ticket | `LT-` | max_operators: 3 | ## Tipovi licenci | Tip | Trajanje | Opis | |-----|----------|------| | TRIAL | 30 dana | Besplatno testiranje, bez obnove | | MONTHLY | 30 dana | Mesecna pretplata | | ANNUAL | 365 dana | Godisnja licenca | | PERPETUAL | Bez isteka | Kupljena zauvek (expires_at = NULL) | ### Grace period - Default: 30 dana posle isteka licence - Konfigurisano per licenca (`grace_days` kolona) - Tokom grace perioda: pun rad + upozorenje u klijentskoj aplikaciji - Posle grace perioda: read-only rezim (GET dozvoljen, POST/PUT/DELETE blokiran) ## Licencni kljuc — format ``` {PREFIX}-XXXX-XXXX-XXXX-XXXX Primeri: ESIR-K7M2-9P4N-R3W8-J6T1 ARV-A3B5-C8D2-E7F4-G9H6 LT-M4N8-P2Q6-R5S3-T7U9 ``` - Prefix se cita iz `products.key_prefix` - 4 grupe po 4 alfanumericka karaktera - Karakteri: A-H, J-N, P-Y, 2-9 (bez O/0/I/1 konfuzije) - Generisanje: `crypto/rand` ## Tok — od kupovine do rada ### 1. Admin kreira licencu Admin kroz dashboard bira proizvod, unosi podatke firme, tip licence i limite. Server generise jedinstven kljuc. ### 2. Klijent aktivira Klijentska aplikacija salje serveru: kljuc + machine_fingerprint + app_version + OS. Server proverava validnost, potpisuje licencne podatke RSA private key-em, vraca JSON + RSA potpis. Klijent kreira `license.enc` lokalno. ### 3. Svakodnevni rad (offline) Aplikacija cita `license.enc`, dekriptuje, proverava RSA potpis (public key), proverava fingerprint i rok. Internet nije potreban. ### 4. Opciona online provera Jednom dnevno (ako ima internet), aplikacija proverava da licenca nije revocirana na serveru. ## Light-Ticket paketi | Paket | max_operators | Tip licence | |-------|--------------|-------------| | Starter | 3 | MONTHLY ili PERPETUAL | | Pro | 10 | MONTHLY ili PERPETUAL | | Enterprise | 0 (neograniceno) | MONTHLY ili PERPETUAL | - Admin rucno upisuje `max_operators` prilikom kreiranja licence - Sve features su iste za sve pakete — razlikuje se samo `max_operators` - Tipovi licence za LT: MONTHLY i PERPETUAL (TRIAL i ANNUAL nisu predvidjeni za V1) ## Korisnici sistema 1. **Admin** — Upravlja licencama kroz dashboard ili API 2. **Klijentske aplikacije** — ESIR, ARV, Light-Ticket komuniciraju sa serverom za aktivaciju/validaciju ## Bezbednost - `private.pem` nikad u git-u, permisije 600 - Admin API key minimum 32 karaktera - Rate limiting na activate/validate (zastita od brute force) - Licencni kljuc u logovima maskiran: `LT-K7M2-****-****-J6T1` - HTTPS u produkciji (TLS termination na reverse proxy) --- *Kreirano: mart 2026*