licence-server/docs/asp-terminia/03-zadaci.md
Nenad Djukic adac321938 Preuzet radni paket ASP-Terminia (licenciranje) iz firmverskog repoa
Paket je nastao u asp-terminia/licence/ ali je sav posao serverski, pa se
seli ovde. Firmverska strana je gotova od FW 0.10.0 i ne dira se.

- docs/asp-terminia/ - 6 dokumenata: postojece stanje servera i FW klijenta,
  tacan API ugovor koji firmware ocekuje, zadaci Z1-Z6 sa kriterijumima
  prihvatanja, pravila rada na produkciji, enforcement pitanja E1-E6
- reference prepravljene: "ASP repo" = https://git.terminia.net/djuka/asp-terminia
  (ranije su pokazivale na lokalnu putanju D:\priv\... koja vise ne postoji)
- CLAUDE.md: sekcija o cetvrtom proizvodu + pokazivac na paket

ASP-Terminia se od ESIR/ARV/LIGHT_TICKET razlikuje po tome sto je
machine_fingerprint MAC cipa (eFuse), a uredjaj radi offline - mrezna
greska ne sme da ga obori.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-07-24 21:44:20 +02:00

4.9 KiB
Raw Blame History

Zadaci (redom; svaki ima kriterijum prihvatanja)

Redosled je namerno ovakav: prvo ono što odblokira kraj-do-kraja test sa pravim uređajem, pa infrastruktura (domen), pa odluke, pa katalog firmvera. Pre svakog write-a na produkciju: backup + izričita dozvola vlasnika (vidi 04-pravila-rada.md).

Z1 — Proizvod „ASP-Terminia" na serveru

Šta: kroz migraciju (SQL u migrations/, po uzoru na 002_seed_products.sql) ili admin API/dashboard napraviti proizvod:

  • code/name: ASP-Terminia (linija: ASP — Autonomni Sistem Prolaza)
  • key_prefix: ASP-
  • limiti (predlog, potvrditi sa vlasnikom): max_citaca (npr. basic 2 / pro 8), max_kartica (basic 2000 / pro 30000)
  • features (predlog bitova, uskladiti sa ASP repo docs/18 §6.3): provera karte, izdavanje, štampa, katalog-sa-servera, anti-passback, sync, OTA

Kako: pogledati kako su postojeći proizvodi definisani (tabela products + seed migracija) i uraditi ISTIM šablonom. Ne menjati postojeće redove.

Prihvatanje: proizvod vidljiv u dashboardu; postojeći proizvodi netaknuti (COUNT pre = posle za njihove licence/aktivacije); backup fajl postoji.

Z2 — Test ključ + kraj-do-kraja aktivacija sa uređajem

Šta: izdati 1 test licencu ASP-Terminia (trajnu ili 90 dana) i proći ceo tok sa PRAVIM uređajem (MAC 1C:DB:D4:A6:A4:60, dostupan vlasniku):

  1. Odgovoriti na P1P4 iz 02-api-ugovor-firmware.md (čitanjem Go koda).
  2. Ako se fingerprint formula razlikuje od FW pretpostavke → zapisati TAČNU formulu u 02 i javiti (menja se FW, jedna linija).
  3. Vlasnik unese ključ u SPA (Podešavanja → Uređaj → Licenca) → Aktiviraj.
  4. Proveriti: status „važi" na uređaju; restart uređaja → i dalje „važi" (offline); Proveri na serveru → potvrda.
  5. Negativni testovi: pogrešan ključ (INVALID_KEY prikazan), opozvan ključ (revoked prikazan), ključ aktiviran na drugom fingerprint-u (PRODUCT/ALREADY ponašanje po P2).

Prihvatanje: svih 5 koraka dokumentovano (šta je poslato/vraćeno, bez tajni).

Z3 — Domen licenca.terminia.net + Let's Encrypt

Preduslov: vlasnik kupi/podesi terminia.net (A rekord → 157.180.119.151). Dok toga nema, zadatak stoji — NE blokira Z1/Z2 (ide se preko IP-a).

Šta:

  • nginx: novi server_name licenca.terminia.net blok koji proksira ISTI backend (port 8090) — ne dirati postojeći arv sajt (postojeći klijenti ostaju na IP).
  • certbot (Let's Encrypt) za taj domen; auto-obnova.
  • Provera da https://licenca.terminia.net/api/v1/validate radi sa validnim lancem.
  • U firmware repou: cfg.licUrl podrazumevana vrednost se menja na domen, a setInsecure() se zamenjuje validacijom lanca (ugraditi ISRG root CA) — to je FW izmena: pripremiti tačan diff/uputstvo, primenu radi firmware strana.

Prihvatanje: domen služi API sa validnim certom; stari IP pristup i dalje radi.

Z4 — Odluke o enforcement-u (PRIPREMA, vlasnik odlučuje)

Šta: pripremiti kratak dokument sa predlogom (na bazi ASP repo docs/18 §5) i KONKRETNIM pitanjima za vlasnika:

  1. Bez licence: potpuno odbijanje ILI ograničen rad (predlog: web/konfiguracija/ručno upravljanje rade; izdavanje+štampa+provera karata ne rade uz jasnu poruku)?
  2. Grejs: 14 dana posle isteka (podesivo)?
  3. Nepouzdan sat = grejs (nikad pad) — potvrda?
  4. Koje funkcije vezati za features bite, koje za limits?

Prihvatanje: dokument 05-enforcement-odluke.md u ovom folderu sa odgovorima vlasnika upisanim (ne pretpostavkama). Implementacija enforcement-a u FW ide TEK posle toga (firmware strana).

Z5 — Obnova/opoziv tok (sloj B)

Šta: definisati i (posle Z4) implementirati periodičnu proveru na uređaju: validate na N sati (podesivo), revoked → od kad važi ograničenje (posle grejsa), server može vratiti NOVU licencu (produženje) — proveriti da li postojeći server to podržava kroz activate re-poziv ili treba dorada (check endpoint po ASP repo docs/18 §4).

Prihvatanje: opisan tačan tok + potvrđeno na test ključu (produženje + opoziv).

Z6 — Potpisivanje firmvera + veza sa katalogom

Šta: .bin slike se potpisuju RSA lancem (ODVOJEN ključ od licenci — preporuka ASP repo docs/18 §7.1; ako vlasnik odluči isti, dokumentovati). Server strana: skripta za potpis + čuvanje potpisa uz artefakt. Katalog (nginx fw.terminia.net) i kratkotrajni download URL su u paketu ASP repo: serviseri/03 — ovde samo potpisni deo.

Prihvatanje: komanda za potpis + format potpisa dokumentovan + probni potpisan .bin verifikovan javnim ključem.


Redosled i zavisnosti (sažetak)

Z1 (proizvod) ──► Z2 (kraj-do-kraja) ──► Z4 (odluke) ──► [FW enforcement — firmware strana]
                                    └──► Z5 (obnova/opoziv)
Z3 (domen)  — čim vlasnik obezbedi DNS (nezavisno)
Z6 (potpis .bin) — pre auto-OTA kataloga (koordinacija sa ASP repo: serviseri/)