From 31735062c272c38da22d284603d2c040424a5f9e Mon Sep 17 00:00:00 2001 From: "Mauro Rosero P." Date: Wed, 19 Mar 2025 17:33:41 -0500 Subject: [PATCH] [IMPROVED] Agregar mensajes i18n para forgejo_login.sh MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Agregar mensajes i18n para integraci贸n de Forgejo - Actualizar hora de modificaci贸n del script - Implementar uso de variables de mensajes localizados 馃 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- bin/forgejo_login.sh | 189 ++++++++++++++++++++++++++++++++++++++++++ bin/msg/developers.es | 18 ++++ 2 files changed, 207 insertions(+) create mode 100755 bin/forgejo_login.sh diff --git a/bin/forgejo_login.sh b/bin/forgejo_login.sh new file mode 100755 index 0000000..807b034 --- /dev/null +++ b/bin/forgejo_login.sh @@ -0,0 +1,189 @@ +#!/bin/bash +# +# Script: forgejo_login.sh +# Description: Script para autenticaci贸n con Forgejo usando tokens encriptados +# Created: 2025/03/19 11:57:08 +# Modified: 2025/03/19 15:47:08 +# [Author] Cortana Rosero One +# [Generated] Created by Claude Code (claude-3-7-sonnet-20250219) +# +# Derechos de Autor (C) [2025] [Mauro Rosero P. ] +# +# Este programa es software libre: usted puede redistribuirlo y/o modificarlo +# bajo los t茅rminos de la Licencia P煤blica Affero General de GNU tal como +# lo publica la Free Software Foundation, ya sea la versi贸n 3 de la licencia, +# o (a su elecci贸n) cualquier versi贸n posterior. +# +# Este programa se distribuye con la esperanza de que sea 煤til, +# pero SIN NINGUNA GARANT脥A; sin siquiera la garant铆a impl铆cita de +# COMERCIABILIDAD o IDONEIDAD PARA UN PROP脫SITO PARTICULAR. Consulte la +# Licencia P煤blica Affero General de GNU para obtener m谩s detalles. +# +# Deber铆a haber recibido una copia de la Licencia P煤blica Affero General +# junto con este programa. Si no la recibi贸, consulte . + +# Configuraci贸n inicial +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +BIN_BASE="bin" +BIN_LIBS="lib" +BIN_MESG="msg" +BIN_CFGS="config" +VERSION=$(cat "$BIN_HOME/$BIN_BASE/$BIN_CFGS/version") + + +# Leer DEVSPATH desde el archivo de configuraci贸n o usar "devs" por defecto +if [ -f "$SCRIPT_DIR/$BIN_CFGS/devspath.dat" ]; then + DEVSPATH=$(cat "$SCRIPT_DIR/$BIN_CFGS/devspath.dat") +else + DEVSPATH="devs" +fi +BIN_HOME="$HOME/$DEVSPATH" + + +# CHECK SHELL LANGUAGE +BIN_LANG=${LANG:0:2} + +# Importar bibliotecas necesarias +source "${BIN_HOME}/${BIN_BASE}/${BIN_LIBS}/base.lib" + +# Cargar mensajes en el idioma del sistema o espa帽ol por defecto +load_messages "${BIN_HOME}/${BIN_BASE}" "${BIN_MESG}" "${BIN_LANG}" "head" +load_messages "${BIN_HOME}/${BIN_BASE}" "${BIN_MESG}" "${BIN_LANG}" "developers" + +# Variables globales +title="${head_000} ${fgmsg_000}" + +# Funci贸n para verificar si berg est谩 instalado +check_berg_installed() { + if ! command -v berg &> /dev/null; then + echo "${fgmsg_001} ${fgmsg_002}" + exit 1 + fi +} + +# Funci贸n para verificar si SOPS est谩 instalado +check_sops_installed() { + if ! command -v sops &> /dev/null; then + echo "${fgmsg_003} ${fgmsg_004}" + exit 1 + 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 + + # Devolver solo el dominio sin protocolo + echo "$base_url" + else + # Si no se encontr贸 ninguna URL, devolver una cadena vac铆a + echo "" + fi +} + +# Estas funciones han sido eliminadas, ya no se crean ni eliminan alias +# Los usuarios pueden crear su propio alias manualmente si lo desean + +# Funci贸n para iniciar sesi贸n con token +login() { + # Verificar que el archivo de token encriptado existe + if [ ! -f "${DEVELOPER_DIR}/forgejo.sops.yaml" ]; then + echo "${fgmsg_005}" + echo "${fgmsg_006}" + exit 1 + fi + + # Decodificar el token de base64 + local token=$(sops -d ${DEVELOPER_DIR}/forgejo.sops.yaml | grep -oP '(?<=token: ).*' | base64 -d) + + # Obtener la URL base de Forgejo + local forgejo_url=$(get_forgejo_url) + + if [ -n "$forgejo_url" ]; then + echo "${fgmsg_007} $forgejo_url" + export BERG_BASE_URL="$forgejo_url" + else + echo "${fgmsg_008}" + echo "${fgmsg_009}" + fi + + # Iniciar sesi贸n con berg + echo "${fgmsg_010}" + berg auth login -t "$token" + local login_status=$? + + if [ $login_status -eq 0 ]; then + echo "${fgmsg_011}" + else + echo "${fgmsg_012}" + exit 1 + fi +} + +# Funci贸n para cerrar sesi贸n +logout() { + # Obtener la URL base de Forgejo + local forgejo_url=$(get_forgejo_url) + + if [ -n "$forgejo_url" ]; then + echo "${fgmsg_007} $forgejo_url" + export BERG_BASE_URL="$forgejo_url" + fi + + # Ya no se eliminan alias + + echo "${fgmsg_013}" + if ! berg auth status &>/dev/null; then + echo "${fgmsg_014}" + else + berg auth logout -s 2>/dev/null || true + echo "${fgmsg_015}" + fi +} + +# Funci贸n principal +main() { + # Verificar requisitos + check_berg_installed + check_sops_installed + + # Verificar par谩metros + if [ "$1" = "--logout" ]; then + logout + else + login + fi +} + +# Ejecutar funci贸n principal con los par谩metros recibidos +main "$@" diff --git a/bin/msg/developers.es b/bin/msg/developers.es index 5ea298c..6f43a74 100644 --- a/bin/msg/developers.es +++ b/bin/msg/developers.es @@ -94,3 +94,21 @@ fjmsg_012="驴Desea instalar Forgejo CLI?" fjmsg_013="Esta herramienta le permite administrar instancias de Forgejo desde l铆nea de comandos." fjmsg_014="Instalaci贸n cancelada por el usuario." +# Mensajes para forgejo_login.sh +fgmsg_000="INICIO DE SESI脫N EN FORGEJO" +fgmsg_001="Error: berg (Forgejo CLI) no est谩 instalado." +fgmsg_002="Por favor, ejecute ${BIN_HOME}/${BIN_BASE}/fjadmin_install.sh primero." +fgmsg_003="Error: SOPS no est谩 instalado." +fgmsg_004="Por favor, ejecute bin/bootstrap.sh para instalar las herramientas necesarias." +fgmsg_005="Error: No se encontr贸 el archivo de token para Forgejo." +fgmsg_006="Por favor, ejecute bin/cversadm_token.sh para configurar el token primero." +fgmsg_007="Usando servidor Forgejo:" +fgmsg_008="ADVERTENCIA: No se pudo detectar autom谩ticamente la URL de Forgejo." +fgmsg_009="Si la autenticaci贸n falla, establezca manualmente BERG_BASE_URL." +fgmsg_010="Iniciando sesi贸n en Forgejo..." +fgmsg_011="Sesi贸n iniciada correctamente en Forgejo." +fgmsg_012="Error al iniciar sesi贸n en Forgejo. Por favor, verifique su token." +fgmsg_013="Cerrando sesi贸n de Forgejo..." +fgmsg_014="No hay sesi贸n activa en Forgejo." +fgmsg_015="Sesi贸n cerrada." +