egutierrez 31c3de461b feat: Add InfCloud config.js with English default and persistence settings
- Set English as default language with Spanish available
- Enable session persistence and auto-login
- Configure localStorage for user preferences
- Add comprehensive user settings persistence
- Remove config.js from .gitignore to track in repo

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-13 01:56:29 +01:00
2025-11-13 01:11:01 +01:00
2025-11-13 01:11:01 +01:00
2025-11-13 01:11:01 +01:00
2025-11-13 01:11:01 +01:00
2025-11-13 01:11:01 +01:00
2025-11-13 01:11:01 +01:00
2025-11-13 01:11:01 +01:00
2025-11-13 01:11:01 +01:00
2025-11-13 01:11:01 +01:00
2025-11-13 01:11:01 +01:00

Calendario de Contactos - CalDAV/CardDAV

Sistema completo de calendario y contactos usando Radicale e InfCloud con Docker.

🚀 Configuración Rápida

  1. Configurar variables de entorno:

    make setup
    # Edita el archivo .env con tus credenciales
    
  2. Iniciar servicios:

    make start
    
  3. Acceder a la aplicación:

📁 Estructura del Proyecto

calendario_contactos/
├── .env                     # Variables de entorno (no incluir en git)
├── .env.example            # Plantilla de variables de entorno
├── docker-compose.yml      # Configuración de servicios
├── Makefile               # Comandos de gestión
├── config/                # Configuración de Radicale
│   ├── config            # Configuración principal de Radicale
│   └── users             # Usuarios y contraseñas (bcrypt)
├── data/                 # Datos persistentes de Radicale
└── infcloud_config/      # Configuración de InfCloud
    ├── config.js         # Configuración generada (no editar)
    ├── config.js.template # Plantilla de configuración
    └── nginx-infcloud.conf # Configuración nginx

🛠️ Comandos Disponibles

make help              # Mostrar ayuda
make setup             # Configuración inicial (copia .env.example)
make start             # Generar config e iniciar servicios
make stop              # Detener servicios
make restart           # Reiniciar servicios
make config            # Regenerar config.js desde .env
make status            # Mostrar estado de servicios
make test-connection   # Probar conexión con Radicale
make logs              # Mostrar logs de todos los servicios
make logs-infcloud     # Mostrar logs solo de InfCloud
make logs-radicale     # Mostrar logs solo de Radicale
make clean             # Limpiar configuración generada

⚙️ Variables de Entorno

Configura estas variables en tu archivo .env:

# Configuración de Radicale
RADICALE_USERNAME=admin
RADICALE_PASSWORD=tu_contraseña_segura_aqui

# Configuración de Red
RADICALE_PORT=5232
INFCLOUD_PORT=8090

# Configuración de Zona Horaria
TZ=Europe/Madrid

# URLs base
RADICALE_BASE_URL=http://localhost:5232
INFCLOUD_BASE_URL=http://localhost:8090

🔧 Servicios

Radicale (CalDAV/CardDAV Server)

  • Puerto: 5232
  • Función: Servidor CalDAV/CardDAV que almacena calendarios y contactos
  • Configuración: /config/config
  • Datos: /data/collections

InfCloud (Web Client)

  • Puerto: 8090
  • Función: Cliente web para calendarios y contactos
  • URL: http://localhost:8090/ (también disponible en /infcloud/)
  • Configuración: Generada automáticamente desde .env

PHP-FPM

  • Función: Soporte PHP para InfCloud (si es necesario)

🔐 Gestión de Usuarios

Agregar un nuevo usuario:

# Generar hash de contraseña para cualquier usuario
python3 -c "import crypt; print('nombre_usuario:' + crypt.crypt('contraseña', crypt.mksalt(crypt.METHOD_BLOWFISH)))" >> config/users

# Ejemplo para crear usuario 'juan':
python3 -c "import crypt; print('juan:' + crypt.crypt('mi_password', crypt.mksalt(crypt.METHOD_BLOWFISH)))" >> config/users

# Reiniciar Radicale
docker compose restart radicale

Usuarios de ejemplo:

  • admin: kIKTu4rI5MBBJjTqujbCp61ZFN30Y8adI
  • user1: password123

Cambiar contraseña:

  1. Edita config/users con el nuevo hash bcrypt
  2. Actualiza .env con la nueva contraseña
  3. Regenera configuración: make config
  4. Reinicia servicios: make restart

📱 Acceso desde Dispositivos

Android (DAVx5)

iOS (Configuración nativa)

  • Servidor: tu-servidor
  • Puerto: 5232
  • Ruta principal: /usuario/
  • SSL: No (para desarrollo local)

🐛 Resolución de Problemas

Error 405 PROPFIND

Solucionado: Configuración nginx con proxy y rewrite rules

Error 401 Unauthorized

  • Verifica credenciales en .env
  • Regenera config: make config
  • Verifica usuario en config/users

Error de conexión

make status          # Verificar estado de servicios
make logs           # Ver logs para errores
make test-connection # Probar conexión directa

Regenerar todo

make clean          # Limpiar configuración
make config         # Regenerar config.js
make restart        # Reiniciar servicios

📋 Verificación Post-instalación

  1. Servicios ejecutándose:

    make status
    
  2. Conexión a Radicale:

    make test-connection
    
  3. Acceso a InfCloud:

    • Navegar a http://localhost:8090/
    • Login dinámico: Cualquier usuario puede iniciar sesión
    • Usuarios disponibles: admin, user1, o cualquier usuario que agregues
  4. Verificar que no hay errores 405:

    curl -u usuario:contraseña -X PROPFIND http://localhost:8090/caldav.php/usuario/ -H "Depth: 0" -v 2>&1 | grep "HTTP"
    # Debe devolver: HTTP/1.1 207 Multi-Status
    

🔒 Seguridad

  • NO hardcodear contraseñas en archivos de configuración
  • Usar variables de entorno (.env)
  • Mantener .env fuera del control de versiones
  • Usar contraseñas seguras y únicas
  • Configurar HTTPS en producción

📚 Referencias

🎯 Problemas Resueltos

Error PROPFIND 405 Method Not Allowed

Problema: InfCloud enviaba peticiones PROPFIND a /caldav.php/ que devolvían error 405.

Solución:

  1. Configuración nginx con proxy que redirige peticiones CalDAV a Radicale
  2. Rewrite rules para traducir rutas /caldav.php/ y /radicale/ a rutas nativas de Radicale
  3. Headers CORS completos para WebDAV
  4. Sistema de variables de entorno para configuración segura

Configuración de Credenciales Segura

Problema: Contraseñas hardcodeadas en archivos de configuración.

Solución:

  1. Sistema de variables de entorno con .env y .env.example
  2. Generación automática de config.js desde template
  3. Makefile para automatizar tareas comunes
  4. Hash bcrypt para almacenamiento seguro de contraseñas

Soporte Multi-Usuario Dinámico

Funcionalidad: InfCloud ahora soporta múltiples usuarios con login dinámico.

Características:

  1. Login dinámico: Los usuarios ingresan sus credenciales en la pantalla de login
  2. Múltiples usuarios: Soporte para admin, user1, user2, etc.
  3. Nginx universal: Maneja rutas para cualquier usuario (/usuario/)
  4. Configuración automática: InfCloud detecta usuarios automáticamente

Pruebas realizadas:

  • admin: HTTP 207 Multi-Status
  • user1: HTTP 207 Multi-Status
  • Cualquier usuario nuevo funciona automáticamente
S
Description
No description provided
Readme 7.6 MiB
Languages
JavaScript 93.1%
CSS 3.4%
HTML 3%
Shell 0.4%