feat(browser): auto-commit con 178 cambios
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,70 @@
|
||||
---
|
||||
name: browser_profile_show
|
||||
kind: function
|
||||
lang: py
|
||||
domain: browser
|
||||
version: "1.0.0"
|
||||
purity: impure
|
||||
signature: "def browser_profile_show(profile_dir: str, base_url: str = 'http://127.0.0.1:8771') -> dict"
|
||||
description: "Muestra un perfil de Chromium del catalogo del service osint_db con todas sus cuentas. Hace dos POST /api/query (read-only): el perfil (1 fila de browser_profiles WHERE profile_dir=?) y sus cuentas (N filas de browser_profile_accounts WHERE profile_dir=?). Devuelve la metadata del perfil y la lista de cuentas (con sus secret_ref, que son REFERENCIAS al secreto, no el password). Si el perfil no existe devuelve status error. El service responde SIEMPRE HTTP 200 con body {status:ok|error}. Impura (red). No lanza: devuelve dict de estado."
|
||||
tags: [browser-profiles, osint, chromium, profile, multicuenta]
|
||||
uses_functions: []
|
||||
uses_types: []
|
||||
returns: []
|
||||
returns_optional: false
|
||||
error_type: "error_py_core"
|
||||
imports: []
|
||||
tested: true
|
||||
tests: ["test_golden_muestra_perfil_y_cuentas", "test_edge_perfil_no_existe_devuelve_error", "test_error_query_falla_devuelve_status_error"]
|
||||
test_file_path: "python/functions/browser/browser_profile_show_test.py"
|
||||
file_path: "python/functions/browser/browser_profile_show.py"
|
||||
params:
|
||||
- name: profile_dir
|
||||
desc: "Nombre del directorio real del perfil Chromium (ej. 'Profile 1', 'osint_01'). Es la PK por la que se busca."
|
||||
- name: base_url
|
||||
desc: "Base del service osint_db. Default http://127.0.0.1:8771."
|
||||
output: "dict de estado. Caso ok: {status:'ok', profile: dict (metadata: profile_dir, user_data_dir, label, persona, purpose, status, note_path, tags, notes, created_at, updated_at), accounts: list de dicts (cuentas con id, profile_dir, service, identity, secret_ref, role, status, notes, timestamps; posiblemente vacia)}. Caso no existe: {status:'error', error:'perfil no encontrado: <profile_dir>'}. Caso service caido/query rechazada: {status:'error', error: str}."
|
||||
---
|
||||
|
||||
## Ejemplo
|
||||
|
||||
```python
|
||||
import sys, os
|
||||
sys.path.insert(0, os.path.join("python", "functions"))
|
||||
from browser.browser_profile_show import browser_profile_show
|
||||
|
||||
res = browser_profile_show("Profile 1")
|
||||
if res["status"] == "ok":
|
||||
print(res["profile"]["persona"]) # alias ficticio
|
||||
for a in res["accounts"]:
|
||||
print(a["service"], a["identity"], a["secret_ref"])
|
||||
# ej: gmail maria@example.com pass show osint/p1/gmail
|
||||
```
|
||||
|
||||
## Cuando usarla
|
||||
|
||||
Cuando necesites el detalle completo de UN perfil concreto: su persona/proposito y todas
|
||||
sus cuentas con los `secret_ref` para saber que credenciales usar. Es la lectura de
|
||||
inspeccion previa a operar con ese perfil. La compone internamente `browser_profile_open`
|
||||
para resolver el `user_data_dir` y devolver las cuentas al lanzar el navegador.
|
||||
|
||||
## Gotchas
|
||||
|
||||
- **Impura**: hace red (dos HTTP POST /api/query al service). El service `osint_db` debe
|
||||
estar vivo en `http://127.0.0.1:8771`. Si esta caido, devuelve `{status:'error', error:'... inaccesible'}`
|
||||
sin lanzar.
|
||||
- **El codigo HTTP NO indica exito**: el service responde SIEMPRE HTTP 200 con body
|
||||
`{status:ok|error}`; se parsea el body.
|
||||
- **secret_ref NO es el password**: las cuentas traen el `secret_ref` (REFERENCIA, ej.
|
||||
`"pass show osint/p1/gmail"`), nunca la credencial en claro. Resolver con `pass` en el
|
||||
momento de usar.
|
||||
- **Perfil inexistente = status error**: si el `profile_dir` no esta en el catalogo,
|
||||
devuelve `{status:'error', error:'perfil no encontrado: ...'}` (no es un fallo de red).
|
||||
En ese caso NO se consulta la tabla de cuentas.
|
||||
- **Read-only**: dos SELECT; no muta nada.
|
||||
|
||||
## Notas
|
||||
|
||||
Usa el helper compartido `python/functions/browser/_osint_db_client.py` (modulo privado
|
||||
no indexado) para los POST sobre `urllib.request` de stdlib (sin `requests`). Las cuentas
|
||||
se ordenan por `service, identity`. Timeout HTTP de 10s por request.
|
||||
Reference in New Issue
Block a user