dal-license-server/docs/SPEC.md
djuka dc0114e4b7 Inicijalni commit: kompletna implementacija + dokumentacija + testovi
- 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>
2026-03-04 07:42:25 +00:00

3.3 KiB

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