#!/usr/bin/env bash set -e USERS_FILE="config/users" # --- Funciones auxiliares --- function ensure_users_file() { if [ ! -f "$USERS_FILE" ]; then echo "⚠️ No existe $USERS_FILE. Creándolo..." mkdir -p config touch "$USERS_FILE" fi } function restart_radicale() { echo "" echo "🔄 Reiniciando contenedor Radicale..." docker compose restart radicale >/dev/null 2>&1 || true echo "✅ Radicale reiniciado correctamente." echo "" } function list_users() { ensure_users_file echo "👥 Usuarios actuales:" if [ -s "$USERS_FILE" ]; then cut -d':' -f1 "$USERS_FILE" else echo "(ninguno)" fi echo "" } function add_user() { ensure_users_file read -rp "Ingrese el nombre de usuario nuevo: " user if grep -q "^$user:" "$USERS_FILE"; then echo "⚠️ El usuario '$user' ya existe." return fi htpasswd -B "$USERS_FILE" "$user" restart_radicale } function edit_user() { ensure_users_file read -rp "Ingrese el usuario a modificar: " user if ! grep -q "^$user:" "$USERS_FILE"; then echo "⚠️ El usuario '$user' no existe." return fi echo "✏️ Cambiando contraseña para '$user'..." htpasswd -B "$USERS_FILE" "$user" restart_radicale } function delete_user() { ensure_users_file read -rp "Ingrese el usuario a eliminar: " user if ! grep -q "^$user:" "$USERS_FILE"; then echo "⚠️ El usuario '$user' no existe." return fi read -rp "¿Estás seguro de eliminar '$user'? (s/n): " confirm if [[ "$confirm" =~ ^[sS]$ ]]; then sed -i "/^$user:/d" "$USERS_FILE" restart_radicale echo "❌ Usuario '$user' eliminado." else echo "🚫 Operación cancelada." fi echo "" } # --- Menú interactivo --- while true; do echo "========================================" echo "🔐 GESTOR DE USUARIOS RADICALE" echo "========================================" echo "1️⃣ Listar usuarios" echo "2️⃣ Crear nuevo usuario" echo "3️⃣ Editar contraseña de usuario" echo "4️⃣ Eliminar usuario" echo "5️⃣ Salir" echo "----------------------------------------" read -rp "Selecciona una opción [1-5]: " opt echo "" case "$opt" in 1) list_users ;; 2) add_user ;; 3) edit_user ;; 4) delete_user ;; 5) echo "👋 Saliendo..."; exit 0 ;; *) echo "❗ Opción no válida." ;; esac echo "" read -rp "Presiona ENTER para continuar..." pause clear done