Volver a la wiki

StoredCredential · Modelo core

StoredCredential · Modelo core

Propósito

StoredCredential es el almacén central de credenciales de red cifradas. Permite guardar y reutilizar credenciales SNMP v2c, SNMP v3, SSH y HTTP entre distintas apps (monitoring, signage, network) sin exponer valores en claro. Introducido en v1.0.47 según comentario de bloque en core/models.py.

Contrato

Campos:

CampoTipoNotas
organizationFK(Organization)Aislamiento SaaS por tenant
nameCharField(200)Único por organización (unique_together)
credential_typeCharField, choicessnmp_v2, snmp_v3, ssh, multi
encrypted_dataJSONFieldBlob JSON con valores cifrados + claros mezclados
created_byFK(User, null)Auditoría
created_at / updated_atDateTimeFieldAuto-gestionados

Secciones — atributo de clase _SECTION_KEYS:

SecciónClaves
snmp_v2community
snmp_v3snmp_v3_username, auth_protocol, auth_key, priv_protocol, priv_key
sshssh_username, ssh_password, enable_password
httphttp_username, http_password

Los valores sensibles (community, auth_key, ssh_password, etc.) se almacenan cifrados; los no-sensibles (nombres de usuario, protocolos) se guardan en claro dentro del mismo JSONField.

Métodos públicos:

Dependencias entrantes

ArchivoUso
core/credential_api.pyAPI Ninja con CRUD completo (list, create, update, delete, decrypt); único punto de escritura/lectura REST
monitoring/api/signage/deploy.pyItera StoredCredential.objects.filter(organization=org) buscando sección HTTP en deploys
signage/services/deployment.pyImporta CredentialManager para descifrar credenciales en control de displays
signage/services/display_control/controller.pyImporta CredentialManager para reboot de players

Dependencias salientes

Ejemplos

# 1. SAVE: cifrar y persistir (core/credential_api.py)
encrypted = CredentialManager.encrypt_dict({
    "ssh_password": "s3cr3t",
    "ssh_username": "admin",
})
cred = StoredCredential.objects.create(
    organization=org,
    name="Switch-Core",
    credential_type="multi",
    encrypted_data=encrypted,
    created_by=request.user,
)

# 2. FETCH + DECRYPT: obtener sección en claro
cred = StoredCredential.objects.get(name="Switch-Core", organization=org)
ssh_data = cred.get_section("ssh")
# → {"username": "admin", "password": "s3cr3t", "enable_password": ""}

Véase también

Subir