licence-server/docs/SPEC.md
Nenad Djukic 1abe7176ec Preimenovanje: dal-license-server -> licence-server (+ debrendiranje)
Vlasnik izlazi iz DAL price za ovaj projekat - postaje samostalan proizvod.
Preimenovanje je mehanicko (import putanje, imena fajlova/baze/UI naslova),
NIJEDNA linija poslovne logike u internal/handler ili internal/service nije
dirana - go build, go vet i go test ./... prolaze cisto pod novim imenom.

- go.mod: module dal-license-server -> licence-server; 28 import linija u
  13 .go fajlova usaglaseno
- internal/config/config.go (+test): default DB_NAME licence_db
- HTML sabloni (7 stranica) + 7 Playwright e2e spec fajlova: "DAL License
  Server" -> "Licence Server" u title/nav-brand, testovi usaglaseni u istom
  prolazu (nista ne moze da se razdvoji)
- package.json/package-lock.json/.gitignore/.claude/project.json: ime
  projekta/binarnog fajla/work_dir
- Usput: package.json je u repository.url nosio OTVORENU Gitea lozinku u
  cistom tekstu - uklonjena (URL sad bez kredencijala). Lozinka je i dalje
  u staroj git istoriji - preporuka: rotirati je posebno.
- CLAUDE.md/README/API/TESTING/docs/SPEC/ARCHITECTURE/SETUP: naslovi, ASCII
  dijagrami, git clone URL, mysqldump primer, systemd predlozak u SETUP.md
  zamenjen stvarnim (obrazac terminia.service - journal log + graceful
  shutdown, ne stari minimalni predlozak)
- Debrendiranje: "Univerzalni licencni server za sve DAL proizvode" ->
  "za vise proizvoda i klijenata"; potpis "Nenad Djukic / DAL d.o.o." ->
  "Nenad Djukic". NE dirano: nazivi ESIR/ARV/LIGHT_TICKET (tudji proizvodi,
  ne DAL brend), "DAL" kao stvaran naziv org-a u RBAC modelu
  (docs/loggerservice/README.md) - to je podatak, ne branding ovog servera.
- docs/asp-terminia/, docs/loggerservice/: prozni pomeni imena servera

Baza (dal_license_db -> licence_db) i deploy na 151 idu u posebnom koraku,
posle preimenovanja Gitea repoa - vidi CLAUDE.md istorijsku belesku na dnu.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-25 07:55:26 +02:00

3.3 KiB

Licence Server — Specifikacija

Cilj

Univerzalni licencni server koji zamenjuje stari esir-license-server i podržava više proizvoda: 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