[IMPROVED] Añadir detección automática de URL de Forgejo en fj_login.sh

- Agregar función get_forgejo_url() para extraer URL de configuración git
- Configurar automáticamente BERG_BASE_URL antes de la autenticación
- Buscar en múltiples ubicaciones: configuración global, directorio actual y repos del HOME
- Extraer el dominio base de diferentes formatos de URL (https://, git@, etc.)
- Mejorar mensajes informativos sobre la URL del servidor utilizada

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Mauro Rosero P. 2025-03-15 14:44:03 -05:00
parent 6ec3519bce
commit 6891342483
Signed by: mrosero
GPG key ID: 83BD2A5F674B7E26

View file

@ -65,6 +65,48 @@ check_sops_installed() {
fi
}
# Función para extraer la URL base de Forgejo de la configuración de git
get_forgejo_url() {
# Intentar obtener URL desde la configuración global de git
local remote_url=$(git config --get remote.origin.url 2>/dev/null)
# Si no se encuentra en la configuración global, intentar buscar en el directorio actual
if [ -z "$remote_url" ] && [ -d ".git" ]; then
remote_url=$(git config --get remote.origin.url 2>/dev/null)
fi
# Si aún no tenemos URL, intentar buscar en algún repositorio de $HOME
if [ -z "$remote_url" ]; then
# Buscar repositorios en $HOME que podrían tener remotes de Forgejo
for repo_dir in $(find $HOME -name ".git" -type d -maxdepth 3 2>/dev/null); do
local repo_path=$(dirname "$repo_dir")
cd "$repo_path"
local url=$(git config --get remote.origin.url 2>/dev/null)
if [[ "$url" == *"forgejo"* ]] || [[ "$url" == *"codeberg"* ]] || [[ "$url" == *"gitt.rosero"* ]]; then
remote_url="$url"
break
fi
done
fi
# Si encontramos una URL, extraer el dominio base
if [ -n "$remote_url" ]; then
# Eliminar protocolo (http:// o https://)
local base_url=$(echo "$remote_url" | sed -E 's|^(https?://)?([^/]+).*|\2|')
# Si el formato es usuario@dominio, extraer solo el dominio
if [[ "$base_url" == *"@"* ]]; then
base_url=$(echo "$base_url" | cut -d '@' -f2)
fi
# Añadir protocolo https:// si no está presente
echo "https://$base_url"
else
# Si no se encontró ninguna URL, devolver una cadena vacía
echo ""
fi
}
# Función para iniciar sesión con token
login() {
# Verificar que el archivo de token encriptado existe
@ -74,25 +116,19 @@ login() {
exit 1
fi
# Crear archivo temporal para el token desencriptado
local temp_file=$(mktemp)
# Desencriptar el archivo con SOPS
sops --decrypt "${DEVELOPER_DIR}/forgejo.sops.yaml" > "$temp_file"
if [ $? -ne 0 ]; then
rm -f "$temp_file"
echo "Error: No se pudo desencriptar el archivo de token."
exit 1
fi
# Extraer el token en base64 del archivo YAML
local token_base64=$(grep "token:" "$temp_file" | cut -d' ' -f2)
# Decodificar el token de base64
local token=$(echo "$token_base64" | base64 --decode)
local token=$(sops -d ${DEVELOPER_DIR}/forgejo.sops.yaml | grep -oP '(?<=token: ).*' | base64 -d)
# Limpiar el archivo temporal
rm -f "$temp_file"
# Obtener la URL base de Forgejo
local forgejo_url=$(get_forgejo_url)
if [ -n "$forgejo_url" ]; then
echo "Usando servidor Forgejo: $forgejo_url"
export BERG_BASE_URL="$forgejo_url"
else
echo "ADVERTENCIA: No se pudo detectar automáticamente la URL de Forgejo."
echo "Si la autenticación falla, establezca manualmente BERG_BASE_URL."
fi
# Iniciar sesión con berg
echo "Iniciando sesión en Forgejo..."