---
# System prepended metadata

title: MVO2

---

# 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.