Files
geo/bao/bin/bao
pierre 570a1fa1f0 feat: Version 3.3.4 - Nouvelle architecture pages, optimisations widgets Flutter et API
- Mise à jour VERSION vers 3.3.4
- Optimisations et révisions architecture API (deploy-api.sh, scripts de migration)
- Ajout documentation Stripe Tap to Pay complète
- Migration vers polices Inter Variable pour Flutter
- Optimisations build Android et nettoyage fichiers temporaires
- Amélioration système de déploiement avec gestion backups
- Ajout scripts CRON et migrations base de données

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-05 20:11:15 +02:00

273 lines
8.2 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

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.

#!/usr/bin/env bash
# =============================================================================
# BAO - Back-office Admin Operations
# Menu principal interactif pour gérer les données Geosector
# =============================================================================
set -euo pipefail
# Répertoire du script
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
BAO_ROOT="$(dirname "$SCRIPT_DIR")"
ENV_FILE="$BAO_ROOT/config/.env"
# Couleurs
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
BLUE='\033[0;34m'
MAGENTA='\033[0;35m'
CYAN='\033[0;36m'
BOLD='\033[1m'
NC='\033[0m' # No Color
# Fonctions d'affichage
log_info() {
echo -e "${BLUE}${NC} $*"
}
log_success() {
echo -e "${GREEN}${NC} $*"
}
log_error() {
echo -e "${RED}${NC} $*" >&2
}
log_warning() {
echo -e "${YELLOW}${NC} $*"
}
# Affiche le titre principal
show_header() {
clear
echo -e "${CYAN}"
cat << "EOF"
╔════════════════════════════════════════════════════════════════╗
║ ║
║ ██████╗ █████╗ ██████╗ ║
║ ██╔══██╗██╔══██╗██╔═══██╗ ║
║ ██████╔╝███████║██║ ██║ ║
║ ██╔══██╗██╔══██║██║ ██║ ║
║ ██████╔╝██║ ██║╚██████╔╝ ║
║ ╚═════╝ ╚═╝ ╚═╝ ╚═════╝ ║
║ ║
║ Back-office Admin Operations - Geosector ║
║ ║
╚════════════════════════════════════════════════════════════════╝
EOF
echo -e "${NC}\n"
}
# Charge une variable depuis .env
get_env_var() {
local key="$1"
grep "^${key}=" "$ENV_FILE" 2>/dev/null | cut -d'=' -f2- | tr -d ' "'
}
# Sélectionne l'environnement
select_environment() {
echo -e "${BOLD}Sélectionnez un environnement :${NC}\n"
local envs=()
local counter=1
for env in DEV REC PROD; do
local enabled=$(get_env_var "${env}_ENABLED")
if [[ "$enabled" == "true" ]]; then
local ssh_host=$(get_env_var "${env}_SSH_HOST")
echo -e " ${GREEN}${counter})${NC} ${BOLD}${env}${NC} (${ssh_host})"
envs+=("$env")
((counter++))
else
echo -e " ${YELLOW}-${NC} ${env} ${YELLOW}(désactivé)${NC}"
fi
done
echo -e " ${RED}q)${NC} Quitter\n"
while true; do
read -p "Votre choix: " choice
if [[ "$choice" == "q" || "$choice" == "Q" ]]; then
echo ""
log_info "Au revoir !"
exit 0
fi
if [[ "$choice" =~ ^[0-9]+$ ]] && [[ $choice -ge 1 ]] && [[ $choice -le ${#envs[@]} ]]; then
SELECTED_ENV="${envs[$((choice-1))]}"
return 0
fi
log_error "Choix invalide"
done
}
# Affiche le menu des actions
show_action_menu() {
echo -e "\n${BOLD}═══════════════════════════════════════════════════════════════${NC}"
echo -e "${BOLD}Environnement: ${GREEN}${SELECTED_ENV}${NC}"
echo -e "${BOLD}═══════════════════════════════════════════════════════════════${NC}\n"
echo -e "${BOLD}Actions disponibles :${NC}\n"
echo -e " ${CYAN}1)${NC} Lister les utilisateurs"
echo -e " ${CYAN}2)${NC} Décrypter un utilisateur spécifique"
echo -e " ${CYAN}3)${NC} Rechercher par email"
echo -e " ${CYAN}4)${NC} Lister les entités (amicales)"
echo -e " ${CYAN}5)${NC} Décrypter une entité spécifique"
echo -e " ${CYAN}6)${NC} État des tunnels SSH"
echo -e " ${CYAN}7)${NC} Fermer tous les tunnels"
echo -e " ${YELLOW}8)${NC} Changer d'environnement"
echo -e " ${RED}q)${NC} Quitter\n"
}
# Execute une action
execute_action() {
local action="$1"
case "$action" in
1)
echo ""
read -p "Filtrer par entité ? (ID ou vide): " entite_filter
read -p "Filtrer par rôle ? (ID ou vide): " role_filter
read -p "Limite de résultats ? (défaut: 50): " limit_input
local cmd="$SCRIPT_DIR/list-users $SELECTED_ENV"
[[ -n "$entite_filter" ]] && cmd="$cmd --entite=$entite_filter"
[[ -n "$role_filter" ]] && cmd="$cmd --role=$role_filter"
[[ -n "$limit_input" ]] && cmd="$cmd --limit=$limit_input"
echo ""
$cmd
;;
2)
echo ""
read -p "ID de l'utilisateur: " user_id
if [[ -z "$user_id" || ! "$user_id" =~ ^[0-9]+$ ]]; then
log_error "ID invalide"
return 1
fi
echo ""
"$SCRIPT_DIR/decrypt-user" "$SELECTED_ENV" "$user_id"
;;
3)
echo ""
read -p "Email à rechercher: " email
if [[ -z "$email" ]]; then
log_error "Email vide"
return 1
fi
echo ""
"$SCRIPT_DIR/search-email" "$SELECTED_ENV" "$email"
;;
4)
echo ""
read -p "Uniquement les entités avec Stripe ? (o/N): " stripe_filter
read -p "Limite de résultats ? (défaut: 50): " limit_input
local cmd="$SCRIPT_DIR/list-entites $SELECTED_ENV"
[[ "$stripe_filter" == "o" || "$stripe_filter" == "O" ]] && cmd="$cmd --stripe"
[[ -n "$limit_input" ]] && cmd="$cmd --limit=$limit_input"
echo ""
$cmd
;;
5)
echo ""
read -p "ID de l'entité: " entite_id
if [[ -z "$entite_id" || ! "$entite_id" =~ ^[0-9]+$ ]]; then
log_error "ID invalide"
return 1
fi
echo ""
"$SCRIPT_DIR/decrypt-entite" "$SELECTED_ENV" "$entite_id"
;;
6)
echo ""
"$SCRIPT_DIR/_ssh-tunnel.sh" status
;;
7)
echo ""
"$SCRIPT_DIR/_ssh-tunnel.sh" close-all
;;
8)
return 2 # Signal pour changer d'environnement
;;
q|Q)
echo ""
log_info "Fermeture des tunnels..."
"$SCRIPT_DIR/_ssh-tunnel.sh" close-all
echo ""
log_success "Au revoir !"
exit 0
;;
*)
log_error "Action invalide"
return 1
;;
esac
return 0
}
# Boucle principale
main() {
if [[ ! -f "$ENV_FILE" ]]; then
log_error "Fichier .env introuvable: $ENV_FILE"
log_info "Copiez config/.env.example vers config/.env"
exit 1
fi
# Vérifier que PHP est installé
if ! command -v php >/dev/null 2>&1; then
log_error "PHP n'est pas installé"
exit 1
fi
while true; do
show_header
select_environment
while true; do
show_header
show_action_menu
read -p "Votre choix: " action
execute_action "$action"
local exit_code=$?
if [[ $exit_code -eq 2 ]]; then
# Changer d'environnement
break
fi
echo ""
read -p "Appuyez sur Entrée pour continuer..."
done
done
}
# Gestion de Ctrl+C
trap 'echo ""; log_info "Fermeture des tunnels..."; $SCRIPT_DIR/_ssh-tunnel.sh close-all 2>/dev/null; echo ""; exit 0' INT
main "$@"