# MVO2
pg_dump -a --disable-triggers -h svdbmade01-pic -n public -p 5432 -U pharedb -W -F p dbimaprotect > ~/SVDBMADE01-PIC.dbimaprotect.20230214.pgdmp
command psql -h localhost -p 5409 -U postgres -d imaprotect -f ./var/database/SVDBMADE01-PIC.dbimaprotect.20230214.pgdmp
comment rendre les scripts non sensibles public ?
server public tiers ???
comment charger l'iframe avec Bearer ?
https://stackoverflow.com/questions/13432821/is-it-possible-to-add-request-headers-to-an-iframe-src-request
iframe incompatible avec auth
```
async function getSrc() {
const res = await fetch("https://www.imaprotect.com/faq", {
method: 'GET',
headers: {
// Here you can set any headers you want
}
});
const blob = await res.blob();
const urlObject = URL.createObjectURL(blob);
document.querySelector('#mvo2').setAttribute("src", urlObject)
}
getSrc();
```
## questionnaire
- il manque une recapitulatif permettant de vérifier les données saisies avant l'envoi "obtenir mon tarif"
TODO:
Contraintes techniques:
## Contraintes communes aux deux POCs
- gestion des boutons retour/suivant via la Navigation API
## POC SPA
Inconvénients :
- non isolée de la frame partenaire (JS,CSS)
- CORS pour les appels AJAX
- routing client-side, navigation à gérer (boutons retour/suivant)
- (coûteux à déveloper: front VueJS + API)
- (difficile à travailler avec les intégrateurs: VueJS)
Avantages :
- perfs memoire car même frame
## POC Iframe
Inconvénients :
- check que le chargement de l'iframe ne soit pas interdit par le partenaire(x frame options)
- perf memoire: frame dans frame
Avantages :
- browsing context (style et js) indépendant du parent
- session history indépendant: pas de navigation à gérer
- (moins coûteux à développer: MVC classique, intes plus à l'aise avec Twig que VueJS)
Notes:
- utiliser l'api postMessage (se prévenir des attaques XSS)
- paiement: iframe dans l'iframe ?
iframe cookie scope ?
https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage#syntax
iframe et ad/popup blocker ?
iframe et session php , add flash ? non stateless
souci nettowage de cache car gravitee https://gitlab.lephare.io/projets/imaprotect/mvo2-api/-/jobs/225310 ??
https://coderwall.com/p/kdv1hw/prevent-rendering-your-page-inside-an-iframe-using-x-frame-options
https://developer.chrome.com/docs/web-platform/navigation-api/
car car suelement supporté par dernières versions de Chrome https://caniuse.com/mdn-api_navigation
Décision: popup ? https://caniuse.com/?search=popstate
https://developer.mozilla.org/en-US/docs/Web/API/Navigation_API#browser_compatibility
API Non reliable
https://stackoverflow.com/a/65813651
=> pas besoin a priori sur Chrome car le back/next agit sur l'iframe et non le parent.
Le partenaire parent ne doit pas interdire l'iframe via le header https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options
Same Origin Policy => on ne peut accéder au DOM du parent pour inclure du style (pour l'iframe), il faut donc charger un js qui modifie le dom de la page partenaire (css pour iframe et charge l'iframe)
comment sync le hash de l'output d'un widget matmut js avec le code d'intégration sur lequel nous n'avons pas la main ?
faire un HTTP GET pour avoir la valeur de ce hash ? comment le déterminer depuis un controller ?
utliser le TagRenderer de webpack encore renderWebpackScriptTags ?
Mettre un expires assez court
oauth2 ? Expiration ? health check
nouvelle paiement gateway ?
BO intégrée dans l'admin imaprotect site public => headless BO: pas de front lié à l'admin, API exposé + documentation swagger.
admin tableau comparatif
Evolution webcallback en amont il faudrait extraire le module webcallback du site public. piste que nous avions écarté lors de l'implémentation dans l'espace public
cache
- shop, promo, a priori gérée par l'API Sales => headless e-commerce avec Sylius ? Dette EP ...
- nous avons une incohérence entre la souscription ESS site public, en agence et MVO2 (gestion des promos notamment)
- besoin de shop omnichannel
- utiliser blaze pour le carroussel d'image produit https://blaze-slider.dev/
- 9. "déjà équipé ?" => se connecter => commandes additionnelles (matériels).
- payent notification sync/async
- bdd pour
- sauvegarder le questionnaire et non les réponses WS ima (le WS ima me donne la projection des réponses mais ne permet pas de consulter ensuite le questionnaire) => /v2/dematerialized-subscription/private-offers-quotations-pack permettrait de le faire
- gestion payment
le travail initial "séparation demat" ne serait-il pas mvo2 ? Oui.
Est-on sûr que MVO2 deviendra le seul canal de vente ? Sinon développer un backend boutique omnichannel.
archi du SI:
- api sales (devis) V2
- api sales V1 ?
- GET /citiesfrom-postalcode
- GET /eligibilities
- GET /quotations/{quotation_id} (API Sales V1)
- API Partenaires MVO2 EP
- API code postal EP
- api google autocomplete
- payment api
- gravitee
-
définir le MVP
* choisir le mode qu'utilisera la matmut: lead ou prescription ou souscription
* identité visuelle:
* ~~choisir la font~~
* ~~palette de couleur~~
* stylesheet partenaire
## IFRAME
https://github.com/symfony/symfony/pull/31437/files
bypass sec postMessage
invalidation du cache espace public partnerSettings, delete redis partagé ? 304 server side ? Last-Modified-At ?
le partenaire change de domaine admin https://www.imaprotect.pbo.lph
tab niveau de complexité, temps
expiration + validation: https://symfony.com/doc/current/http_cache/validation.html
https://symfony.com/doc/current/components/cache.html#stampede-prevention
Paiement iframe dans un iframe ?
dans httpclient, imprvove log, group logs thnaks to process id, set User-Agent header
quid redondance
Google Analytics: comment track le site partenaire et le contenu de l'iframe ? A priori vu que deux domaines différents ce sont 2 sessions différentes.
site linking
https://support.google.com/analytics/answer/1033876?hl=en&visit_id=637846700124990929-2431925886&rd=1#zippy=%2Cin-this-article
GTM
https://ykpoh.medium.com/setting-up-iframe-cross-domain-tracking-using-google-tag-manager-94ae5eab686a
set up a GTM Cross Domain Tracking Management Excel fileto ensure that you set a unique cookieName
Autant de solution de cross domain trackling que de solution de tracking.
Pourrait-on injecter le script analytics dans le parent de l'iframe ?
https://stackoverflow.com/questions/2672484/iframe-isolation
Style isolation ?
Ressources:
https://developer.mozilla.org/en-US/docs/Learn/HTML/Multimedia_and_embedding/Other_embedding_technologies
Security concerns:
- clickjacking
- sandbox attribute
- CSP: utiliser X-Frame-Options headers pour valider qui utilise l'iframe
- most browsers now have third-party cookie protections https://www.cookiestatus.com/
- slimpay KO car sans doute protégé sur le fait d'être utilisé sur plusieurs sites ?
- prévoir un query param step pour historique
## Composant lourd dynamique js/ajax
```htmlembedded=
<div id="imaprotect"></div>
<script src="https://souscription.imaprotect.com?partner=matmut"></script>
```
Conflits possibles entre JS utilisé par la lib et le parent.
Isolation CSS OK. Mais le changement des element peut casser la page.
Pas d'intégration multi partenaires.
Librairie js intégré via script du site partenaire.
Ce js injecte le html.
Quid de la maîtrise sur le comportement (erreurs sentry, logs) applicatif ?
Quid sur la déliverabilité ? S'il y a un bug, comment lephare le corrige ? On aurait une url latest ?
Concerns:
- code non sandboxé par rapport où il est exécuté
## Entre deux JS inject iframe solution retenue
SANS SOUS-DOMAINE car ça permettrait d'utiliser le même Slimpay
env de preprod ?
utilisé par spread****
* JS inject IFRAME
```json=
const IMA_PARTENAIRE = 'matmut';
const IMA_VERSION = 1;
```
## Un Site de rebond personalisé via subdomain
Matmut renvoie sur le site de rebon souscription.matmut.fr?prospect=238
Style css en admin.
A la fin du paiement on redirige vers la matmut, prévoir page de confirmation/erreur sur chaque site partenaire.
Quid du tracking ?
Sur le site de rebond, on utilise une solution de tracking et on ajoute l'info partenaire.
On exporte au partenaire ses données de tracking.
Le données trackées changent-elles entre les partenaires ?
## Next step
Il faut faire un POC:
- 1 etape: nom
- 2 etape: nom offre
- 3 etape: paiement
- tracking ok ?
demander à la matmut une page pour tester le POC
tracking iframe qui fire des events et à l'intégrateur matmut de le traiter dans sa version de GA du parent.