Canale & Furnizori
Canale
Section titled “Canale”| Canal | Transport | Note |
|---|---|---|
| SMTP / Amazon SES | prin EmailChannelSender + Provider (implicit: SES) | |
| SMS | Amazon SNS / HTTP terț | prin SmsChannelSender + Provider (SNS sau HTTP) |
| TELEGRAM | Bot Telegram | transport unic încorporat |
| PUSH | Web Push (VAPID) | fără Firebase/FCM; per identificator IDNP/IDNO |
Furnizori (Provider)
Section titled “Furnizori (Provider)”Un Provider este un backend de livrare persistat, gestionat din Administrare → Furnizori (/providers, doar ADMIN). În loc de un singur SMTP/gateway hard-codat, operatorii înregistrează oricâți furnizori și aleg unul per canal la trimitere.
| Câmp | Sens |
|---|---|
cheie | cheie unică, referită la trimitere (ex. gstackgov, aws-sns) |
nume | etichetă UI |
tip | EMAIL_SMTP / SMS_SNS / SMS_HTTP |
config | JSON specific tipului |
activ | doar cei activi sunt selectabili |
Tipuri
Section titled “Tipuri”- EMAIL_SMTP —
from(obligatoriu); opționalhost/port/username/password/starttlspentru un SMTP dedicat. Fărăhost→ refolosește transportulspring.mail.*(SES), doar identitateaFromdiferă. - SMS_SNS —
region(impliciteu-north-1),accessKey,secretKey, opționalsenderId,smsType. Trimite prin Amazon SNSPublish. - SMS_HTTP —
url,method,contentType(form/json),headers/params(JSON; valori cu{to}/{message}), opționalsuccessField/idField/errorFieldpentru parsarea răspunsului JSON (gateway-uri care întorc 200 pe eșec, ex. TextBelt).
Alegerea per canal
Section titled “Alegerea per canal”Pe ecranul Trimite notificare, fiecare rând de canal are un dropdown Furnizor: email → EMAIL_SMTP activi; sms → SMS_SNS+SMS_HTTP activi; push/telegram → fără furnizor. Cheia aleasă circulă end-to-end: ChannelSpec.provider → NotificationJob.provider → ProviderRegistry în sender.
Furnizori seed (ProviderSeeder, upsert după cheie)
Section titled “Furnizori seed (ProviderSeeder, upsert după cheie)”| Cheie | Tip | Activ | Note |
|---|---|---|---|
gstackgov | EMAIL_SMTP | da | identitate SES From; partajează transportul SES |
gstackdev | EMAIL_SMTP | da | identitate SES From |
textbelt | SMS_HTTP | da | gateway terț; parsare successField |
aws-sns | SMS_SNS | nu | placeholder — completează credențialele în UI și activează |
Email prin Amazon SES
Section titled “Email prin Amazon SES”Canalul EMAIL folosește implicit Amazon SES (cont 042618322403, eu-north-1), domeniu DKIM-verificat gstack.tech.esempla.systems, expeditori gstackgov / gstackdev. Autentificare prin credențiale SES SMTP IAM. Registru de expeditori per-cerere prin cheia sender (GET /api/admin/mail-senders).
Web Push (VAPID)
Section titled “Web Push (VAPID)”Notificări reale de browser prin protocolul Web Push standard (VAPID), biblioteca nl.martijndwars:web-push — fără Firebase/FCM:
- fiecare browser se abonează la propriul serviciu push (Mozilla / Google Web Push transport); gNotify postează payload-ul criptat direct acolo.
- singurul secret server-side = perechea de chei VAPID (
gnotify.push.vapid.*). Generare:npx web-push generate-vapid-keys --json. Chei nesetate → PUSH cade pe stub (fake-push-…). - PUSH e cheiat pe identificator (IDNP/IDNO), nu pe adresă — o persoană poate avea mai multe dispozitive (
PushSubscription). Trimiterea către PUSH fan-out la toate abonările;404/410→ abonare expirată, auto-eliminată. - Endpoint-uri portal:
GET /api/registry/push-public-key,POST /api/registry/me/push-subscription.
Siguranță la regenerare
Section titled “Siguranță la regenerare”Totul în clase separat denumite: service/channel/{ProviderRegistry,ProviderSeeder,EmailChannelSender,SmsChannelSender,WebPushService,PushChannelSender}, repository/lookup/*, web/rest/RegistryPushResource, ecranul app/providers/. Provider se generează din registry-providers.jdl (@skipClient).