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

103 lines
4.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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/)
```