chore: auto-commit (43 archivos)

- .mcp.json
- bash/functions/infra/write_mcp_jupyter_config.md
- bash/functions/infra/write_mcp_jupyter_config.sh
- cpp/CMakeLists.txt
- cpp/apps/chart_demo
- cpp/apps/shaders_lab
- cpp/functions/gfx/gl_framebuffer.cpp
- cpp/functions/gfx/gl_framebuffer.h
- cpp/functions/gfx/gl_framebuffer.md
- cpp/functions/gfx/mesh_gpu.md
- ...

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-05-30 17:28:47 +02:00
parent fec8ebd4ec
commit fce88032ca
44 changed files with 3924 additions and 64 deletions
@@ -0,0 +1,60 @@
---
name: popelis_set_password
kind: function
lang: py
domain: infra
version: "1.0.0"
purity: impure
signature: "def popelis_set_password(base_url: str, admin_token: str, username: str, password: str, timeout: float = 30.0) -> dict"
description: "Cambia la contrasena de un usuario existente en Popelis (POST /api/admin/users/password). Devuelve 404 si el usuario no existe. Registro CERRADO: requiere cabecera X-Admin-Token."
tags: [popelis, http, admin, user, password, infra]
params:
- name: base_url
desc: "URL base del servicio sin trailing slash. Ej: https://popelis.datardos.com"
- name: admin_token
desc: "Token de administracion. Se envia como cabecera X-Admin-Token. No logear ni exponer."
- name: username
desc: "Nombre del usuario al que se le quiere cambiar la contrasena. Debe existir previamente."
- name: password
desc: "Nueva contrasena a establecer."
- name: timeout
desc: "Timeout en segundos para la peticion HTTP. Default 30.0."
output: "Dict con el resultado de la operacion: {status: 'password updated'}"
uses_functions: []
uses_types: []
returns: []
returns_optional: false
error_type: "error_go_core"
imports: ["json", "urllib.request", "urllib.error"]
tested: false
tests: []
test_file_path: ""
file_path: "python/functions/infra/popelis_set_password.py"
---
## Ejemplo
```python
from infra.popelis_set_password import popelis_set_password
result = popelis_set_password(
base_url="https://popelis.datardos.com",
admin_token="<admin-token>",
username="alice",
password="n3wpass2024",
)
# result == {"status": "password updated"}
print(result)
```
## Cuando usarla
Cuando necesites resetear o cambiar la contrasena de un usuario ya existente en Popelis desde un script de administracion o agente. Usar DESPUES de `popelis_create_user` (el usuario debe existir). Tambien util para rotacion periodica de credenciales.
## Gotchas
- **Token sensible**: `admin_token` es un secreto. Nunca logear el valor, interpolarlo en URLs ni persistirlo en texto plano.
- **Registro cerrado**: el endpoint rechaza cualquier peticion sin `X-Admin-Token` valido (HTTP 401/403).
- **404 si no existe**: si el `username` no esta registrado, el servidor devuelve HTTP 404 y la funcion lanza `ValueError` con mensaje explicito (`usuario 'X' no existe`). Verificar existencia previa o capturar el error.
- **No afecta a Jellyfin**: este endpoint cambia solo la contrasena en Popelis. Si el usuario Jellyfin espejo tiene contrasena separada, habra que gestionarla por separado via la API de Jellyfin.
- **Solo stdlib**: no requiere `requests` ni dependencias externas — usa `urllib.request`.