S SISL docs EN

Architektura

Cały plugin to dwa procesy które rozmawiają ze sobą po HMAC-podpisanym HTTP. Trzecia strona to serwer licencji na license.sisl.pl który podpisuje odpowiedzi Ed25519.

Topologia

flowchart LR subgraph SHOP["Magento 2.4.x · PHP 8.2/8.3 + MariaDB"] SO["<b>Sisl_Optima</b><br/>moduł Magento<br/>admin · cron · observer"] end subgraph WIN["Windows Server · Comarch ERP Optima"] SS["<b>Sisl.Sync.Service</b><br/>.NET 8 Windows Service"] SQL[("SQL Server<br/>CDN_Firma_*")] SS -- "Trusted_Connection" --> SQL end LIC["<b>license.sisl.pl</b><br/>License Server<br/>Ed25519 signing"] SO <== "HMAC-signed REST<br/>GET /v1/products · /v1/stocks<br/>POST /v1/orders" ==> SS SO -. "HTTPS license verify (24h)" .-> LIC SS -. "HTTPS license verify (24h)" .-> LIC classDef shop fill:#15151b,stroke:#d4ad5a,stroke-width:1px,color:#e5e5ec classDef win fill:#15151b,stroke:#6aa6ff,stroke-width:1px,color:#e5e5ec classDef lic fill:#1c1c24,stroke:#7ad6a8,stroke-width:1.5px,color:#e5e5ec class SHOP shop class WIN win class LIC lic

Komponenty

Sisl_Optima (Magento PHP module)

Plik Odpowiedzialność
Service/ProductSync.php pobiera /v1/products, upsertuje do catalog_product_entity
Service/StockSync.php pobiera /v1/stocks, zapisuje przez StockRegistryInterface
Service/OrderForward.php wysyła zamówienia do /v1/orders przy sales_order_place_after
Service/Diagnostics.php 14 kontroli stanu (licencja, sieć, perms, cron, drift...)
Service/ProductExclusion.php sprawdza atrybut sisl_optima_sync_disabled per produkt
Model/SyncClient.php HTTP klient z HMAC + retry 3x exponential backoff
Model/LicenseChecker.php weryfikacja licencji + 7-dniowy grace offline
Cron/SyncProducts.php cron wrapper (dropdown harmonogramu w admin)
Cron/SyncStock.php jw. dla stanów
Cron/CheckLicense.php codzienny check licencji

Sisl.Sync.Service (.NET 8 ASP.NET Core minimal API)

Plik Odpowiedzialność
Program.cs HTTP endpointy, DI, license gate middleware
Comarch/OptimaSqlClient.cs Dapper queries do CDN.Towary/TwrZasoby/TwrCeny/KntKarty
Comarch/MockComarchClient.cs backend testowy (bez Optimy)
Auth/HmacAuthMiddleware.cs weryfikacja podpisu klienta na każdym /v1/*
Auth/LicenseGuard.cs weryfikacja Ed25519, gate na /v1/* (HTTP 402 jeśli invalid)

Bezpieczeństwo

  1. HMAC-SHA256 na każdym request/response między Magento a Sisl.Sync.Service. Replay protection przez X-SISL-Timestamp z driftem max 300s.
  2. Ed25519 asymetryczne podpisy odpowiedzi serwera licencyjnego. Klucz prywatny tylko na license.sisl.pl. Plugin ma tylko klucz publiczny — nie da się sfałszować "valid:true".
  3. Nonce w request → echo w response → niemożliwy replay starych odpowiedzi.
  4. Manifest hash plików pluginu — serwer rejestruje zmiany, wykrywa cracked instally.
  5. Multi-checkpoint weryfikacja licencji w 5 miejscach (PHP) + 1 (microservice) → zedycja jednego callsite nie wystarczy.

Schemat bazy Comarch Optima (read-only)

Mikrousługa czyta z base tables, nie z CDN.TwrKarty (view który wymaga CDN.RptTemp2):

Tabela Co Filtr
CDN.Towary produkty Twr_GIDTyp = 16 (towar, nie usługa)
CDN.TwrCeny ceny w cennikach TwC_TwCNumer = 1 (cennik detal)
CDN.TwrZasoby rzeczywisty stan z PZ/PW TwZ_TrSIdDost > 0 (tylko dokumentami pokryte)
CDN.TwrIlosci rezerwacje + zamówienia dla Reserved i OnOrder
CDN.Magazyny magazyny filtr po Mag_Symbol
CDN.KntKarty kontrahenci Knt_GIDTyp = 32

Następny krok: Instalacja →