Skip to content

Repository files navigation

OpenCredential Admin Web

Interfaz web administrativa para gestionar la aplicación OpenCredential. Permite gestionar:

  • usuarios
  • carreras
  • semestres
  • computadores
  • importacion masiva por archivo plano
  • visualizacion grafica del estado y uso de los equipos

Creditos y licencia

OpenCredential AdminWeb fue desarrollado por Pedro Pablo Bermúdez Medina y Yuri Mercedes Bermúdez Mazuera.

Licencia: BSD 3-Clause. Consulta el archivo LICENSE.

Ejecucion local

$env:DOTNET_CLI_HOME='C:\Github\pgina-mysql8\.dotnet-home'
dotnet run --project C:\Github\pgina-mysql8\OpenCredential.AdminWeb\OpenCredential.AdminWeb.csproj

Modos de persistencia

La aplicacion soporta dos modos:

  • Json: util para demo o pruebas rapidas.
  • Sql: recomendado para produccion en PostgreSQL o MySQL.

Configuracion base:

"Database": {
  "Mode": "Sql",
  "Provider": "PostgreSql",
  "ConnectionString": "Host=localhost;Port=5432;Database=opencredential_admin;Username=opencredential;Password=<define-aqui-una-clave-segura>",
  "AutoInitialize": true
}

Cuando AutoInitialize=true, la aplicacion crea si faltan las tablas:

  • users
  • careers
  • levels
  • computers
  • rooms
  • room_positions
  • usage_records
  • admin_audit_log

Esto mantiene compatibilidad con el esquema academico del proyecto y agrega las tablas necesarias para administrar equipos y estadisticas de uso.

Estado operativo de equipos

La consola ya no se basa solo en logoutstamp IS NULL para determinar ocupacion. Cuando la base usa login_sessions con heartbeat y reconciliacion de sesiones, AdminWeb calcula estados operativos mas precisos:

  • Disponible
  • Ocupado
  • Bloqueado
  • Desconectado
  • Sesion huerfana
  • Deshabilitado

En PostgreSQL y MySQL/MariaDB la lectura contempla estos campos cuando existen:

  • session_state
  • last_heartbeat_at
  • session_end_reason
  • client_session_id
  • windows_session_id

Esto permite distinguir una sesion realmente activa de una bloqueada, desconectada o huerfana.

Acceso administrativo

La consola ahora exige autenticacion por cookie para todos los endpoints de administracion bajo /api, excepto:

  • /api/auth/login
  • /api/auth/logout
  • /api/auth/me
  • /health

Configuracion base:

"AdminAuth": {
  "Enabled": true,
  "Username": "admin",
  "Password": "<define-aqui-una-clave-segura>",
  "PasswordHash": "",
  "HashMethod": "BCRYPT",
  "Role": "SuperAdmin",
  "CookieName": "opencredential_admin",
  "SessionHours": 12,
  "Accounts": []
}

Recomendaciones:

  • En produccion define AdminAuth__Username y AdminAuth__Password desde variables de entorno o secretos del despliegue
  • Si prefieres no guardar clave en texto plano, usa AdminAuth__PasswordHash junto con AdminAuth__HashMethod
  • Publica la app detras de HTTPS cuando la expongas fuera de la red interna
  • No versiones App_Data/, keys/, .env, cookies ni logs

Roles soportados:

  • SuperAdmin: acceso total, incluyendo auditoria
  • Coordinator: gestion de usuarios, carreras, semestres, claves e importacion
  • Operator: gestion de computadores y registros de uso
  • Viewer: solo lectura de dashboard y resumen

Tambien puedes configurar varias cuentas:

"AdminAuth": {
  "Enabled": true,
  "Accounts": [
    { "Username": "admin", "Password": "cambiar", "Role": "SuperAdmin" },
    { "Username": "coordinacion", "Password": "cambiar", "Role": "Coordinator" },
    { "Username": "soporte", "Password": "cambiar", "Role": "Operator" },
    { "Username": "consulta", "Password": "cambiar", "Role": "Viewer" }
  ]
}

Auditoria

La consola registra eventos administrativos en la tabla admin_audit_log o en el almacenamiento JSON, incluyendo:

  • login correcto y login fallido
  • logout
  • creacion, edicion y eliminacion de usuarios, carreras, semestres y equipos
  • restablecimiento de claves
  • importacion masiva de usuarios

Cada evento guarda actor, accion, entidad, resumen, IP remota y fecha UTC.

Contenedores

La aplicacion quedo preparada para desplegarse en Docker y correr sin cambios sobre una VM Linux o contenedor LXC en Proxmox que tenga Docker Engine y Docker Compose.

Construir imagen

docker build -t opencredential-adminweb:latest .

Ejecutar contenedor

docker run -d \
  --name opencredential-adminweb \
  -p 8080:8080 \
  -e ASPNETCORE_ENVIRONMENT=Production \
  -e AdminAuth__Username=admin \
  -e AdminAuth__Password=CAMBIA_ESTA_CLAVE \
  -e ADMINWEB_DATA_DIR=/data \
  -v opencredential_adminweb_data:/data \
  --restart unless-stopped \
  opencredential-adminweb:latest

Si usas la imagen publicada en Docker Hub:

