feat: Version 3.5.2 - Configuration Stripe et gestion des immeubles

- Configuration complète Stripe pour les 3 environnements (DEV/REC/PROD)
  * DEV: Clés TEST Pierre (mode test)
  * REC: Clés TEST Client (mode test)
  * PROD: Clés LIVE Client (mode live)
- Ajout de la gestion des bases de données immeubles/bâtiments
  * Configuration buildings_database pour DEV/REC/PROD
  * Service BuildingService pour enrichissement des adresses
- Optimisations pages et améliorations ergonomie
- Mises à jour des dépendances Composer
- Nettoyage des fichiers obsolètes

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
pierre
2025-11-09 18:26:27 +01:00
parent 21657a3820
commit 2f5946a184
812 changed files with 142105 additions and 25992 deletions

177
bao/DEPLOY.md Normal file
View File

@@ -0,0 +1,177 @@
# Guide de déploiement BAO
## Vue d'ensemble
BAO peut être utilisé de **deux façons** :
1. **Depuis le PC** : Via tunnels SSH vers les containers
2. **Sur les containers** : Connexion directe aux bases maria3/maria4
## Architecture des bases de données
### Environnement DVA
- Container : `IN3/dva-geo`
- Base de données : `IN3/maria3:3306``dva_geo`
- Credentials : `dva_geo_user` / `CBq9tKHj6PGPZuTmAHV7`
### Environnement RCA
- Container : `IN3/rca-geo`
- Base de données : `IN3/maria3:3306``rca_geo`
- Credentials : `rca_geo_user` / `UPf3C0cQ805LypyM71iW`
### Environnement PRA
- Container : `IN4/pra-geo`
- Base de données : `IN4/maria4:3306``pra_geo`
- Credentials : `pra_geo_user` / `d2jAAGGWi8fxFrWgXjOA`
## Déploiement
### 1. Déployer sur DVA (IN3/dva-geo)
```bash
cd /home/pierre/dev/geosector/bao
./deploy-bao.sh
```
**Ce que fait le script :**
- Crée une archive `bao-dva-YYYYMMDDHH.tar.gz` dans `/data/backup/geosector/bao`
- Transfère l'archive vers `IN3` (195.154.80.116)
- Déploie dans le container `dva-geo``/var/www/geosector/bao`
- Copie `config/.env.container` vers `config/.env`
- Configure les permissions (root:root)
- Rend tous les scripts exécutables
### 2. Déployer sur RECETTE (IN3/rca-geo)
```bash
cd /home/pierre/dev/geosector/bao
./deploy-bao.sh rca
```
**Même processus**, mais vers le container `rca-geo`.
### 3. Déployer sur PRODUCTION (IN4/pra-geo)
```bash
cd /home/pierre/dev/geosector/bao
./deploy-bao.sh pra
```
**Même processus**, mais vers le serveur `IN4` (51.159.7.190) et le container `pra-geo`.
## Utilisation après déploiement
### Connexion au container
```bash
# Pour RCA (exemple)
ssh -i ~/.ssh/id_rsa_mbpi root@195.154.80.116 'incus exec rca-geo -- bash'
```
### Lancer BAO
```bash
cd /var/www/geosector/bao
# Menu interactif
./bin/bao
# Ou directement un script
./bin/search-user rca dupont
./bin/decrypt-user rca 56930
./bin/list-operations rca --entite=662
```
## Configuration automatique
Le fichier `config/.env` est automatiquement créé depuis `config/.env.container` :
```ini
# Exemple pour RCA (connexion directe vers maria3)
RCA_DB_HOST=13.23.33.4
RCA_DB_PORT=3306
RCA_DB_NAME=rca_geo
RCA_DB_USER=rca_geo_user
RCA_DB_PASS=UPf3C0cQ805LypyM71iW
```
**Aucune configuration manuelle requise !**
## Sauvegardes
Les archives de déploiement sont conservées dans `/data/backup/geosector/bao` :
- `bao-dva-*.tar.gz` : Archives DVA
- `bao-rca-*.tar.gz` : Archives RCA
- `bao-pra-*.tar.gz` : Archives PRA
**Rétention** : Les 10 dernières archives par environnement sont conservées.
## Vérifications post-déploiement
Le script vérifie automatiquement :
- ✓ Présence de `config/.env`
- ✓ PHP disponible
- ✓ Extensions PHP (PDO, OpenSSL, mbstring)
## Rollback
En cas de problème, la sauvegarde est disponible sur le container :
```bash
# Se connecter au container
ssh -i ~/.ssh/id_rsa_mbpi root@195.154.80.116 'incus exec rca-geo -- bash'
# Restaurer depuis la sauvegarde
cd /var/www/geosector
rm -rf bao
mv bao_backup_YYYYMMDD_HHMMSS bao
```
## Différences PC vs Container
| Aspect | PC (local) | Container (distant) |
|--------|-----------|---------------------|
| Config | `.env.example` | `.env.container` |
| Connexion | Via tunnels SSH | Directe maria3/maria4 |
| Host DB | 127.0.0.1 | 13.23.33.4 |
| Port DB | 3307/3308/3309 | 3306 |
| Tunnels | Nécessaires | Non nécessaires |
## Troubleshooting
### Erreur de connexion à la base
```bash
# Tester la connexion depuis le container
mysql -h 13.23.33.4 -u rca_geo_user -p rca_geo -e "SELECT 1"
```
### Script non exécutable
```bash
cd /var/www/geosector/bao
chmod +x bin/*
```
### Mauvaise configuration
```bash
# Vérifier la config
cat config/.env
# Recopier depuis le template
cp config/.env.container config/.env
```
## Journal des déploiements
Tous les déploiements sont journalisés dans `~/.geo_deploy_history` :
```bash
tail -f ~/.geo_deploy_history
```
Exemple :
```
2025-01-18 14:30:00 - BAO deployed to RECETTE (rca-geo) - Archive: bao-rca-2025011814.tar.gz
```

