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
OpenCredential AdminWeb fue desarrollado por Pedro Pablo Bermúdez Medina y Yuri Mercedes Bermúdez Mazuera.
Licencia: BSD 3-Clause. Consulta el archivo LICENSE.
$env:DOTNET_CLI_HOME='C:\Github\pgina-mysql8\.dotnet-home'
dotnet run --project C:\Github\pgina-mysql8\OpenCredential.AdminWeb\OpenCredential.AdminWeb.csprojLa 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:
userscareerslevelscomputersroomsroom_positionsusage_recordsadmin_audit_log
Esto mantiene compatibilidad con el esquema academico del proyecto y agrega las tablas necesarias para administrar equipos y estadisticas de uso.
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:
DisponibleOcupadoBloqueadoDesconectadoSesion huerfanaDeshabilitado
En PostgreSQL y MySQL/MariaDB la lectura contempla estos campos cuando existen:
session_statelast_heartbeat_atsession_end_reasonclient_session_idwindows_session_id
Esto permite distinguir una sesion realmente activa de una bloqueada, desconectada o huerfana.
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__UsernameyAdminAuth__Passworddesde variables de entorno o secretos del despliegue - Si prefieres no guardar clave en texto plano, usa
AdminAuth__PasswordHashjunto conAdminAuth__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 auditoriaCoordinator: gestion de usuarios, carreras, semestres, claves e importacionOperator: gestion de computadores y registros de usoViewer: 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" }
]
}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.
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.
docker build -t opencredential-adminweb:latest .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:latestSi 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:testLa aplicacion puede iniciar en modo Json y luego configurarse desde la interfaz para conectarse a una base externa PostgreSQL o MySQL.
- Inicia sesion como
SuperAdmin. - Ve al panel
Configuracion de base de datos. - Selecciona
PostgreSQLoMySQL / MariaDB. - Captura host, puerto, base de datos, usuario, clave y modo SSL.
- Usa
Probar conexion. - Usa
Ajustar tablas de AdminWebpara crear o corregir las tablas auxiliares de la consola web sobre una base ya existente de OpenCredential. - Si la conexion debe quedar persistida para los siguientes reinicios, usa
Guardar configuracion. - Reinicia el contenedor:
docker restart opencredential-adminwebLa configuracion se guarda en /data/adminweb-runtime.json, por eso es importante mantener montado el volumen opencredential_adminweb_data:/data.
Si OpenCredential ya fue desplegado antes y solo necesitas que la consola agregue o corrija sus tablas complementarias:
- Ve a
Configuracion - Captura o confirma la conexion actual
- Pulsa
Probar conexion - 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
docker compose up -d --buildEl compose incluido levanta:
opencredential-adminwebpostgres
Segun el modo:
Json: los datos se almacenan enadmin-store.jsonSql: 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
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;
}
}Endpoint de verificacion:
/health
Recomendacion: no instales Docker directamente sobre el host Proxmox VE. Mantén el host limpio y crea una VM Debian/Ubuntu para esta aplicacion.
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.shVariables opcionales:
sudo ADMINWEB_PORT=8080 ADMIN_USERNAME=admin bash scripts/install-proxmox-vm.shEl 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.
- Crear una VM Debian/Ubuntu en Proxmox.
- Instalar Docker Engine y Docker Compose Plugin.
- Clonar este repositorio en el servidor.
- Crear un archivo
.envcon credenciales seguras a partir de.env.example. - Ejecutar
docker compose up -d --build. - Publicar el puerto
8080directamente o detras de un reverse proxy. - Respaldar los volumenes Docker
opencredential_postgres_datayopencredential_adminweb_data.
Para MySQL/MariaDB basta con cambiar:
Database__Provider=MySqlDatabase__ConnectionString=Server=...;Port=3306;Database=...;User ID=...;Password=...
Y despues, desde la interfaz:
Probar conexionAjustar tablas de AdminWebGuardar configuracion
App_Data/adminweb-runtime.jsonApp_Data/keys/.env- cookies exportadas
- logs locales
- artefactos de
bin/,obj/yartifacts/