docker run -d \
  --name opencredential-adminweb \
  -p 8080:8080 \
  -e ASPNETCORE_ENVIRONMENT=Production \
  -e AdminAuth__Username=admin \
  -e AdminAuth__Password=CAMBIA_ESTA_CLAVE \
  -e AdminAuth__Role=SuperAdmin \
  -e ADMINWEB_DATA_DIR=/data \
  -v opencredential_adminweb_data:/data \
  --restart unless-stopped \
  pedropablobm/opencredential-adminweb:test

La aplicacion puede iniciar en modo Json y luego configurarse desde la interfaz para conectarse a una base externa PostgreSQL o MySQL.

Configurar base externa desde la interfaz

  1. Inicia sesion como SuperAdmin.
  2. Ve al panel Configuracion de base de datos.
  3. Selecciona PostgreSQL o MySQL / MariaDB.
  4. Captura host, puerto, base de datos, usuario, clave y modo SSL.
  5. Usa Probar conexion.
  6. Usa Ajustar tablas de AdminWeb para crear o corregir las tablas auxiliares de la consola web sobre una base ya existente de OpenCredential.
  7. Si la conexion debe quedar persistida para los siguientes reinicios, usa Guardar configuracion.
  8. Reinicia el contenedor:
docker restart opencredential-adminweb

La configuracion se guarda en /data/adminweb-runtime.json, por eso es importante mantener montado el volumen opencredential_adminweb_data:/data.

Ajustar tablas auxiliares sin reinstalar

Si OpenCredential ya fue desplegado antes y solo necesitas que la consola agregue o corrija sus tablas complementarias:

  1. Ve a Configuracion
  2. Captura o confirma la conexion actual
  3. Pulsa Probar conexion
  4. Pulsa Ajustar tablas de AdminWeb

Ese boton reutiliza la misma logica de esquema del modo AutoInitialize, pero ejecutada manualmente desde la interfaz. Sirve para:

  • crear tablas nuevas de AdminWeb si faltan
  • agregar columnas nuevas compatibles con versiones recientes
  • dejar lista la consola sin reinstalar ni reconstruir la base base de OpenCredential

Ejecutar con Compose

docker compose up -d --build

El compose incluido levanta:

  • opencredential-adminweb
  • postgres

Persistencia

Segun el modo:

  • Json: los datos se almacenan en admin-store.json
  • Sql: los datos se guardan en PostgreSQL o MySQL

Para Json:

  • En desarrollo: OpenCredential.AdminWeb/App_Data/admin-store.json
  • En contenedor: /data/admin-store.json

La ruta se puede cambiar con la variable de entorno ADMINWEB_DATA_DIR.

Las llaves de autenticacion por cookie tambien se persisten en:

  • En desarrollo: OpenCredential.AdminWeb/App_Data/keys
  • En contenedor: /data/keys

Reverse Proxy

La app acepta encabezados X-Forwarded-*, por lo que se puede publicar detras de Nginx, Traefik o HAProxy en Proxmox.

Ejemplo Nginx:

server {
    listen 80;
    server_name admin.midominio.local;

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

Salud del servicio

Endpoint de verificacion:

/health

Despliegue sugerido en Proxmox

Recomendacion: no instales Docker directamente sobre el host Proxmox VE. Mantén el host limpio y crea una VM Debian/Ubuntu para esta aplicacion.

Instalacion automatizada

En una VM Debian/Ubuntu recien creada:

sudo apt-get update
sudo apt-get install -y git
git clone https://github.com/pedropablobm/OpenCredential.AdminWeb.git
cd OpenCredential.AdminWeb
sudo bash scripts/install-proxmox-vm.sh

Variables opcionales:

sudo ADMINWEB_PORT=8080 ADMIN_USERNAME=admin bash scripts/install-proxmox-vm.sh

El script instala Docker, clona el repositorio en /opt/opencredential-adminweb, genera credenciales seguras en .env y ejecuta docker compose up -d --build.

Nota: si el repositorio es privado, primero debes autenticar git clone con un token de GitHub o subir este script a una ubicacion publica. Las URL de raw.githubusercontent.com no funcionan sin acceso publico al archivo.

Instalacion manual

  1. Crear una VM Debian/Ubuntu en Proxmox.
  2. Instalar Docker Engine y Docker Compose Plugin.
  3. Clonar este repositorio en el servidor.
  4. Crear un archivo .env con credenciales seguras a partir de .env.example.
  5. Ejecutar docker compose up -d --build.
  6. Publicar el puerto 8080 directamente o detras de un reverse proxy.
  7. Respaldar los volumenes Docker opencredential_postgres_data y opencredential_adminweb_data.

Siguiente paso recomendado

Para MySQL/MariaDB basta con cambiar:

  • Database__Provider=MySql
  • Database__ConnectionString=Server=...;Port=3306;Database=...;User ID=...;Password=...

Y despues, desde la interfaz:

  1. Probar conexion
  2. Ajustar tablas de AdminWeb
  3. Guardar configuracion

Secretos y archivos que no deben versionarse

  • App_Data/adminweb-runtime.json
  • App_Data/keys/
  • .env
  • cookies exportadas
  • logs locales
  • artefactos de bin/, obj/ y artifacts/

About

OpenCredential Admin Web is a web interface in PostgreSQL to manage OpenCredential

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages