Files
fn_registry/bash/functions/browser/launch_chromium_proxy.sh
T
2026-06-02 21:50:23 +02:00

105 lines
3.5 KiB
Bash

#!/usr/bin/env bash
# launch_chromium_proxy — Lanza Chromium apuntando a un proxy HTTP/HTTPS local con perfil aislado.
launch_chromium_proxy() {
local proxy_url="http://127.0.0.1:8080"
local profile_dir="/tmp/chromium-proxy"
local start_url=""
local ca_cert=""
local extra_args=""
# Parsear argumentos
while [[ $# -gt 0 ]]; do
case "$1" in
--proxy)
proxy_url="$2"; shift 2 ;;
--profile)
profile_dir="$2"; shift 2 ;;
--url)
start_url="$2"; shift 2 ;;
--ca-cert)
ca_cert="$2"; shift 2 ;;
--extra)
extra_args="$2"; shift 2 ;;
*)
echo "ERROR: argumento desconocido: $1" >&2
return 1 ;;
esac
done
# Detectar binario del navegador
local browser_bin=""
for candidate in chromium chromium-browser google-chrome-stable google-chrome; do
if command -v "$candidate" &>/dev/null; then
browser_bin="$candidate"
break
fi
done
if [[ -z "$browser_bin" ]]; then
echo "ERROR: no se encontro ningun binario Chromium/Chrome en el PATH." >&2
echo " Probados: chromium, chromium-browser, google-chrome-stable, google-chrome." >&2
return 1
fi
# Crear directorio de perfil si no existe
if [[ ! -d "$profile_dir" ]]; then
mkdir -p "$profile_dir" || {
echo "ERROR: no se pudo crear el directorio de perfil: $profile_dir" >&2
return 1
}
fi
# Construir argumentos del navegador
local args=(
"--proxy-server=${proxy_url}"
"--user-data-dir=${profile_dir}"
"--proxy-bypass-list=<-loopback>"
"--no-first-run"
"--no-default-browser-check"
)
# Manejo de certificados TLS
if [[ -n "$ca_cert" ]]; then
# El usuario instalo el CA en el perfil; no ignorar errores de certificado.
# (El CA se instala en el sistema o en el perfil antes de lanzar.)
echo "INFO: CA cert declarado: $ca_cert" >&2
echo "INFO: Asegurate de haber importado el CA en el perfil o en el sistema antes de navegar HTTPS." >&2
else
# Sin CA cert: ignorar errores de certificado para que mitmproxy/Burp funcionen sin configuracion extra.
# ADVERTENCIA: esto desactiva la validacion TLS completa del navegador.
args+=("--ignore-certificate-errors")
echo "WARN: --ignore-certificate-errors activo. Usa --ca-cert si instalaste el CA del proxy." >&2
fi
# URL inicial opcional
if [[ -n "$start_url" ]]; then
args+=("$start_url")
fi
# Argumentos extra pasados por el usuario
# shellcheck disable=SC2206
local extra_arr=()
if [[ -n "$extra_args" ]]; then
read -r -a extra_arr <<< "$extra_args"
args+=("${extra_arr[@]}")
fi
# Log temporal para stderr/stdout del navegador
local log_file="/tmp/chromium-proxy-$$.log"
# Lanzar en background desacoplado de la sesion del agente
setsid "$browser_bin" "${args[@]}" </dev/null >"$log_file" 2>&1 &
local browser_pid=$!
disown "$browser_pid"
# Emitir JSON con informacion del proceso lanzado
printf '{"pid":%d,"browser":"%s","proxy":"%s","profile":"%s","log":"%s"}\n' \
"$browser_pid" "$browser_bin" "$proxy_url" "$profile_dir" "$log_file"
}
# Ejecutar si se llama directamente (fn run / bash <file>)
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
launch_chromium_proxy "$@"
fi