|
| 1 | +# Intégrabook - Impact CO2 |
| 2 | + |
| 3 | +Pages HTML de test simulant un site tiers qui intègre les modules Impact CO2. |
| 4 | +Destiné aux audits de sécurité (pentest) et aux tests d'intégration cross-origin. |
| 5 | + |
| 6 | +## Démarrage rapide |
| 7 | + |
| 8 | +1. Modifier `config.js` pour cibler l'environnement voulu : |
| 9 | + |
| 10 | +```js |
| 11 | +const INTEGRABOOK_CONFIG = { |
| 12 | + baseUrl: 'https://impactco2.fr', // ou staging, localhost:3000, etc. |
| 13 | + theme: 'default', // 'default' | 'night' |
| 14 | + language: 'fr', // 'fr' | 'en' | 'es' |
| 15 | +} |
| 16 | +``` |
| 17 | + |
| 18 | +2. Servir les fichiers depuis le dossier `integrabook/` sur un domaine distinct (pour tester le CORS) : |
| 19 | + |
| 20 | +```bash |
| 21 | +cd integrabook |
| 22 | +python3 -m http.server 8888 |
| 23 | +# ou |
| 24 | +npx serve -p 8888 |
| 25 | +``` |
| 26 | + |
| 27 | +3. Ouvrir `http://localhost:8888` dans un navigateur. |
| 28 | + |
| 29 | +## Configuration |
| 30 | + |
| 31 | +### Priorité de résolution |
| 32 | + |
| 33 | +La configuration suit cet ordre de priorité (le premier trouvé gagne) : |
| 34 | + |
| 35 | +1. **Query string** `?baseUrl=X&theme=Y&language=Z` |
| 36 | +2. **localStorage** (persisté via la barre de config UI) |
| 37 | +3. **`config.js`** (valeurs par défaut) |
| 38 | + |
| 39 | +### Via `config.js` (recommandé pour l'environnement) |
| 40 | + |
| 41 | +Le fichier `config.js` à la racine définit les valeurs par défaut. C'est le seul fichier à modifier pour changer d'environnement. |
| 42 | + |
| 43 | +| Clé | Description | Valeurs | |
| 44 | +|------------|--------------------------------------|----------------------------------| |
| 45 | +| `baseUrl` | URL de l'instance Impact CO2 cible | URL complète sans slash final | |
| 46 | +| `theme` | Thème par défaut des widgets | `default`, `night` | |
| 47 | +| `language` | Langue par défaut | `fr`, `en`, `es` | |
| 48 | + |
| 49 | +### Via query string (recommandé pour le partage) |
| 50 | + |
| 51 | +Les paramètres `baseUrl`, `theme` et `language` dans l'URL sont propagés automatiquement sur tous les liens internes. Un lien partagé configure tout le site en un clic : |
| 52 | + |
| 53 | +``` |
| 54 | +http://pentest.example.com/?baseUrl=https://staging.impactco2.fr&theme=night&language=en |
| 55 | +``` |
| 56 | + |
| 57 | +### Via l'interface |
| 58 | + |
| 59 | +Chaque page expose une barre de configuration en haut. Les changements sont persistés en localStorage **et** dans le query string. |
| 60 | + |
| 61 | +Pour revenir aux valeurs de `config.js`, vider le localStorage : |
| 62 | + |
| 63 | +```js |
| 64 | +localStorage.removeItem('integrabook-baseUrl') |
| 65 | +localStorage.removeItem('integrabook-theme') |
| 66 | +localStorage.removeItem('integrabook-language') |
| 67 | +``` |
| 68 | + |
| 69 | +### Thème night |
| 70 | + |
| 71 | +Quand le thème `night` est sélectionné, les zones de rendu live passent automatiquement en fond sombre avec texte clair, pour refléter le comportement des widgets en mode nuit. |
| 72 | + |
| 73 | +## Pages disponibles |
| 74 | + |
| 75 | +### Modules thématiques |
| 76 | + |
| 77 | +| Page | Module | Intégrations | |
| 78 | +|-----------------------|-----------------------------------------|---------------------------------------| |
| 79 | +| `comparateur.html` | Comparateur CO2 + étiquettes | iframe.js, iframe direct | |
| 80 | +| `transport.html` | Transport + itinéraire | iframe.js, iframe direct, API REST | |
| 81 | +| `livraison.html` | Livraison + étiquettes | iframe.js, iframe direct | |
| 82 | +| `alimentation.html` | Alimentation | iframe.js, iframe direct, API REST | |
| 83 | +| `habillement.html` | Habillement + Osez Changer | iframe.js, iframe direct | |
| 84 | +| `chauffage.html` | Chauffage | iframe.js, iframe direct, API REST | |
| 85 | +| `quiz.html` | Quiz + quiz infographie | iframe.js, iframe direct | |
| 86 | +| `infographie.html` | Infographie + détecteur | iframe.js, iframe direct | |
| 87 | + |
| 88 | +### Méthodes d'intégration transverses |
| 89 | + |
| 90 | +| Page | Méthode | Description | |
| 91 | +|-----------------------|-----------------------------------------|---------------------------------------| |
| 92 | +| `detecteur.html` | Scripts de détection | `detection.js` (sync) + `detection-async.js` | |
| 93 | +| `webcomponent.html` | Web Component `<etiquette-ico2>` | Custom element natif | |
| 94 | +| `api.html` | API REST `/api/v1/*` | Tous les endpoints avec testeur | |
| 95 | +| `legacy.html` | IDs legacy | `mon-impact-transport`, `datagir-*`, `ecolab-*`, etc. | |
| 96 | + |
| 97 | +## Structure des fichiers |
| 98 | + |
| 99 | +``` |
| 100 | +integrabook/ |
| 101 | +├── config.js # Configuration (base URL, theme, langue) |
| 102 | +├── shared.css # Styles communs |
| 103 | +├── shared.js # Logique partagée (config bar, params editor, helpers) |
| 104 | +├── index.html # Hub de navigation |
| 105 | +├── comparateur.html |
| 106 | +├── transport.html |
| 107 | +├── livraison.html |
| 108 | +├── alimentation.html |
| 109 | +├── habillement.html |
| 110 | +├── chauffage.html |
| 111 | +├── quiz.html |
| 112 | +├── infographie.html |
| 113 | +├── detecteur.html |
| 114 | +├── webcomponent.html |
| 115 | +├── api.html |
| 116 | +└── legacy.html |
| 117 | +``` |
| 118 | + |
| 119 | +## Fonctionnalités par page |
| 120 | + |
| 121 | +Chaque page de module contient : |
| 122 | + |
| 123 | +- **Barre de configuration** : base URL, thème, langue (persisté en localStorage + query string) |
| 124 | +- **Éditeur de paramètres** : formulaire spécifique au module avec Appliquer / Reset |
| 125 | +- **Bloc de code** : snippet d'intégration copiable, mis à jour en temps réel avec les paramètres |
| 126 | +- **Zone de rendu live** : le widget tel qu'un intégrateur tiers le verrait (fond adapté au thème) |
| 127 | + |
| 128 | +### Détecteur (spécificités) |
| 129 | + |
| 130 | +La page `detecteur.html` fonctionne différemment des autres : les scripts de détection scannent tout le DOM à la recherche de textes contenant des valeurs CO2 (regex sur "X kg CO2", "X tonnes CO2e", etc.) et les annotent avec des étiquettes interactives. |
| 131 | + |
| 132 | +- **Sync** (`detection.js`) : se déclenche au clic sur "Charger". Le script s'exécute immédiatement. |
| 133 | +- **Async** (`detection-async.js`) : se charge au clic, puis se déclenche manuellement via `window.impactCO2Detection()`. |
| 134 | +- Les deux variantes sont **mutuellement exclusives** : la première qui tourne marque les éléments comme traités. Recharger la page entre les tests. |
| 135 | + |
| 136 | +## Surfaces d'attaque couvertes |
| 137 | + |
| 138 | +| Vecteur | Pages concernées | |
| 139 | +|----------------------------|-----------------------------------------------| |
| 140 | +| Injection de script tiers | Toutes les pages iframe (`iframe.js`) | |
| 141 | +| Cross-origin iframe | Toutes les pages avec iframe direct | |
| 142 | +| CORS / API REST | `api.html`, `transport.html`, `alimentation.html`, `chauffage.html` | |
| 143 | +| postMessage | Toutes les pages iframe (`iframe-resizer`) | |
| 144 | +| Custom elements | `webcomponent.html` | |
| 145 | +| DOM auto-detection | `detecteur.html`, `legacy.html` | |
0 commit comments