anchorage_layer_simple/docs/WEBSITE_SKELETON.md
ncantu 497bcf0819 Add real service contract for website-skeleton and improve iframe styling
**Motivations:**
- website-skeleton needs a real service contract with valid UUIDs and validators
- Service wallet required for production use with configurable public key
- Iframe styling needs improvement to remove scrollbars and match UserWallet theme

**Root causes:**
- DEFAULT_VALIDATEURS used placeholder public key that cannot verify signatures
- No service wallet generation script for production deployment
- Iframe had fixed height causing scrollbars and visual mismatch with dark theme

**Correctifs:**
- Created real service contract in src/serviceContract.ts with dedicated UUIDs (skeleton-service-uuid-4nkweb-2026)
- Added service wallet generation script (generate-service-wallet.mjs) with .env and .env.private files
- Improved iframe container styling: increased height (800px), dark background (#1a1a1a), better shadows, hidden scrollbars
- Added .env.private to .gitignore for security

**Evolutions:**
- Service contract automatically loaded on startup and sent to UserWallet iframe
- Public key configurable via VITE_SKELETON_SERVICE_PUBLIC_KEY environment variable
- Added npm script 'generate-wallet' for easy wallet generation
- Enhanced iframe visual integration with UserWallet dark theme

**Pages affectées:**
- website-skeleton/src/serviceContract.ts (new)
- website-skeleton/src/config.ts
- website-skeleton/src/main.ts
- website-skeleton/generate-service-wallet.mjs (new)
- website-skeleton/index.html
- website-skeleton/package.json
- website-skeleton/.gitignore
- website-skeleton/.env (new)
- website-skeleton/.env.private (new)
2026-01-28 17:28:50 +01:00

113 lines
5.3 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# website-skeleton
Squelette dun site web qui intègre UserWallet en iframe : écoute des messages `postMessage` (login-proof, error, contract), vérification des preuves de login via `service-login-verify`, et affichage du statut (accepté / refusé). Connexion via un seul parcours : « Se connecter » puis authentification MFA dans l'iframe.
## Objectif
Fournir un projet minimal, prêt à lemploi, pour:
- embarquer UserWallet dans une page via iframe ;
- communiquer avec liframe via `postMessage` (Channel Messages) ;
- vérifier les preuves de login côté parent avec le package `service-login-verify`.
Utile comme base pour un service (certificator, zapwall, etc.) qui consomme UserWallet et doit valider les sessions.
## Emplacement et structure
- **Dossier** : `website-skeleton/` à la racine du dépôt (à côté de `userwallet/`, `service-login-verify/`, `api-relay/`).
- **Stack** : Vite, TypeScript, dépendance `service-login-verify` (`file:../service-login-verify`).
### Fichiers principaux
| Fichier | Rôle |
|---------|------|
| `index.html` | Page avec iframe UserWallet, zone de statut, lien « Description du contrat », bouton « Se connecter » |
| `contrat.html` | Page de description du contrat de service skeleton (labels, UUIDs, usage) |
| `src/main.ts` | Chargement iframe, écoute `message`, envoi du contrat au clic « Se connecter », appel `verifyLoginProof`, mise à jour du statut |
| `src/config.ts` | `USERWALLET_ORIGIN`, `DEFAULT_VALIDATEURS` (placeholder) |
| `package.json` | Scripts `dev` / `build` / `preview`, dépendance `service-login-verify` |
| `start.sh` | Build + `vite preview` sur le port 3024 (production) |
| `vite.config.ts` | `preview.allowedHosts: ['skeleton.certificator.4nkweb.com']` pour éviter 403 via proxy |
| `website-skeleton.service` | Unité systemd pour servir le site |
| `install-website-skeleton.sh` | Installation locale (build, systemd) |
| `README.md` | Instructions dinstallation, configuration et utilisation |
## Prérequis
- **service-login-verify** : exécuter `npm run build` dans `../service-login-verify` avant dinstaller ou builder le skeleton.
- **UserWallet** : à servir sur lURL configurée (`USERWALLET_ORIGIN`) pour que liframe fonctionne.
## Installation et commandes
```bash
cd website-skeleton
npm install
npm run build
```
- **Développement** : `npm run dev` → serveur sur `http://localhost:3024`.
- **Preview** : `npm run preview` après build.
## Configuration
### Origine UserWallet
- **Fichier** : `src/config.ts`.
- **Variable** : `USERWALLET_ORIGIN` = URL de liframe et `targetOrigin` pour `postMessage`.
- **Défauts** :
- En dev : `http://localhost:3018` (UserWallet en dev sur ce port).
- En prod : `https://userwallet.certificator.4nkweb.com`.
- **Override** : variable denvironnement `VITE_USERWALLET_ORIGIN` (ex. `VITE_USERWALLET_ORIGIN=http://localhost:3018 npm run dev`).
### Validateurs
- **Fichier** : `src/config.ts`, objet `DEFAULT_VALIDATEURS`.
- **Rôle** : structure des validateurs de laction login (placeholder).
- **Usage réel** : remplacer par les validateurs issus du contrat du service (action login), ou les charger depuis une API / un channel.
## Utilisation
1. Lancer UserWallet (dev ou déployé) sur lURL configurée.
2. Lancer le skeleton (`npm run dev` ou servir `dist/`).
3. Ouvrir la page du skeleton : liframe affiche UserWallet.
4. **Se connecter** : cliquer «Se connecter» → envoi du contrat à liframe, affichage de liframe.
5. **Login MFA** : effectuer le flux de login (MFA) dans liframe ; à la fin, UserWallet envoie `login-proof` au parent. Le skeleton appelle `verifyLoginProof`, puis affiche «Login accepté» ou «Login refusé : … ».
6. **Description du contrat** : lien «Description du contrat» vers `contrat.html`.
## Messages postMessage
| Type | Sens | Rôle du skeleton |
|------|------|-------------------|
| `contract` | Parent → iframe | Envoyé au clic sur «Se connecter» (et au load de liframe). |
| `login-proof` | Iframe → parent | Vérification via `verifyLoginProof`, mise à jour du statut. |
| `error` | Iframe → parent | Affichage du message derreur. |
## Déploiement
- **Port** : 3024 (aucun conflit avec le Dashboard, 3020).
- **Backend** : machine 192.168.1.168 (site + service systemd).
- **Proxy** : 192.168.1.100 ; Nginx route `skeleton.certificator.4nkweb.com``http://192.168.1.168:3024`.
- **Certificat** : Let's Encrypt sur le proxy pour `skeleton.certificator.4nkweb.com` (via `configure-nginx-proxy.sh` / `update-proxy-nginx.sh`).
### Installation
1. **Sur la machine backend (192.168.1.105)** :
```bash
./website-skeleton/install-website-skeleton.sh
```
Construit le front, installe et démarre le service systemd (`website-skeleton.service`).
2. **Proxy + certificat** : à partir de la racine du dépôt,
```bash
./update-proxy-nginx.sh
```
Configure Nginx sur le proxy (.100), génère le certificat pour `skeleton.certificator.4nkweb.com`, recharge Nginx.
Voir `docs/DOMAINS_AND_PORTS.md` pour les domaines et ports.
## Références
- **Package vérification** : `service-login-verify/`, `features/service-login-verify.md`
- **Iframe et login** : `userwallet/`, `features/userwallet-contrat-login-reste-a-faire.md` (§3.7)
- **Relais** : `api-relay/`, `docs/DOMAINS_AND_PORTS.md`