Agente · dev-core
Proposito
Desarrollo y mantenimiento del modulo core/ — autenticacion, usuarios, organizaciones, permisos, credenciales, middleware y configuracion SaaS. Es la base sobre la que operan todos los demas modulos.
Estructura de archivos
core/
├── models.py # 10 modelos (440 LOC)
├── api.py # API principal: 8 routers, ~45 endpoints (1049 LOC)
├── auth_api.py # WebAuthn/Passkey endpoints (357 LOC)
├── credential_api.py # Credential Store API (263 LOC)
├── htmx_views.py # Vistas HTMX para templates (698 LOC)
├── signals.py # Audit signals: login, logout, welcome email
├── email_service.py # Welcome email via Resend
├── module_registry.py # Mapa URL → modulo SaaS requerido
├── workspace_api.py # Endpoints para el workspace
├── middleware/
│ ├── rate_limit.py # Rate limiting per-IP + per-tenant
│ ├── module_gating.py # Acceso por modulo contratado
│ ├── impersonation.py # Suplantacion de superusuario
│ ├── tenant_rls.py # Row-Level Security PostgreSQL
│ ├── csp.py # Content Security Policy
│ ├── payload_budget.py # Limite de tamano de request
│ └── tenant_metrics.py # Metricas por tenant
└── management/commands/
├── finops_report.py # Informe FinOps
└── perf_review.py # Informe rendimiento
Modelos (10)
Modelo Proposito FK/M2M clave SaaSModule Catalogo de modulos contratables — Plan Planes de suscripcion (Starter/Pro/Custom) M2M → SaaSModule Organization Tenant raiz — config, plan, limites, soft-delete FK → Plan, M2M → SaaSModule User Usuario (extiende AbstractUser) FK → Organization SystemLog Auditoria de acciones (auth, racks, system) FK → User, FK → Organization ScriptTemplate Plantillas de scripts de red FK → Organization, FK → User ImpersonationLog Registro de suplantacion FK → User (admin), FK → User (target) ModulePermission Permisos granulares por usuario (JSON) OneToOne → User TemporaryAccess Elevacion temporal de privilegios (1-72h) FK → User, FK → User (granted_by) StoredCredential Credenciales encriptadas (SNMP/SSH/HTTP) FK → Organization, FK → User LoginLog Historial de login (exito/fallo, IP, metodo) FK → User
Relaciones clave
Plan ──M2M──> SaaSModule
Organization ──FK──> Plan
Organization ──M2M──> SaaSModule (extra_modules)
User ──FK──> Organization
SystemLog ──FK──> User, Organization
StoredCredential ──FK──> Organization
ModulePermission ──1:1──> User
TemporaryAccess ──FK──> User
LoginLog ──FK──> User
API Endpoints (~45)
Users (/api/users/)
Metodo Path Auth Proposito GET /api/users/Admin Listar usuarios de la organizacion POST /api/users/Admin Crear usuario PUT /api/users/{id}Admin/Self Actualizar password/rol DELETE /api/users/{id}Admin Eliminar usuario GET /api/users/mfa-statusAdmin Listar usuarios con estado MFA GET /api/users/me/mfaAuth Mis dispositivos MFA GET /api/users/{id}/mfaAdmin Dispositivos MFA de un usuario DELETE /api/users/{id}/mfa/{auth_id}Admin Eliminar dispositivo MFA
Settings (/api/settings/)
Metodo Path Auth Proposito GET /api/settings/companyAuth Nombre, direccion, logo PUT /api/settings/companyAdmin Actualizar datos empresa POST /api/settings/company/logoAdmin Subir logo (PNG/JPEG/SVG) GET /api/settings/session-timeoutAuth Timeout de sesion PUT /api/settings/session-timeoutAdmin Cambiar timeout POST /api/settings/onboarding/completeAuth Marcar onboarding completado POST /api/settings/onboarding/resetAuth Reset del wizard
Status y Search (/api/status/, /api/search)
Metodo Path Auth Proposito GET /api/status/Auth Contadores: racks, devices, blueprints, users GET /api/status/healthAuth Health check (DB + storage) GET /api/status/versionAuth Version + release date GET /api/status/racks-summaryAuth Resumen optimizacion racks GET /api/status/blueprints-statsAuth Estadisticas blueprints GET /api/search?q=queryAuth Busqueda global (racks, devices, blueprints)
Admin (/api/admin/)
Metodo Path Auth Proposito POST /api/admin/impersonate/startSuperuser Iniciar suplantacion POST /api/admin/impersonate/stopSuperuser Detener suplantacion GET /api/admin/permissions/{id}Admin Ver permisos efectivos PUT /api/admin/permissions/{id}Admin Establecer overrides POST /api/admin/permissions/{id}/resetAdmin Resetear a defaults del rol POST /api/admin/temporary-access/grantAdmin Conceder acceso temporal POST /api/admin/temporary-access/{id}/revokeAdmin Revocar acceso temporal
Logs (/api/logs/, /api/login-history/)
Metodo Path Auth Proposito GET /api/logs/dataAdmin Ultimos 500 logs del sistema GET /api/logs/exportAdmin Exportar logs a CSV (1000) GET /api/login-history/Admin Historial de login
Auth — Passkeys (/auth/)
Metodo Path CSRF Proposito GET /auth/passkey-login-optionsNo Opciones WebAuthn para login POST /auth/validate-and-setup-biometricSi Validar credenciales + generar challenge POST /auth/complete-biometric-setupSi Completar registro passkey + login
Credentials (/api/credentials/)
Metodo Path Auth Proposito GET /api/credentials/Auth Listar credenciales (metadata) POST /api/credentials/Admin Crear credencial PUT /api/credentials/{id}Admin Actualizar credencial DELETE /api/credentials/{id}Admin Eliminar credencial GET /api/credentials/{id}/decryptAuth Descifrar para auto-fill
Otros
Metodo Path Auth Proposito GET /api/backup/latestAdmin Descargar ultimo backup POST /api/signup/Publico Registro self-service (org + user) GET /api/export/csvAuth Exportar inventario CSV
Middleware Pipeline
Orden de ejecucion (despues de Django auth):
ImpersonationMiddleware — Sustituye request.user si hay sesion de suplantacion
ModuleGatingMiddleware — Verifica que la org tiene el modulo activo para la URL
RateLimitMiddleware — Dos capas: per-IP (sliding window) + per-tenant (plan-based)
PayloadBudgetMiddleware — Limite de tamano de request
TenantRLSMiddleware — Configura Row-Level Security de PostgreSQL
CSPMiddleware — Inyecta headers Content-Security-Policy
TenantMetricsMiddleware — Contadores Prometheus por tenant
Rate Limits
Endpoint Limite /api/auth/login5/min per IP /api/auth/register3/min per IP /api/blueprints/auto-plan10/min per IP /api/network/device/30/min per IP Per-tenant (Starter)60 req/min Per-tenant (Pro)300 req/min Per-tenant (Custom)1000 req/min
Credential Store
Sistema unificado de credenciales encriptadas para Auto-Provision y SSH.
Tipos soportados
SNMPv2c : community string
SNMPv3 : username, auth_protocol (MD5/SHA), auth_key, priv_protocol (DES/AES), priv_key
SSH : username, password, enable_password
HTTP : username, password
Multi : combinacion de los anteriores en una sola credencial
Encriptacion
Algoritmo : Fernet (AES-128-CBC + HMAC-SHA256)
Campos encriptados : community, auth_key, priv_key, ssh_password, enable_password, http_password
Campos en claro : usernames, protocols
StoredCredential.get_section(name) → descifra y devuelve dict de una seccion
Sistema de permisos
Jerarquia de roles
Superuser (is_superuser=True)
└── Admin (role='admin')
└── Operator (role='operator')
└── Readonly (role='readonly')
Permisos granulares (ModulePermission)
Formato JSON: {"scope": "level"}
Scopes : racks, blueprints, observatory, terminal, network, cns, itsm, fleet, users
Levels : none < view < edit < admin
Ejemplo: {"racks": "edit", "observatory": "view", "users": "none"}
Acceso temporal (TemporaryAccess)
Duracion: 1-72 horas
Auto-expira segun expires_at
Revocable manualmente
No puede exceder nivel del que lo concede
Registro completo en audit trail
Signals y auditoria
Signal Evento Destino user_login_failedLogin fallido SystemLog + LoginLog user_logged_in (allauth)Login exitoso SystemLog + LoginLog user_logged_out (allauth)Logout SystemLog post_save (User)Nuevo usuario email_service.send_welcome_email
LoginLog campos
timestamp, user, ip_address, user_agent, success, username_attempted, method
Methods detectados: password, social, passkey, token
Docs relacionados
Documento Que cubre DATABASE_ARCHITECTURE.mdModelos, ER, multi-tenancy, RLS PASSKEYS_AUTHENTICATION.mdWebAuthn flow, security fixes DJANGO_CONSOLE_GUIDE.mdOperaciones admin (orgs, users, plans) SUPERUSER_ADMIN_GUIDE.mdJerarquia permisos, impersonation SECURITY_GUIDE.mdAuth, sessions, encryption, firewalls SECRET_ROTATION_PLAYBOOK.mdRotacion de API keys y secrets
Mantenido por : Claude (Anthropic) + Equipo CreaRack
Ultima actualizacion : 13-04-2026
Véase también
[[concept—saas—multi-tenancy]] — modelo multi-tenancy con RLS
[[concept—saas—module-gating]] — gating de módulos por plan SaaS
[[entity—core—model—organization]] — modelo tenant principal del core
[[entity—core—model—user]] — modelo de usuario multi-organización
[[entity—core—model—plan]] — planes SaaS y módulos contratables
[[entity—core—model—saasmodule]] — definición de módulos de producto
[[entity—core—model—storedcredential]] — credenciales cifradas reutilizables
[[crearack-tech—backend—passkeys-authentication]] — autenticación con passkeys
Anterior Agente · dev-cns Siguiente Agente · dev-map-editor