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>
103 lines
4.9 KiB
Markdown
103 lines
4.9 KiB
Markdown
# 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 P1–P4 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/)
|
||
```
|