763e06c127
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5.6 KiB
5.6 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_register | function | py | browser | 1.0.0 | impure | def browser_profile_register(profile_dir: str, label: str = '', persona: str = '', purpose: str = '', note_path: str = '', tags: list | None = None, notes: str = '', user_data_dir: str = '', status: str = 'active', accounts: list | None = None, base_url: str = 'http://127.0.0.1:8771') -> dict | Registra o actualiza un perfil de Chromium (y opcionalmente sus cuentas) en el catalogo del service osint_db (FastAPI + DuckDB single-writer) usado para investigaciones multicuenta OSINT. En una sola llamada hace POST /api/browser-profile con la metadata del perfil (upsert idempotente sobre profile_dir) y un POST /api/browser-profile/account por cada cuenta de la lista accounts. El service responde SIEMPRE HTTP 200 con body {status:ok|error}, se parsea el body. Impura (red). No lanza: devuelve dict de estado. secret_ref de cada cuenta es una REFERENCIA al secreto (ej. 'pass show osint/p1/gmail'), nunca el password en claro. |
|
false | error_py_core | true |
|
python/functions/browser/browser_profile_register_test.py | python/functions/browser/browser_profile_register.py |
|
dict de estado. Caso ok: {status:'ok', profile_dir, accounts (int: cuentas registradas con exito), account_errors (list: errores por cuenta invalida o rechazada, vacia si todo OK)}. Caso error (fallo del POST del perfil): {status:'error', error: str}. |
Ejemplo
import sys, os
sys.path.insert(0, os.path.join("python", "functions"))
from browser.browser_profile_register import browser_profile_register
res = browser_profile_register(
"Profile 1",
label="Persona Maria - OSINT",
persona="maria_ficticia",
purpose="rastreo cuentas falsas",
tags=["osint", "sock-puppet"],
accounts=[
{"service": "gmail", "identity": "maria@example.com",
"secret_ref": "pass show osint/p1/gmail"},
{"service": "x", "identity": "@maria_fake", "role": "primary"},
],
)
print(res["status"]) # "ok" si el service esta vivo
print(res["accounts"]) # 2 (cuentas registradas)
Cuando usarla
Cuando crees un perfil nuevo de Chromium para una investigacion multicuenta OSINT y
quieras dejarlo catalogado (con su persona, proposito y cuentas) en el service osint_db.
Llamala tambien para ACTUALIZAR un perfil existente: el upsert es idempotente sobre
profile_dir, asi que reejecutarla con mas cuentas o metadata nueva no duplica nada.
Es el punto de entrada del grupo browser-profiles; luego se lista con
browser_profile_list, se inspecciona con browser_profile_show y se abre con
browser_profile_open.
Gotchas
- Impura: hace red (HTTP POST al service). El service
osint_dbdebe estar vivo enhttp://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}. La funcion parsea el body, no el codigo HTTP. - secret_ref NUNCA es el password: es una REFERENCIA al secreto (ej.
"pass show osint/p1/gmail"). No metas credenciales en claro — se resuelven conpassen el momento de usarlas. - Idempotente: reejecutar con el mismo
profile_diractualiza (upsert), no duplica. Lo mismo para cada cuenta (PK<profile_dir>:<service>:<identity>). - Errores parciales de cuentas: si el perfil se registra pero una cuenta falla (o le
falta
service/identity), elstatusglobal sigue siendo"ok"y el detalle del fallo va enaccount_errors. Solostatus:'error'si falla el POST del PERFIL. - Single-writer DuckDB: la DB la abre el service. NUNCA abrir
osint.duckdben paralelo; todo pasa por HTTP.
Notas
Usa el helper compartido python/functions/browser/_osint_db_client.py (modulo privado
no indexado) para el POST sobre urllib.request de stdlib (sin requests). Timeout HTTP
de 10s por request.