licence-server/docs/asp-terminia
Nenad Djukic 3d7b12db70 Z2 priprema: odgovoreni P1, P2, P4 iz Go koda + dva nalaza
P1 - formule NEMA: server ne racuna fingerprint, poredi ga kao obican
string. Postojeci FW oblik sha256:<hex MAC-a> radi bez izmene na obe
strane. Pitanje je bilo bespredmetno.

P2 - isti uredjaj SME ponovo: isti fingerprint -> osvezi last_seen i
ponovo vrati potpisanu licencu (re-aktivacija posle brisanja NVS/fabrickog
reseta prolazi). Drugi fingerprint -> ALREADY_ACTIVATED. Tacno ono sto
teren trazi, nista se ne menja.

P4 - expires_at je RFC3339; trajna licenca = prazan string. Poredjenje
prvih 10 znakova u FW radi.

NALAZ 1 (provera sumnje): potpis JE stabilan. Server potpise licenseJSON pa
ga PONOVO serijalizuje u odgovor - da se bajtovi razlikuju, potpis ne bi
vazio na uredjaju. Ne razlikuju se: oba puta isti tip model.LicenseData,
Go encoding/json je determinististican, limits/features su json.RawMessage
pa prolaze doslovno.

NALAZ 2 (ne blokira, kvari prikaz): FW cita 'edition' i 'customer' kao
stringove, a server nema 'edition' (ima license_type) i salje 'customer'
kao OBJEKAT {name,email}. pure::jsonStr naidje na '{' umesto '"' i vrati
false -> oba polja ostanu prazna u SPA. Aktivacija/potpis/rok rade normalno.
Preporuka: menjati FW (citati license_type i customer.name), ne server -
server vec opsluzuje zive klijente ESIR/ARV/LIGHT_TICKET.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-07-25 10:47:41 +02:00
..
01-postojece-stanje.md Preimenovanje: dal-license-server -> licence-server (+ debrendiranje) 2026-07-25 07:55:26 +02:00
02-api-ugovor-firmware.md Z2 priprema: odgovoreni P1, P2, P4 iz Go koda + dva nalaza 2026-07-25 10:47:41 +02:00
03-zadaci.md Preuzet radni paket ASP-Terminia (licenciranje) iz firmverskog repoa 2026-07-24 21:44:20 +02:00
04-pravila-rada.md Preuzet radni paket ASP-Terminia (licenciranje) iz firmverskog repoa 2026-07-24 21:44:20 +02:00
05-enforcement-odluke.md Preuzet radni paket ASP-Terminia (licenciranje) iz firmverskog repoa 2026-07-24 21:44:20 +02:00
README.md Preimenovanje: dal-license-server -> licence-server (+ debrendiranje) 2026-07-25 07:55:26 +02:00

ASP-Terminia — licenciranje (radni paket)

Misija: dovesti licenciranje ASPTerminia terminala do produkcije na postojećem licence-server-u (server 151), bez lomljenja ijednog postojećeg klijenta (ESIR/ARV/LIGHT_TICKET su ŽIVI u produkciji).

Jezik projekta: srpski (ekavica), latinica. Kod/komentari na serveru su Go — komentari srpski ASCII.

Poreklo: paket je nastao u firmverskom repou (asp-terminia/licence/) i prebačen ovde 2026-07-24, jer je sav posao serverski. Firmverska strana je gotova i ne dira se. „ASP repo" u tekstu znači https://git.terminia.net/djuka/asp-terminia.

Sadržaj foldera

Fajl Šta je unutra
01-postojece-stanje.md šta VEĆ postoji: server (Go/MySQL/nginx/kripto) i firmware klijent (gotov!)
02-api-ugovor-firmware.md tačan ugovor koji firmware očekuje — polja, potpis, greške
03-zadaci.md šta treba uraditi, redom, sa kriterijumima prihvatanja
04-pravila-rada.md OBAVEZNO pročitati prvo — produkcija, backup, tajne, granice
05-enforcement-odluke.md pitanja E1E6 za vlasnika: šta uređaj radi bez licence

Kontekst u 5 redova

  1. Šta se licencira: ESP32S3 terminal za kontrolu prolaza (bazeni/spa), proizvod „ASPTerminia" (Autonomni Sistem Prolaza). Licenca je vezana za MAC čipa (eFuse, nepromenljiv) preko machine_fingerprint.
  2. Server već postoji: licence-server (Go, MySQL, RSA2048/SHA256) na 157.180.119.151, u produkciji sa 3 proizvoda / ~140 licenci / ~19 aktivacija.
  3. Firmware klijent je GOTOV (modul licenca.h/.cpp u firmveru, od verzije 0.10.0): aktivacija, offline verifikacija potpisa javnim ključem, UI. Čeka samo proizvod i ključ na serveru.
  4. Dva sloja: potpisana lokalna licenca (radi offline) + serverska provera/obnova (opoziv). Mrežna greška NIKAD ne obara uređaj.
  5. Domeni (kupuje vlasnik): licenca.terminia.net → 157.180.119.151 (Let's Encrypt). Dok domena nema, uređaj radi preko IPa sa setInsecure() — odluku ionako štiti RSA potpis, ne TLS kanal.

Šta agent NE radi

  • Ne donosi odluku o ponašanju uređaja bez licence (gašenje funkcija) — to je odluka vlasnika (pitanja u 03-zadaci.md §Z4). Priprema se predlog, čeka se DA.
  • Ne dira postojeće proizvode (ESIR, ARV, LIGHT_TICKET) niti terminia SaaS (portovi 8091/8092 na istom serveru — TO NIJE OVAJ POSAO).
  • Ne čita niti loguje tajne (.env, privatni ključ) — vidi 04-pravila-rada.md.

Veze ka ostatku projekta

  • Firmware repo (ASP repo): https://git.terminia.net/djuka/asp-terminia (klijent: firmware/10_terminia/licenca.h, licenca.cpp; javni ključ ugrađen). Firmverska strana je GOTOVA od FW 0.10.0 — ovaj paket je ne dira.
  • Dizajn/istorijat: ASP repo docs/18-licenciranje-po-mac.md (pisan PRE nego što je pravi API poznat — gde se razlikuju, ovaj folder je merodavan), ASP repo docs/21-platforma-i-provisioning.md.
  • Serviserska strana (RBAC, uređaji, LoggerService): ASP repo: serviseri/ — isti backend, drugi radni paket; koordinacija preko šeme baze (vidi tamo 01). (Taj paket se seli u ovaj repo posebno — vidi dogovor od 2026-07-24.)
  • Serverski kod i konvencije: ../../CLAUDE.md, ../ARCHITECTURE.md, ../../API.md.