From 6ec3519bce60b803d620c6479c2d751f3affa83e Mon Sep 17 00:00:00 2001 From: "Mauro Rosero P." Date: Sat, 15 Mar 2025 14:23:09 -0500 Subject: [PATCH] =?UTF-8?q?[ADDED]=20Script=20fj=5Flogin.sh=20para=20auten?= =?UTF-8?q?ticaci=C3=B3n=20con=20Forgejo=20usando=20tokens=20encriptados?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Crear script para gestionar la autenticación con Forgejo/Codeberg - Implementar parámetros --login (default) y --logout para iniciar/cerrar sesión - Desencriptar el token almacenado en forgejo.sops.yaml usando SOPS - Decodificar el token desde base64 y usarlo para autenticación - Integrar con berg (CLI de Forgejo) para la autenticación segura - Verificar requisitos (berg, SOPS) antes de proceder - Usar DEVELOPER_DIR de base.lib para la ubicación estándar del token 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- bin/fj_login.sh | 137 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 137 insertions(+) create mode 100755 bin/fj_login.sh diff --git a/bin/fj_login.sh b/bin/fj_login.sh new file mode 100755 index 0000000..0b33369 --- /dev/null +++ b/bin/fj_login.sh @@ -0,0 +1,137 @@ +#!/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 "$@" \ No newline at end of file