#!/bin/bash #Script : forgejo_login.sh #Apps : MRDEVS TOOLS #Description : Conectar con Forgejo Admin usando tokens encriptado #Author : Cortana Rosero One #Company Email : cortana@rosero.one #Generated by : Claude Code (claude-3-7-sonnet-20250219) #Created : 2025/03/19 11:57:08 #Modified : 2025/03/19 15:47:08 #Version : 1.2.0 #Use Notes : #============================================================================== # Derechos de Autor [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 "$@"