Volver a la wiki

Agente · dev-core

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)

ModeloPropositoFK/M2M clave
SaaSModuleCatalogo de modulos contratables—
PlanPlanes de suscripcion (Starter/Pro/Custom)M2M → SaaSModule
OrganizationTenant raiz — config, plan, limites, soft-deleteFK → Plan, M2M → SaaSModule
UserUsuario (extiende AbstractUser)FK → Organization
SystemLogAuditoria de acciones (auth, racks, system)FK → User, FK → Organization
ScriptTemplatePlantillas de scripts de redFK → Organization, FK → User
ImpersonationLogRegistro de suplantacionFK → User (admin), FK → User (target)
ModulePermissionPermisos granulares por usuario (JSON)OneToOne → User
TemporaryAccessElevacion temporal de privilegios (1-72h)FK → User, FK → User (granted_by)
StoredCredentialCredenciales encriptadas (SNMP/SSH/HTTP)FK → Organization, FK → User
LoginLogHistorial 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/)

MetodoPathAuthProposito
GET/api/users/AdminListar usuarios de la organizacion
POST/api/users/AdminCrear usuario
PUT/api/users/{id}Admin/SelfActualizar password/rol
DELETE/api/users/{id}AdminEliminar usuario
GET/api/users/mfa-statusAdminListar usuarios con estado MFA
GET/api/users/me/mfaAuthMis dispositivos MFA
GET/api/users/{id}/mfaAdminDispositivos MFA de un usuario
DELETE/api/users/{id}/mfa/{auth_id}AdminEliminar dispositivo MFA

Settings (/api/settings/)

MetodoPathAuthProposito
GET/api/settings/companyAuthNombre, direccion, logo
PUT/api/settings/companyAdminActualizar datos empresa
POST/api/settings/company/logoAdminSubir logo (PNG/JPEG/SVG)
GET/api/settings/session-timeoutAuthTimeout de sesion
PUT/api/settings/session-timeoutAdminCambiar timeout
POST/api/settings/onboarding/completeAuthMarcar onboarding completado
POST/api/settings/onboarding/resetAuthReset del wizard

Status y Search (/api/status/, /api/search)

MetodoPathAuthProposito
GET/api/status/AuthContadores: racks, devices, blueprints, users
GET/api/status/healthAuthHealth check (DB + storage)
GET/api/status/versionAuthVersion + release date
GET/api/status/racks-summaryAuthResumen optimizacion racks
GET/api/status/blueprints-statsAuthEstadisticas blueprints
GET/api/search?q=queryAuthBusqueda global (racks, devices, blueprints)

Admin (/api/admin/)

MetodoPathAuthProposito
POST/api/admin/impersonate/startSuperuserIniciar suplantacion
POST/api/admin/impersonate/stopSuperuserDetener suplantacion
GET/api/admin/permissions/{id}AdminVer permisos efectivos
PUT/api/admin/permissions/{id}AdminEstablecer overrides
POST/api/admin/permissions/{id}/resetAdminResetear a defaults del rol
POST/api/admin/temporary-access/grantAdminConceder acceso temporal
POST/api/admin/temporary-access/{id}/revokeAdminRevocar acceso temporal

Logs (/api/logs/, /api/login-history/)

MetodoPathAuthProposito
GET/api/logs/dataAdminUltimos 500 logs del sistema
GET/api/logs/exportAdminExportar logs a CSV (1000)
GET/api/login-history/AdminHistorial de login

Auth — Passkeys (/auth/)

MetodoPathCSRFProposito
GET/auth/passkey-login-optionsNoOpciones WebAuthn para login
POST/auth/validate-and-setup-biometricSiValidar credenciales + generar challenge
POST/auth/complete-biometric-setupSiCompletar registro passkey + login

Credentials (/api/credentials/)

MetodoPathAuthProposito
GET/api/credentials/AuthListar credenciales (metadata)
POST/api/credentials/AdminCrear credencial
PUT/api/credentials/{id}AdminActualizar credencial
DELETE/api/credentials/{id}AdminEliminar credencial
GET/api/credentials/{id}/decryptAuthDescifrar para auto-fill

Otros

MetodoPathAuthProposito
GET/api/backup/latestAdminDescargar ultimo backup
POST/api/signup/PublicoRegistro self-service (org + user)
GET/api/export/csvAuthExportar inventario CSV

Middleware Pipeline

Orden de ejecucion (despues de Django auth):

  1. ImpersonationMiddleware — Sustituye request.user si hay sesion de suplantacion
  2. ModuleGatingMiddleware — Verifica que la org tiene el modulo activo para la URL
  3. RateLimitMiddleware — Dos capas: per-IP (sliding window) + per-tenant (plan-based)
  4. PayloadBudgetMiddleware — Limite de tamano de request
  5. TenantRLSMiddleware — Configura Row-Level Security de PostgreSQL
  6. CSPMiddleware — Inyecta headers Content-Security-Policy
  7. TenantMetricsMiddleware — Contadores Prometheus por tenant

Rate Limits

EndpointLimite
/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

Encriptacion


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)


Signals y auditoria

SignalEventoDestino
user_login_failedLogin fallidoSystemLog + LoginLog
user_logged_in (allauth)Login exitosoSystemLog + LoginLog
user_logged_out (allauth)LogoutSystemLog
post_save (User)Nuevo usuarioemail_service.send_welcome_email

LoginLog campos


Docs relacionados

DocumentoQue 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

Subir