Redirecționare MNotify
Acest conținut nu este încă disponibil în limba selectată.
gNotify poate trimite o copie a fiecărei notificări livrate către platforma guvernamentală de notificări MNotify (interop.gov.md), prin TLS mutual. Best-effort, implicit în mod mock (formează și înregistrează payload-ul, dar nu transmite), complet auditabilă din ecranul Status notificare.
Certificatul este cel eIntegritate (ANI), nu
misda.pfxal GLog. MNotify autentifică clientul cucerts/2026_e-integritate.pfx(aliastest-integritate.ani.pki.gov.md). Certificatul e gitignored și copt în jar.
Cum funcționează
Section titled “Cum funcționează”La DeliveryService.markSent(job), lângă apelul de audit GLog, se declanșează forward-ul:
markSent(job) -> mnotifyClient.forward(job) // @Async, best-effort, nu aruncă niciodatăforward(job) nu face nimic decât dacă toate: (1) gnotify.mnotify.enabled=true; (2) Sistem-ul e găsit după job.systemId(); (3) fie toggle-ul per-Sistem mnotifyEnabled e on, fie notificarea poartă hint-ul forwardMnotify.
Deci un sistem optează global (toggle pe pagina Sisteme) sau un producător optează per notificare (hint-ul forwardMnotify în corpul POST /api/admin/notify). Oricare e suficient.
Payload
Section titled “Payload”buildPayload(job) produce forma MnotifyCreateNotification:
{ "subject": { "ro": "…" }, "body": { "ro": "…" }, "bodyShort": { "ro": "…" }, // body trunchiat la 160 caractere "recipients": [ { "value": "…", "type": "EMAIL" | "IDNP" } ]}Tipul destinatarului e dedus din job.destinatar(): pattern email → EMAIL, 13 cifre → IDNP, altfel EMAIL (MNotify validează server-side).
Vizibilitate & audit
Section titled “Vizibilitate & audit”Fiecare încercare scrie un EvenimentNotificare append-only (actor="mnotify"):
| Tip | Sens |
|---|---|
MNOTIFY_SENT | redirecționat (sau, în mock, format și înregistrat) |
MNOTIFY_FAILED | eșec de transport / HTTP |
payload-ul evenimentului: { mode, endpoint, request, response?, error? }. MNotifyEventRecorder scrie rândul în propria tranzacție pe firul async. Mock înregistrează și el — cu nota „MOCK — payload NU a fost trimis către MNotify”, ideal pentru a verifica exact octeții înainte de go-live. Evenimentele apar în cronologia din Status notificare (caută după trackingId).
Configurare (prefix gnotify.mnotify.*)
Section titled “Configurare (prefix gnotify.mnotify.*)”| Proprietate | Implicit | Sens |
|---|---|---|
enabled | true | comutator general |
mode | mock | mock = doar formează+înregistrează; default = POST mTLS real |
url | https://mnotify.staging.egov.md:8443 | URL de bază |
endpoints.notifications | /api/Notification | endpoint POST |
keystore.path | certs/2026_e-integritate.pfx | identitate client PKCS12 |
keystore.alias | test-integritate.ani.pki.gov.md | alias cheie |
Transport: Apache HttpClient 5, self-signed acceptat (chain.length==1), NoopHostnameVerifier (cert staging nu se potrivește cu host-ul). mTLS construit doar când mode=default.
Go-live
Section titled “Go-live”Setează GNOTIFY_MNOTIFY_MODE=default — construiește RestClient-ul mTLS real și începe să POST-eze; evenimentele MNOTIFY_SENT/FAILED poartă apoi răspunsul HTTP real. Toggle, hint, audit — neschimbate.
Deployat: backend-2.12.0 la https://gnotify.gstack.esempla.systems rulează în mock mode.
Siguranță la regenerare
Section titled “Siguranță la regenerare”service/mnotify/{MNotifyProperties,MNotifyClientConfig,MNotifyClient,MNotifyEventRecorder} + plumbing-ul forwardMnotify în service/delivery/* și web/rest/AdminNotify*. Două lucruri ating artefacte generate și trebuie re-aplicate: valorile MNOTIFY_SENT/FAILED pe enum-ul TipEvenimentNotif și câmpul Sistem.mnotifyEnabled (changelog 20260813100000_add_sistem_mnotify_enabled.xml).