#!/bin/bash # # Script: fj_login.sh # Description: Script para autenticación con Forgejo usando tokens encriptados # Modified: 2025/03/15 # [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)" # Leer DEVSPATH desde el archivo de configuración o usar "devs" por defecto if [ -f "$SCRIPT_DIR/config/devspath.dat" ]; then DEVSPATH=$(cat "$SCRIPT_DIR/config/devspath.dat") else DEVSPATH="devs" fi BIN_HOME="$HOME/$DEVSPATH" BIN_BASE="bin" BIN_LIBS="lib" BIN_MESG="msg" # CHECK SHELL LANGUAGE BIN_LANG=${LANG:0:2} # Importar bibliotecas necesarias source "${BIN_HOME}/${BIN_BASE}/${BIN_LIBS}/base.lib" source "${BIN_HOME}/${BIN_BASE}/${BIN_LIBS}/console.lib" # Cargar mensajes en el idioma del sistema o español por defecto load_messages "${BIN_HOME}/${BIN_BASE}" "${BIN_MESG}" "${BIN_LANG}" "head" # Variables globales title="${head_000} ${head_002}" # Función para verificar si berg está instalado check_berg_installed() { if ! command -v berg &> /dev/null; then echo "Error: berg (Forgejo CLI) no está instalado. Por favor, ejecute bin/fjcli_install.sh primero." exit 1 fi } # Función para verificar si SOPS está instalado check_sops_installed() { if ! command -v sops &> /dev/null; then echo "Error: SOPS no está instalado. Por favor, ejecute bin/bootstrap.sh para instalar las herramientas necesarias." exit 1 fi } # 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 "Error: No se encontró el archivo de token para Forgejo." echo "Por favor, ejecute bin/cversadm_token.sh para configurar el token primero." 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) # Limpiar el archivo temporal rm -f "$temp_file" # Iniciar sesión con berg echo "Iniciando sesión en Forgejo..." berg auth login -t "$token" local login_status=$? if [ $login_status -eq 0 ]; then echo "Sesión iniciada correctamente en Forgejo." else echo "Error al iniciar sesión en Forgejo. Por favor, verifique su token." exit 1 fi } # Función para cerrar sesión logout() { echo "Cerrando sesión de Forgejo..." berg auth logout if [ $? -eq 0 ]; then echo "Sesión cerrada correctamente." else echo "Error al cerrar la sesión." exit 1 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 "$@"