Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5.4 KiB
name, kind, lang, domain, version, purity, signature, description, tags, uses_functions, uses_types, returns, returns_optional, error_type, imports, tested, tests, test_file_path, file_path, params, output
| name | kind | lang | domain | version | purity | signature | description | tags | uses_functions | uses_types | returns | returns_optional | error_type | imports | tested | tests | test_file_path | file_path | params | output | ||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| browser_profile_open | function | py | browser | 1.0.0 | impure | def browser_profile_open(profile_dir: str, url: str | None = None, base_url: str = 'http://127.0.0.1:8771', dry_run: bool = False) -> dict | Lanza Chromium en un perfil del catalogo osint_db y devuelve sus cuentas/secret_refs para que el operador sepa que credenciales usar. Compone browser_profile_show para leer la metadata del perfil (resuelve user_data_dir) y sus cuentas, luego lanza Chromium con --profile-directory via systemd-run --user --scope -- (proceso aislado, en background, para evitar exit-144). Gotcha del entorno: el wrapper /usr/bin/chromium ya inyecta --user-data-dir=$HOME/.config/chromium-cdp via /etc/chromium.d/cdp; por eso solo pasa --user-data-dir explicito cuando el perfil usa un dir distinto del default. Con dry_run=True no lanza nada: devuelve el comando que lanzaria. NUNCA resuelve el secreto: solo expone el secret_ref. Impura (red + lanza proceso). No lanza excepciones: devuelve dict de estado. |
|
|
false | error_py_core | true |
|
python/functions/browser/browser_profile_open_test.py | python/functions/browser/browser_profile_open.py |
|
dict de estado. Caso dry_run ok: {status:'ok', profile_dir, cmd: list[str] (argv que lanzaria), accounts: list de {service, identity, secret_ref, role}}. Caso real ok: {status:'ok', profile_dir, launched: True, cmd: list[str], accounts: [...]}. Caso perfil no existe / service caido: {status:'error', error: str} (no lanza navegador). secret_ref es REFERENCIA al secreto, nunca el password. |
Ejemplo
import sys, os
sys.path.insert(0, os.path.join("python", "functions"))
from browser.browser_profile_open import browser_profile_open
# dry_run: ver el comando sin abrir nada
preview = browser_profile_open("Profile 1", url="https://mail.google.com", dry_run=True)
print(preview["cmd"])
# ['systemd-run','--user','--scope','--','chromium',
# '--profile-directory=Profile 1','https://mail.google.com']
for a in preview["accounts"]:
print(a["service"], a["identity"], a["secret_ref"]) # resuelve tu con: pass show ...
# real: lanza Chromium en el perfil (proceso aislado, no bloquea)
res = browser_profile_open("Profile 1", url="https://mail.google.com")
print(res["launched"]) # True
Cuando usarla
Cuando vayas a operar con una cuenta de un perfil OSINT concreto: abre Chromium en ese
perfil con su contexto (cookies/sesiones aislados) y obten de golpe los secret_ref de
las cuentas para saber que credenciales usar. Usa dry_run=True primero para revisar el
comando o para testear sin abrir el navegador. Es el ultimo paso del grupo
browser-profiles tras registrar (browser_profile_register) e inspeccionar
(browser_profile_show).
Gotchas
- Impura: hace red (lee metadata del service osint_db, que debe estar vivo en
http://127.0.0.1:8771) y LANZA un proceso. Si el service esta caido o el perfil no existe, propaga{status:'error', ...}sin abrir navegador. - exit-144 si lanzas chromium directo: en este entorno lanzar chromium como hijo da
exit-144. Por eso SIEMPRE se lanza via
systemd-run --user --scope --(proceso aislado), en background, sin esperar. No bloquea al operador. - Wrapper chromium-cdp:
/usr/bin/chromiumya inyecta--user-data-dir=$HOME/.config/chromium-cdpy--remote-debugging-port=9222via/etc/chromium.d/cdp. Si eluser_data_dirdel perfil ES ese default, la funcion NO pasa--user-data-dir(lo hereda el wrapper); si es OTRO directorio, lo pasa explicito. - secret_ref NUNCA es el password: la funcion solo expone la REFERENCIA (ej.
"pass show osint/p1/gmail"). El humano/otra herramienta resuelve el secreto conpass. - dry_run no abre nada: con
dry_run=Trueno se lanza el proceso; util para test y revision. En ese modo el dict NO traelaunched. - El codigo HTTP NO indica exito: el service responde SIEMPRE HTTP 200 con body
{status:ok|error}; se parsea el body (via browser_profile_show).
Notas
Compone browser_profile_show_py_browser (mismo paquete: from browser.browser_profile_show import browser_profile_show) para leer metadata + cuentas.
El default del wrapper se compara con os.path.normpath tras expandir ~, asi que una
fila con user_data_dir="~/.config/chromium-cdp" tampoco fuerza el flag. Usa
subprocess.Popen con start_new_session=True y stdout/stderr a DEVNULL para el
lanzamiento desacoplado.