Files
fn_registry/python/functions/metabase/parse_metabase_secret.md
T
egutierrez 32c7336bf6 feat(infra): auto-commit con 56 cambios
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-21 14:22:55 +02:00

3.1 KiB

name, kind, lang, domain, version, purity, signature, description, tags, uses_functions, uses_types, params, output, returns, returns_optional, error_type, imports, tested, tests, test_file_path, file_path
name kind lang domain version purity signature description tags uses_functions uses_types params output returns returns_optional error_type imports tested tests test_file_path file_path
parse_metabase_secret function py infra 1.0.0 pure def parse_metabase_secret(secret_text: str, mode: str = 'auto') -> dict Parser puro que extrae credenciales de Metabase del texto crudo de un secreto de pass. Distingue API-key (una sola linea, p.ej. mb_... de metabase/aurgi-api-key) de sesion (multi-linea estilo captacion/metabase: primera linea password, linea email:/user:/login:/username: con el usuario). mode='auto' detecta el formato; mode='api_key' o 'session' fuerzan. No hace I/O. Devuelve dict {status, mode, api_key} o {status, mode, email, password} o {status:error, error}. Nunca lanza ni logea el secreto.
metabase
pass
secret
credential
parse
pure
name desc
secret_text Contenido completo del secreto leido de pass (varias lineas separadas por \n). Primera linea = password/clave por convencion de pass; lineas siguientes = metadata.
name desc
mode 'api_key', 'session' o 'auto' (default). En auto: si hay linea email/usuario reconocible -> session; si no -> api_key.
Dict. api_key: {status:'ok', mode:'api_key', api_key:str}. session: {status:'ok', mode:'session', email:str, password:str}. error: {status:'error', error:str} para texto vacio, modo invalido o session sin email/password.
false
true
test_api_key_explicit
test_session_multiline_email_prefix
test_auto_detects_session_when_email_present
test_auto_detects_api_key_single_line
test_session_without_email_line_errors
test_empty_secret_errors
test_invalid_mode_errors
test_user_prefix_variant
test_email_value_preserves_case
python/functions/metabase/parse_metabase_secret_test.py python/functions/metabase/parse_metabase_secret.py

Ejemplo

import sys
sys.path.insert(0, "python/functions")
from metabase.parse_metabase_secret import parse_metabase_secret

# API-key (una sola linea):
parse_metabase_secret("mb_abc123")
# {'status': 'ok', 'mode': 'api_key', 'api_key': 'mb_abc123'}

# Sesion (multi-linea estilo captacion/metabase):
parse_metabase_secret("hunter2\nemail: a@b.com\nurl: http://x")
# {'status': 'ok', 'mode': 'session', 'email': 'a@b.com', 'password': 'hunter2'}

Cuando usarla

Cuando ya tienes el texto de un secreto de Metabase (leido de pass u otra fuente) y necesitas separarlo en credenciales utilizables sin tocar disco ni red. Es el nucleo puro y testeable de metabase_client_from_pass: separa el parseo (determinista) de la lectura del secreto y la autenticacion (impuras).

Gotchas

  • La linea del email/usuario se identifica por prefijo: email:, login:, username: o user: (case-insensitive). Otros formatos no se detectan como sesion y auto los tratara como api_key.
  • Funcion pura: NO lee pass ni llama a Metabase. El caller le pasa el texto ya resuelto. No logea el secreto, pero el dict de retorno SI lleva el valor en claro — el caller debe tratarlo como sensible.