View File

@@ -7,16 +7,16 @@ Toolkit d'administration pour consulter et gérer les données chiffrées de l'A
| Script | Description | Exemple |
|--------|-------------|---------|
| `./bin/bao` | Menu interactif principal | `./bin/bao` |
| `./bin/search-user` | Rechercher un user par nom/prénom/username/secteur | `./bin/search-user rec dupont` |
| `./bin/decrypt-user` | Afficher les infos complètes d'un user | `./bin/decrypt-user rec 123` |
| `./bin/reset-password` | Générer et enregistrer un nouveau mot de passe | `./bin/reset-password rec 123` |
| `./bin/search-email` | Rechercher par email | `./bin/search-email rec contact@example.com` |
| `./bin/list-users` | Lister les utilisateurs | `./bin/list-users dev --entite=5` |
| `./bin/search-entite` | Rechercher une entité (mode interactif) | `./bin/search-entite rec plumeliau` |
| `./bin/decrypt-entite` | Afficher les infos complètes d'une entité | `./bin/decrypt-entite rec 10` |
| `./bin/list-entites` | Lister les entités | `./bin/list-entites dev --stripe` |
| `./bin/list-operations` | Lister les opérations | `./bin/list-operations dev --entite=5` |
| `./bin/list-sectors` | Lister les secteurs d'une opération | `./bin/list-sectors dev --operation=123` |
| `./bin/search-user` | Rechercher un user par nom/prénom/username/secteur | `./bin/search-user rca dupont` |
| `./bin/decrypt-user` | Afficher les infos complètes d'un user | `./bin/decrypt-user rca 123` |
| `./bin/reset-password` | Générer et enregistrer un nouveau mot de passe | `./bin/reset-password rca 123` |
| `./bin/search-email` | Rechercher par email | `./bin/search-email rca contact@example.com` |
| `./bin/list-users` | Lister les utilisateurs | `./bin/list-users dva --entite=5` |
| `./bin/search-entite` | Rechercher une entité (mode interactif) | `./bin/search-entite rca plumeliau` |
| `./bin/decrypt-entite` | Afficher les infos complètes d'une entité | `./bin/decrypt-entite rca 10` |
| `./bin/list-entites` | Lister les entités | `./bin/list-entites dva --stripe` |
| `./bin/list-operations` | Lister les opérations | `./bin/list-operations dva --entite=5` |
| `./bin/list-sectors` | Lister les secteurs d'une opération | `./bin/list-sectors dva --operation=123` |
## 📋 Vue d'ensemble
@@ -24,25 +24,37 @@ BAO est un ensemble de scripts **indépendants de l'API** permettant de :
- Consulter les données **déchiffrées** des utilisateurs et entités
- Rechercher dans les champs chiffrés (username, nom, email)
- Réinitialiser les mots de passe utilisateurs
- Se connecter aux **3 environnements** (DEV, REC, PROD) via tunnels SSH
- Se connecter aux **3 environnements** (DVA, RCA, PRA) via tunnels SSH
- Vérifier l'intégrité du chiffrement AES-256-CBC
## 🏗️ Architecture
### Depuis le PC (via tunnels SSH)
```
PC Bureau (localhost)
↓ SSH Tunnels
├─→ IN3/dva-geo (DEV) → localhost:3306 → geo_app
├─→ IN3/rca-geo (REC) → localhost:3306 → geo_app
└─→ IN4/pra-geo (PROD) → localhost:3306 → pra_geo
├─→ IN3/dva-geo → IN3/maria3:3306 → dva_geo
├─→ IN3/rca-geo → IN3/maria3:3306 → rca_geo
└─→ IN4/pra-geo → IN4/maria4:3306 → pra_geo
```
### Depuis les containers (connexion directe)
```
IN3/dva-geo ──→ 13.23.33.4:3306 (maria3) → dva_geo
IN3/rca-geo ──→ 13.23.33.4:3306 (maria3) → rca_geo
IN4/pra-geo ──→ 13.23.33.4:3306 (maria4) → pra_geo
```
### Connexions SSH
Les tunnels SSH sont gérés automatiquement via `~/.ssh/config` :
- **vpn-dva-geo** : Container DEV sur IN3 (via VPN)
- **vpn-rca-geo** : Container REC sur IN3 (via VPN)
- **pra-geo** : Container PROD sur IN4 (désactivé)
- **vpn-dva-geo** : Container DVA sur IN3 (via VPN)
- **vpn-rca-geo** : Container RCA sur IN3 (via VPN)
- **pra-geo** : Container PRA sur IN4 (désactivé)
**Note** : Depuis les containers, les tunnels SSH ne sont **pas nécessaires**. BAO se connecte directement aux bases maria3/maria4.
## 📦 Installation
@@ -60,14 +72,64 @@ ssh vpn-rca-geo 'echo OK'
### 2. Configuration
#### Sur le PC
```bash
cd /home/pierre/dev/geosector/bao
# Le fichier .env est déjà créé avec les bonnes valeurs
# Vérifier la configuration
# Copier le template et adapter
cp config/.env.example config/.env
# Les valeurs par défaut sont configurées pour utiliser les tunnels SSH
# vers dva-geo (port 3307) et rca-geo (port 3308)
cat config/.env
```
#### Sur les containers (après déploiement)
Le script `deploy-bao.sh` copie automatiquement `config/.env.container` vers `config/.env`.
Cette configuration utilise les connexions **directes** vers maria3/maria4 (pas de tunnels SSH).
## 📦 Déploiement sur les containers
BAO peut être déployé sur les containers pour une utilisation directe sur les serveurs.
### Déployer sur DVA (IN3/dva-geo)
```bash
cd /home/pierre/dev/geosector/bao
./deploy-bao.sh
```
### Déployer sur RECETTE (IN3/rca-geo)
```bash
cd /home/pierre/dev/geosector/bao
./deploy-bao.sh rca
```
### Déployer sur PRODUCTION (IN4/pra-geo)
```bash
cd /home/pierre/dev/geosector/bao
./deploy-bao.sh pra
```
### Utiliser BAO sur un container
```bash
# Connexion au container
ssh -i ~/.ssh/id_rsa_mbpi root@195.154.80.116 'incus exec rca-geo -- bash'
# Lancer BAO
cd /var/www/geosector/bao
./bin/bao
# Ou directement un script
./bin/search-user rca dupont
```
## 🚀 Utilisation
### Menu interactif principal
@@ -78,7 +140,7 @@ cd /home/pierre/dev/geosector/bao
```
Menu avec :
1. Sélection de l'environnement (DEV/REC/PROD)
1. Sélection de l'environnement (DVA/RCA/PRA)
2. Actions disponibles (liste, recherche, décryptage)
3. Gestion automatique des tunnels SSH
@@ -88,9 +150,9 @@ Menu avec :
```bash
# Rechercher par nom, prénom, username ou secteur
./bin/search-user dev dupont
./bin/search-user rec pv_admin
./bin/search-user dev jean
./bin/search-user dva dupont
./bin/search-user rca pv_admin
./bin/search-user dva jean
```
**Fonctionnalités :**
@@ -102,8 +164,8 @@ Menu avec :
#### Décrypter un utilisateur
```bash
./bin/decrypt-user dev 123
./bin/decrypt-user rec 456
./bin/decrypt-user dva 123
./bin/decrypt-user rca 456
```
**Affiche :**
@@ -114,8 +176,8 @@ Menu avec :
#### Réinitialiser un mot de passe
```bash
./bin/reset-password dev 123
./bin/reset-password rec 456
./bin/reset-password dva 123
./bin/reset-password rca 456
```
**Fonctionnalités :**
@@ -128,8 +190,8 @@ Menu avec :
#### Décrypter une entité (amicale)
```bash
./bin/decrypt-entite dev 5
./bin/decrypt-entite rec 10
./bin/decrypt-entite dva 5
./bin/decrypt-entite rca 10
```
**Affiche :**
@@ -143,19 +205,19 @@ Menu avec :
```bash
# Tous les utilisateurs (limite 50)
./bin/list-users dev
./bin/list-users dva
# Filtrer par entité
./bin/list-users dev --entite=5
./bin/list-users dva --entite=5
# Filtrer par rôle
./bin/list-users rec --role=2
./bin/list-users rca --role=2
# Limite personnalisée
./bin/list-users dev --limit=100
./bin/list-users dva --limit=100
# Combinaison de filtres
./bin/list-users dev --entite=5 --role=2 --limit=20
./bin/list-users dva --entite=5 --role=2 --limit=20
```
**Affiche :** Tableau avec username, email, nom (déchiffrés)
@@ -164,9 +226,9 @@ Menu avec :
```bash
# Rechercher par nom, adresse, ville ou email
./bin/search-entite dev plumeliau
./bin/search-entite rec amicale
./bin/search-entite dev appli
./bin/search-entite dva plumeliau
./bin/search-entite rca amicale
./bin/search-entite dva appli
```
**Fonctionnalités :**
@@ -182,13 +244,13 @@ Menu avec :
```bash
# Toutes les entités
./bin/list-entites dev
./bin/list-entites dva
# Uniquement celles avec Stripe activé
./bin/list-entites dev --stripe
./bin/list-entites dva --stripe
# Limite personnalisée
./bin/list-entites rec --limit=20
./bin/list-entites rca --limit=20
```
**Affiche :** Tableau avec nom, email (déchiffrés), stats
@@ -197,13 +259,13 @@ Menu avec :
```bash
# Toutes les opérations
./bin/list-operations dev
./bin/list-operations dva
# Opérations d'une entité spécifique
./bin/list-operations dev --entite=5
./bin/list-operations dva --entite=5
# Limite personnalisée
./bin/list-operations rec --entite=10 --limit=20
./bin/list-operations rca --entite=10 --limit=20
```
**Affiche :** Tableau avec entité, libellé, dates, nb passages, nb users, nb secteurs
@@ -212,8 +274,8 @@ Menu avec :
```bash
# Secteurs d'une opération spécifique
./bin/list-sectors dev --operation=123
./bin/list-sectors rec --operation=456
./bin/list-sectors dva --operation=123
./bin/list-sectors rca --operation=456
```
**Fonctionnalités :**
@@ -228,8 +290,8 @@ Menu avec :
#### Rechercher par email
```bash
./bin/search-email dev contact@example.com
./bin/search-email rec admin@amicale.fr
./bin/search-email dva contact@example.com
./bin/search-email rca admin@amicale.fr
```
**Fonctionnalités :**
@@ -244,11 +306,11 @@ Menu avec :
./bin/_ssh-tunnel.sh status
# Ouvrir un tunnel manuellement
./bin/_ssh-tunnel.sh open dev
./bin/_ssh-tunnel.sh open rec
./bin/_ssh-tunnel.sh open dva
./bin/_ssh-tunnel.sh open rca
# Fermer un tunnel
./bin/_ssh-tunnel.sh close dev
./bin/_ssh-tunnel.sh close dva
# Fermer tous les tunnels
./bin/_ssh-tunnel.sh close-all
@@ -260,10 +322,12 @@ Menu avec :
bao/
├── README.md # Cette documentation
├── .gitignore # Exclut config/.env
├── deploy-bao.sh # Script de déploiement vers containers
├── config/
│ ├── .env # Configuration (gitignored)
│ ├── .env.example # Template
│ ├── .env # Configuration locale (gitignored)
│ ├── .env.example # Template pour utilisation PC (tunnels SSH)
│ ├── .env.container # Template pour utilisation containers (connexion directe)
│ └── database.php # Classe DatabaseConfig
├── lib/
@@ -354,12 +418,22 @@ lsof -i :3309
### Erreur : "Impossible de se connecter à la base"
#### Depuis le PC
```bash
# Vérifier que le tunnel est actif
./bin/_ssh-tunnel.sh status
# Tester manuellement
ssh dva-geo 'mysql -u geo_app_user_dev -p geo_app -e "SELECT 1"'
# Tester manuellement la connexion au tunnel
nc -zv 127.0.0.1 3307 # Pour DVA
nc -zv 127.0.0.1 3308 # Pour RCA
```
#### Depuis un container
```bash
# Tester la connexion directe vers maria3/maria4
mysql -h 13.23.33.4 -u dva_geo_user -p dva_geo -e "SELECT 1"
```
### Erreur : "Échec du déchiffrement"
@@ -384,7 +458,7 @@ chmod +x bin/*
### Cas d'usage 1 : Rechercher un utilisateur par nom
```bash
./bin/search-user rec dupont
./bin/search-user rca dupont
```
Résultat : Tableau des utilisateurs contenant "dupont" (nom, prénom, username ou secteur)
@@ -392,8 +466,8 @@ Résultat : Tableau des utilisateurs contenant "dupont" (nom, prénom, username
### Cas d'usage 2 : Réinitialiser le mot de passe d'un utilisateur
```bash
./bin/search-user rec martin # Trouver l'ID
./bin/reset-password rec 56930 # Réinitialiser avec l'ID
./bin/search-user rca martin # Trouver l'ID
./bin/reset-password rca 56930 # Réinitialiser avec l'ID
```
Résultat : Nouveau mot de passe généré et affiché en clair
@@ -401,7 +475,7 @@ Résultat : Nouveau mot de passe généré et affiché en clair
### Cas d'usage 3 : Trouver tous les comptes d'un email
```bash
./bin/search-email dev contact@amicale.fr
./bin/search-email dva contact@amicale.fr
```
Résultat : Liste tous les utilisateurs avec cet email (peut être multiple)
@@ -409,7 +483,7 @@ Résultat : Liste tous les utilisateurs avec cet email (peut être multiple)
### Cas d'usage 4 : Lister les admins d'une amicale
```bash
./bin/list-users dev --entite=5 --role=2
./bin/list-users dva --entite=5 --role=2
```
Résultat : Tableau des administrateurs (rôle 2) de l'entité 5
@@ -417,7 +491,7 @@ Résultat : Tableau des administrateurs (rôle 2) de l'entité 5
### Cas d'usage 5 : Explorer une entité (mode interactif)
```bash
./bin/search-entite rec plumeliau # Rechercher l'entité
./bin/search-entite rca plumeliau # Rechercher l'entité
# Sélectionner n° de ligne: 1
# Choisir action: 2 (Opérations)
```
@@ -427,7 +501,7 @@ Résultat : Workflow complet pour explorer une entité et ses données liées
### Cas d'usage 6 : Vérifier les entités avec Stripe
```bash
./bin/list-entites dev --stripe
./bin/list-entites dva --stripe
```
Résultat : Toutes les amicales ayant activé Stripe Connect
@@ -435,7 +509,7 @@ Résultat : Toutes les amicales ayant activé Stripe Connect
### Cas d'usage 7 : Lister les opérations d'une entité
```bash
./bin/list-operations rec --entite=662
./bin/list-operations rca --entite=662
```
Résultat : Tableau des opérations avec stats (passages, users, secteurs)
@@ -443,7 +517,7 @@ Résultat : Tableau des opérations avec stats (passages, users, secteurs)
### Cas d'usage 8 : Explorer les secteurs d'une opération
```bash
./bin/list-sectors dev --operation=123
./bin/list-sectors dva --operation=123
```
Résultat : Tableau des secteurs avec nb users/passages + stats globales
@@ -451,7 +525,7 @@ Résultat : Tableau des secteurs avec nb users/passages + stats globales
### Cas d'usage 9 : Audit complet d'un utilisateur
```bash
./bin/decrypt-user dev 123
./bin/decrypt-user dva 123
```
Résultat : Toutes les informations déchiffrées + métadonnées
@@ -477,14 +551,14 @@ Résultat : Toutes les informations déchiffrées + métadonnées
## 📝 Notes
### Environnement PROD
### Environnement PRA
⚠️ **Attention :** L'environnement PROD n'est **pas encore créé** (base de données inexistante).
⚠️ **Attention :** L'environnement PRA n'est **pas encore créé** (base de données inexistante).
Pour l'activer :
1. Créer la base `pra_geo` sur IN4/maria4
2. Migrer les données depuis REC
3. Changer `PROD_ENABLED=true` dans `config/.env`
2. Migrer les données depuis RCA
3. Changer `PRA_ENABLED=true` dans `config/.env`
### Comptes multiples par email

View File

@@ -90,6 +90,12 @@ open_tunnel() {
return 1
fi
# Si le port local est 0, on est dans un container avec connexion directe
if [[ "$local_port" == "0" ]]; then
# Pas de tunnel nécessaire, connexion directe
return 0
fi
# Vérifier si le tunnel est déjà actif
if is_tunnel_active "$local_port"; then
log_warning "Tunnel ${env} déjà actif sur le port ${local_port}"
@@ -172,7 +178,7 @@ status_tunnels() {
echo -e "${CYAN}║ État des tunnels SSH ║${NC}"
echo -e "${CYAN}╚════════════════════════════════════════╝${NC}\n"
for env in DEV REC PROD; do
for env in DVA RCA PRA; do
local enabled=$(get_env_var "${env}_ENABLED")
local local_port=$(get_env_var "${env}_SSH_PORT_LOCAL")
local ssh_host=$(get_env_var "${env}_SSH_HOST")
@@ -197,7 +203,7 @@ status_tunnels() {
close_all_tunnels() {
log_info "Fermeture de tous les tunnels..."
for env in DEV REC PROD; do
for env in DVA RCA PRA; do
local enabled=$(get_env_var "${env}_ENABLED")
if [[ "$enabled" == "true" ]]; then
@@ -219,11 +225,11 @@ Commandes:
status Affiche l'état de tous les tunnels
close-all Ferme tous les tunnels actifs
Environnements: DEV, REC, PROD
Environnements: DVA, RCA, PRA
Exemples:
$(basename "$0") open dev
$(basename "$0") close rec
$(basename "$0") open dva
$(basename "$0") close rca
$(basename "$0") status
$(basename "$0") close-all
EOF

View File

@@ -73,7 +73,7 @@ select_environment() {
local envs=()
local counter=1
for env in DEV REC PROD; do
for env in DVA RCA PRA; do
local enabled=$(get_env_var "${env}_ENABLED")
if [[ "$enabled" == "true" ]]; then
local ssh_host=$(get_env_var "${env}_SSH_HOST")

View File

@@ -15,7 +15,7 @@ require_once __DIR__ . '/../lib/helpers.php';
// Vérifier les arguments
if ($argc < 3) {
error("Usage: " . basename($argv[0]) . " <environment> <entite_id>");
error("Exemple: " . basename($argv[0]) . " dev 5");
error("Exemple: " . basename($argv[0]) . " dva 5");
exit(1);
}

View File

@@ -15,7 +15,7 @@ require_once __DIR__ . '/../lib/helpers.php';
// Vérifier les arguments
if ($argc < 3) {
error("Usage: " . basename($argv[0]) . " <environment> <user_id>");
error("Exemple: " . basename($argv[0]) . " dev 123");
error("Exemple: " . basename($argv[0]) . " dva 123");
exit(1);
}

View File

@@ -15,7 +15,7 @@ require_once __DIR__ . '/../lib/helpers.php';
// Vérifier les arguments
if ($argc < 2) {
error("Usage: " . basename($argv[0]) . " <environment> [--stripe] [--limit=N]");
error("Exemple: " . basename($argv[0]) . " dev --stripe");
error("Exemple: " . basename($argv[0]) . " dva --stripe");
exit(1);
}

View File

@@ -16,8 +16,8 @@ require_once __DIR__ . '/../lib/helpers.php';
if ($argc < 2) {
error("Usage: " . basename($argv[0]) . " <environment> [--entite=<id>] [--limit=<n>]");
error("Exemple: " . basename($argv[0]) . " dev");
error(" " . basename($argv[0]) . " rec --entite=5");
error(" " . basename($argv[0]) . " dev --entite=10 --limit=20");
error(" " . basename($argv[0]) . " rca --entite=5");
error(" " . basename($argv[0]) . " dva --entite=10 --limit=20");
exit(1);
}

View File

@@ -15,7 +15,7 @@ require_once __DIR__ . '/../lib/helpers.php';
// Vérifier les arguments
if ($argc < 3) {
error("Usage: " . basename($argv[0]) . " <environment> --operation=<id>");
error("Exemple: " . basename($argv[0]) . " dev --operation=123");
error("Exemple: " . basename($argv[0]) . " dva --operation=123");
exit(1);
}

View File

@@ -15,7 +15,7 @@ require_once __DIR__ . '/../lib/helpers.php';
// Vérifier les arguments
if ($argc < 2) {
error("Usage: " . basename($argv[0]) . " <environment> [--entite=X] [--role=Y] [--limit=N]");
error("Exemple: " . basename($argv[0]) . " dev --entite=5 --limit=20");
error("Exemple: " . basename($argv[0]) . " dva --entite=5 --limit=20");
exit(1);
}

View File

@@ -16,7 +16,7 @@ require_once __DIR__ . '/../lib/helpers.php';
// Vérifier les arguments
if ($argc < 3) {
error("Usage: " . basename($argv[0]) . " <environment> <user_id>");
error("Exemple: " . basename($argv[0]) . " dev 123");
error("Exemple: " . basename($argv[0]) . " dva 123");
exit(1);
}

View File

@@ -15,7 +15,7 @@ require_once __DIR__ . '/../lib/helpers.php';
// Vérifier les arguments
if ($argc < 3) {
error("Usage: " . basename($argv[0]) . " <environment> <email>");
error("Exemple: " . basename($argv[0]) . " dev contact@example.com");
error("Exemple: " . basename($argv[0]) . " dva contact@example.com");
exit(1);
}
@@ -91,7 +91,7 @@ try {
// Affichage
echo "\n";
title("RÉSULTATS DE LA RECHERCHE - " . count($matchedUsers) . " utilisateur(s) trouvé(s)");
title("RÉSULTATS DE LA RCAHERCHE - " . count($matchedUsers) . " utilisateur(s) trouvé(s)");
if (count($matchedUsers) > 1) {
warning("Attention: Plusieurs comptes utilisent le même email (autorisé par le système)");

View File

@@ -15,8 +15,8 @@ require_once __DIR__ . '/../lib/helpers.php';
// Vérifier les arguments
if ($argc < 3) {
error("Usage: " . basename($argv[0]) . " <environment> <search_term>");
error("Exemple: " . basename($argv[0]) . " dev plumeliau");
error("Exemple: " . basename($argv[0]) . " rec amicale");
error("Exemple: " . basename($argv[0]) . " dva plumeliau");
error("Exemple: " . basename($argv[0]) . " rca amicale");
exit(1);
}
@@ -253,7 +253,8 @@ try {
echo color("\nVotre choix: ", 'yellow');
$handle = fopen('php://stdin', 'r');
$choice = trim(fgets($handle));
$choice = fgets($handle);
$choice = $choice !== false ? trim($choice) : '';
if ($choice === '0' || $choice === '') {
echo "\n";

View File

@@ -16,9 +16,9 @@ require_once __DIR__ . '/../lib/helpers.php';
// Vérifier les arguments
if ($argc < 3) {
error("Usage: " . basename($argv[0]) . " <environment> <search_string>");
error("Exemple: " . basename($argv[0]) . " dev dupont");
error(" " . basename($argv[0]) . " dev secteur_a");
error(" " . basename($argv[0]) . " dev j.dupont");
error("Exemple: " . basename($argv[0]) . " dva dupont");
error(" " . basename($argv[0]) . " dva secteur_a");
error(" " . basename($argv[0]) . " dva j.dupont");
exit(1);
}
@@ -191,7 +191,7 @@ try {
}
// Affichage
title("RÉSULTATS DE LA RECHERCHE - " . count($matchedUsers) . " utilisateur(s) trouvé(s)");
title("RÉSULTATS DE LA RCAHERCHE - " . count($matchedUsers) . " utilisateur(s) trouvé(s)");
// Préparer les données pour le tableau
$tableData = [];

View File

@@ -79,7 +79,7 @@ class DatabaseConfig {
public function getAvailableEnvironments(): array {
$envs = [];
foreach (['DEV', 'REC', 'PROD'] as $env) {
foreach (['DVA', 'RCA', 'PRA'] as $env) {
if ($this->get("{$env}_ENABLED") === 'true') {
$envs[] = $env;
}

281
bao/deploy-bao.sh Executable file
View File

@@ -0,0 +1,281 @@
#!/bin/bash
# Script de déploiement unifié pour GEOSECTOR BAO
# Version: 1.0 (Janvier 2025)
# Auteur: Pierre (avec l'aide de Claude)
#
# Usage:
# ./deploy-bao.sh # Déploiement local DVA (code → container dva-geo)
# ./deploy-bao.sh rca # Livraison RECETTE (code → rca-geo)
# ./deploy-bao.sh pra # Livraison PRODUCTION (code → pra-geo)
set -euo pipefail
# =====================================
# Configuration générale
# =====================================
# Paramètre optionnel pour l'environnement cible
TARGET_ENV=${1:-dva}
# Configuration SSH
HOST_KEY="/home/pierre/.ssh/id_rsa_mbpi"
HOST_PORT="22"
HOST_USER="root"
# Configuration des serveurs
RCA_HOST="195.154.80.116" # IN3 - Serveur de recette
PRA_HOST="51.159.7.190" # IN4 - Serveur de production
# Configuration Incus
INCUS_PROJECT="default"
BAO_PATH="/var/www/geosector/bao"
FINAL_OWNER="root"
FINAL_GROUP="root"
# Configuration de sauvegarde
BACKUP_DIR="/data/backup/geosector/bao"
# Couleurs pour les messages
GREEN='\033[0;32m'
RED='\033[0;31m'
YELLOW='\033[0;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# =====================================
# Fonctions utilitaires
# =====================================
echo_step() {
echo -e "${GREEN}==>${NC} $1"
}
echo_info() {
echo -e "${BLUE}Info:${NC} $1"
}
echo_warning() {
echo -e "${YELLOW}Warning:${NC} $1"
}
echo_error() {
echo -e "${RED}Error:${NC} $1"
exit 1
}
# Fonction pour nettoyer les anciens backups
cleanup_old_backups() {
local prefix=""
case $TARGET_ENV in
"dva") prefix="bao-dva-" ;;
"rca") prefix="bao-rca-" ;;
"pra") prefix="bao-pra-" ;;
esac
echo_info "Cleaning old backups (keeping last 10)..."
ls -t "${BACKUP_DIR}"/${prefix}*.tar.gz 2>/dev/null | tail -n +11 | xargs -r rm -f && {
REMAINING_BACKUPS=$(ls "${BACKUP_DIR}"/${prefix}*.tar.gz 2>/dev/null | wc -l)
echo_info "Kept ${REMAINING_BACKUPS} backup(s) for ${TARGET_ENV}"
}
}
# =====================================
# Détermination de la configuration selon l'environnement
# =====================================
case $TARGET_ENV in
"dva")
echo_step "Configuring for DVA deployment on IN3"
DEST_CONTAINER="dva-geo"
DEST_HOST="${RCA_HOST}" # IN3
ENV_NAME="DEVELOPMENT"
;;
"rca")
echo_step "Configuring for RECETTE delivery"
DEST_CONTAINER="rca-geo"
DEST_HOST="${RCA_HOST}" # IN3
ENV_NAME="RECETTE"
;;
"pra")
echo_step "Configuring for PRODUCTION delivery"
DEST_CONTAINER="pra-geo"
DEST_HOST="${PRA_HOST}" # IN4
ENV_NAME="PRODUCTION"
;;
*)
echo_error "Unknown environment: $TARGET_ENV. Use 'dva', 'rca' or 'pra'"
;;
esac
echo_info "Deployment flow: ${ENV_NAME}"
# =====================================
# Création de l'archive depuis le code local
# =====================================
# Créer le dossier de backup s'il n'existe pas
if [ ! -d "${BACKUP_DIR}" ]; then
echo_info "Creating backup directory ${BACKUP_DIR}..."
mkdir -p "${BACKUP_DIR}" || echo_error "Failed to create backup directory"
fi
# Horodatage format YYYYMMDDHH
TIMESTAMP=$(date +%Y%m%d%H)
# Nom de l'archive selon l'environnement
case $TARGET_ENV in
"dva")
ARCHIVE_NAME="bao-dva-${TIMESTAMP}.tar.gz"
;;
"rca")
ARCHIVE_NAME="bao-rca-${TIMESTAMP}.tar.gz"
;;
"pra")
ARCHIVE_NAME="bao-pra-${TIMESTAMP}.tar.gz"
;;
esac
ARCHIVE_PATH="${BACKUP_DIR}/${ARCHIVE_NAME}"
echo_step "Creating archive from local code..."
# Vérification des fichiers requis
if [ ! -f "config/database.php" ]; then
echo_error "Configuration file missing"
fi
if [ ! -f "lib/CryptoService.php" ]; then
echo_error "CryptoService missing"
fi
tar --exclude='.git' \
--exclude='.gitignore' \
--exclude='.vscode' \
--exclude='*.template' \
--exclude='*.sh' \
--exclude='config/.env' \
--exclude='*.log' \
--exclude='.DS_Store' \
--exclude='README.md' \
--exclude="*.tar.gz" \
--exclude='*.swp' \
--exclude='*.swo' \
--exclude='*~' \
-czf "${ARCHIVE_PATH}" . 2>/dev/null || echo_error "Failed to create archive"
echo_info "Archive created: ${ARCHIVE_PATH}"
echo_info "Archive size: $(du -h "${ARCHIVE_PATH}" | cut -f1)"
# Nettoyer les anciens backups
cleanup_old_backups
# =====================================
# Déploiement sur le container distant
# =====================================
echo_step "Deploying to remote container ${DEST_CONTAINER} on ${DEST_HOST}..."
# Créer une sauvegarde sur le serveur de destination
BACKUP_TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
REMOTE_BACKUP_DIR="${BAO_PATH}_backup_${BACKUP_TIMESTAMP}"
echo_info "Creating backup on destination..."
ssh -i ${HOST_KEY} -p ${HOST_PORT} ${HOST_USER}@${DEST_HOST} "
incus project switch ${INCUS_PROJECT} &&
incus exec ${DEST_CONTAINER} -- test -d ${BAO_PATH} &&
incus exec ${DEST_CONTAINER} -- cp -r ${BAO_PATH} ${REMOTE_BACKUP_DIR} &&
echo 'Backup created: ${REMOTE_BACKUP_DIR}'
" || echo_warning "No existing installation to backup"
# Transférer l'archive vers le serveur de destination
echo_info "Transferring archive to ${DEST_HOST}..."
scp -i ${HOST_KEY} -P ${HOST_PORT} ${ARCHIVE_PATH} ${HOST_USER}@${DEST_HOST}:/tmp/${ARCHIVE_NAME} || echo_error "Failed to copy archive to destination"
# Déployer sur le container de destination
echo_info "Extracting on destination container..."
ssh -i ${HOST_KEY} -p ${HOST_PORT} ${HOST_USER}@${DEST_HOST} "
set -euo pipefail
# Pousser l'archive dans le container
incus project switch ${INCUS_PROJECT} &&
incus file push /tmp/${ARCHIVE_NAME} ${DEST_CONTAINER}/tmp/${ARCHIVE_NAME} &&
# Créer le répertoire parent et BAO s'ils n'existent pas
incus exec ${DEST_CONTAINER} -- mkdir -p ${BAO_PATH} &&
# Nettoyer le répertoire complètement
incus exec ${DEST_CONTAINER} -- rm -rf ${BAO_PATH}/* &&
# Extraire l'archive
incus exec ${DEST_CONTAINER} -- tar -xzf /tmp/${ARCHIVE_NAME} -C ${BAO_PATH}/ &&
# Utiliser la config container (connexion directe maria3/maria4)
incus exec ${DEST_CONTAINER} -- bash -c 'if [ -f ${BAO_PATH}/config/.env.container ]; then cp ${BAO_PATH}/config/.env.container ${BAO_PATH}/config/.env; fi' &&
# Permissions
incus exec ${DEST_CONTAINER} -- chown -R ${FINAL_OWNER}:${FINAL_GROUP} ${BAO_PATH} &&
incus exec ${DEST_CONTAINER} -- find ${BAO_PATH} -type d -exec chmod 755 {} \\; &&
incus exec ${DEST_CONTAINER} -- find ${BAO_PATH} -type f -exec chmod 644 {} \\; &&
# Permissions exécutables pour les scripts bin/ (avec vérification)
incus exec ${DEST_CONTAINER} -- bash -c 'if [ -d ${BAO_PATH}/bin ]; then chmod +x ${BAO_PATH}/bin/*; fi' &&
# Créer config/.env depuis le template si absent
incus exec ${DEST_CONTAINER} -- bash -c 'if [ ! -f ${BAO_PATH}/config/.env ] && [ -f ${BAO_PATH}/config/.env.example ]; then cp ${BAO_PATH}/config/.env.example ${BAO_PATH}/config/.env && echo \"WARNING: config/.env created from template - you need to configure it!\"; fi' &&
# Nettoyage
incus exec ${DEST_CONTAINER} -- rm -f /tmp/${ARCHIVE_NAME} &&
rm -f /tmp/${ARCHIVE_NAME}
" || echo_error "Deployment failed on destination"
echo_info "Remote backup saved: ${REMOTE_BACKUP_DIR} on ${DEST_CONTAINER}"
# =====================================
# Configuration post-déploiement
# =====================================
echo_step "Post-deployment configuration..."
ssh -i ${HOST_KEY} -p ${HOST_PORT} ${HOST_USER}@${DEST_HOST} "
incus exec ${DEST_CONTAINER} -- bash -c '
# Afficher l'état de la configuration
if [ -f ${BAO_PATH}/config/.env ]; then
echo \"✓ config/.env exists\"
else
echo \"✗ config/.env missing - copy from .env.example and configure\"
fi
# Vérifier PHP
php -v > /dev/null 2>&1 && echo \"✓ PHP available\" || echo \"✗ PHP missing\"
# Vérifier les extensions PHP requises
php -m | grep -q pdo && echo \"✓ PHP PDO extension\" || echo \"✗ PHP PDO missing\"
php -m | grep -q openssl && echo \"✓ PHP OpenSSL extension\" || echo \"✗ PHP OpenSSL missing\"
php -m | grep -q mbstring && echo \"✓ PHP mbstring extension\" || echo \"✗ PHP mbstring missing\"
'
" && echo_info "Post-deployment check completed" || echo_warning "Post-deployment check failed"
# L'archive reste dans le dossier de backup
echo_info "Archive preserved in backup directory: ${ARCHIVE_PATH}"
# =====================================
# Instructions post-installation
# =====================================
echo_step "Post-installation instructions:"
echo_info "1. Connect to container: ssh -i ${HOST_KEY} ${HOST_USER}@${DEST_HOST} 'incus exec ${DEST_CONTAINER} -- bash'"
echo_info "2. Configuration already set from .env.container (direct connection to maria3/maria4)"
echo_info "3. Test with: cd ${BAO_PATH} && ./bin/bao"
# =====================================
# Résumé final
# =====================================
echo_step "Deployment completed successfully!"
echo_info "Environment: ${ENV_NAME}"
echo_info "Deployed from local code to container ${DEST_CONTAINER} on ${DEST_HOST}"
echo_info "Deployment completed at: $(date)"
# Journaliser le déploiement
echo "$(date '+%Y-%m-%d %H:%M:%S') - BAO deployed to ${ENV_NAME} (${DEST_CONTAINER}) - Archive: ${ARCHIVE_NAME}" >> ~/.geo_deploy_history

File diff suppressed because one or more lines are too long