100 lines
2.8 KiB
Markdown
100 lines
2.8 KiB
Markdown
|
|
# Spécifications Service Web2Print
|
||
|
|
|
||
|
|
## Vue d'ensemble
|
||
|
|
Service de conversion HTML/CSS vers PDF déployé sur VPS à l'URL `web2print.studio-variable.com`
|
||
|
|
|
||
|
|
## Décisions techniques
|
||
|
|
|
||
|
|
### Stack
|
||
|
|
- **Backend** : PHP (maîtrise, cohérence avec environnement)
|
||
|
|
- **Générateur PDF** : Paged.js CLI (via exec CLI)
|
||
|
|
- **Serveur web** : Apache (déjà en place sur VPS)
|
||
|
|
- **Méthode d'appel** : API REST
|
||
|
|
- **Déploiement** : Installation directe sur VPS (pas de Docker)
|
||
|
|
|
||
|
|
### Architecture
|
||
|
|
PHP gère :
|
||
|
|
- Réception requêtes HTTP
|
||
|
|
- Authentification par clé API
|
||
|
|
- Validation des inputs
|
||
|
|
- Appel Paged.js CLI via shell_exec/exec
|
||
|
|
- Retour du PDF en binaire
|
||
|
|
|
||
|
|
### Avantages Paged.js
|
||
|
|
- Rendu identique entre front-end et back-end (même moteur)
|
||
|
|
- Support natif CSS Paged Media (marges, en-têtes/pieds, numérotation)
|
||
|
|
- Basé sur Chromium (meilleur support CSS moderne)
|
||
|
|
- Cohérence avec intégration front-end Paged.js prévue
|
||
|
|
|
||
|
|
### Client
|
||
|
|
- Plugin Kirby CMS
|
||
|
|
- Envoie requêtes HTTP avec clé API
|
||
|
|
- Reçoit PDF en binaire
|
||
|
|
- Stocke le PDF dans un champ Kirby
|
||
|
|
|
||
|
|
### Sécurité
|
||
|
|
- Authentification : clé API dans header HTTP (X-API-Key)
|
||
|
|
- Clés stockées dans config PHP (ou .env)
|
||
|
|
- Pas d'interface admin nécessaire
|
||
|
|
- Clé configurée manuellement dans le plugin Kirby
|
||
|
|
|
||
|
|
## Caractéristiques
|
||
|
|
|
||
|
|
### Usage
|
||
|
|
- Volume : faible, occasionnel (quelques PDFs/jour)
|
||
|
|
- Taille documents : variable, jusqu'à des livres complets
|
||
|
|
- Ressources externes : autorisées (images, CSS, fonts via URL)
|
||
|
|
|
||
|
|
### API
|
||
|
|
|
||
|
|
**Endpoint** : `POST /generate`
|
||
|
|
|
||
|
|
**Headers** :
|
||
|
|
```
|
||
|
|
X-API-Key: <clé-secrète>
|
||
|
|
Content-Type: application/json
|
||
|
|
```
|
||
|
|
|
||
|
|
**Body** :
|
||
|
|
```json
|
||
|
|
{
|
||
|
|
"html": "<html>...</html>",
|
||
|
|
"css": "...", // optionnel
|
||
|
|
"options": {
|
||
|
|
// À définir
|
||
|
|
}
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
**Response** : PDF en binaire (application/pdf)
|
||
|
|
|
||
|
|
## Points à clarifier
|
||
|
|
|
||
|
|
### Infrastructure
|
||
|
|
- [x] Déploiement : Installation directe sur VPS (Paged.js CLI via npm)
|
||
|
|
- [x] Structure du service : structure organisée (Controllers, Services, Middleware)
|
||
|
|
- [x] Config Apache : VirtualHost pointant vers le dossier du service
|
||
|
|
- [x] Stockage temporaire : /var/www/web2print/tmp/
|
||
|
|
|
||
|
|
### Fonctionnalités
|
||
|
|
- [ ] Options PDF exposées (format, marges, orientation, etc.)
|
||
|
|
- [ ] Timeout génération (60s suffisant pour livres ?)
|
||
|
|
- [ ] Limite taille HTML en entrée
|
||
|
|
- [ ] Ressources externes : tout autoriser ou liste blanche de domaines ?
|
||
|
|
- [ ] Timeout fetch ressources externes
|
||
|
|
|
||
|
|
### Gestion d'erreurs
|
||
|
|
- [ ] Format réponses d'erreur (JSON + HTTP status ?)
|
||
|
|
- [ ] Stockage logs (où ? rotation ?)
|
||
|
|
- [ ] Monitoring/alertes
|
||
|
|
|
||
|
|
### Sécurité avancée
|
||
|
|
- [ ] Rate limiting par clé API
|
||
|
|
- [ ] Validation/sanitization HTML
|
||
|
|
- [ ] Isolation processus Paged.js CLI
|
||
|
|
|
||
|
|
## Notes
|
||
|
|
- Ce fichier sert de documentation temporaire pendant la phase de spécification
|
||
|
|
- Le service sera dans un projet séparé de ce repo
|
||
|
|
- Le plugin Kirby sera ajouté à ce projet plus tard
|