#!/bin/bash # # Valori e funzioni condivisi dagli script di questo repository. # Qui non ci sono segreti: solo nomi di server e percorsi. GITEA_URL="https://git.oto-farm.com" GITEA_HOST="git.oto-farm.com" AWS_REGIONE="eu-central-1" AWS_ACCOUNT="170187898933" AWS_CONSOLE="https://$AWS_ACCOUNT.signin.aws.amazon.com/console" # Dove stanno le cose della persona, sul suo PC. Gli script dei progetti # leggono da qui: non cambiarli senza cambiare anche loro. TOKEN_GITEA_FILE="$HOME/.config/oto/gitea.token" CHIAVE_SSH="$HOME/.ssh/oto_ed25519" # I nomi con cui la cercano gli script dei progetti (STAGING_SSH_KEY e # PRODUCTION_SSH_KEY in project.conf.sh): sono la stessa chiave, perche' sui # server l'amministratore mette quella del profilo Gitea, cioe' questa. CHIAVI_SSH_PROGETTI="$HOME/.ssh/oto_staging_ed25519 $HOME/.ssh/oto_production_ed25519" # I server, con i nomi che usano gli script dei progetti. Staging e la # produzione nuova stanno su rete privata: senza VPN non rispondono. Le # produzioni sono due finche' i siti non sono migrati tutti: oto-production # e' la macchina nuova (dal 05/10/2026), oto-production-old quella dove # girano ancora i siti. Sulla nuova l'utente non e' admin. STAGING_NOME="oto-staging" STAGING_HOST="10.110.185.10" STAGING_UTENTE="admin" PRODUZIONE_NOME="oto-production" PRODUZIONE_HOST="10.110.137.20" PRODUZIONE_UTENTE="admin.produzione" PRODUZIONE_VECCHIA_NOME="oto-production-old" PRODUZIONE_VECCHIA_HOST="vps-production.oto-farm.com" PRODUZIONE_VECCHIA_UTENTE="admin" # Un parametro che ogni ruolo di sviluppo puo' leggere: serve a verifica.sh # per sapere se l'accesso AWS arriva davvero alla cassaforte. SSM_PROVA="/oto/_comune/MAILTRAP_SMTP_USER" if [ -t 1 ] ; then VERDE=$'\e[32m' ; ROSSO=$'\e[31m' ; GIALLO=$'\e[33m' ; GRASSETTO=$'\e[1m' ; FINE=$'\e[0m' else VERDE="" ; ROSSO="" ; GIALLO="" ; GRASSETTO="" ; FINE="" fi ok () { echo " ${VERDE}✔${FINE} $*" ; } male () { echo " ${ROSSO}✘${FINE} $*" ; } attento () { echo " ${GIALLO}!${FINE} $*" ; } titolo () { echo ; echo "${GRASSETTO}$*${FINE}" ; } c_e () { command -v "$1" > /dev/null 2>&1 ; } # Su Mac Homebrew non si mette da solo nel PATH: senza, git e aws installati # con brew sembrano mancare anche se ci sono. if ! c_e brew ; then for B in /opt/homebrew/bin/brew /usr/local/bin/brew ; do [ -x "$B" ] && eval "$("$B" shellenv)" && break done fi token_gitea () { [ -s "$TOKEN_GITEA_FILE" ] && tr -d '[:space:]' < "$TOKEN_GITEA_FILE" } # Una chiamata all'API di Gitea col token salvato: il token passa a curl da # stdin, non dalla riga di comando (che sul PC si vede con ps). Scrive il corpo # della risposta e, sull'ultima riga, il codice HTTP (000 se Gitea non ha # risposto). Gli argomenti in piu' vanno a curl (-X POST, -d ...). api_gitea () { local percorso="$1" ; shift printf 'header = "Authorization: token %s"\n' "$(token_gitea)" \ | curl -s --max-time 15 -K - -w '\n%{http_code}' "$@" "$GITEA_URL/api/v1$percorso" } # Il valore di un campo testo da un JSON di Gitea, anche con gli spazi dopo i # due punti. Basta per i campi che servono qui; un parser vero vorrebbe jq, che # su Windows non c'e'. campo_json () { sed -n "s/.*\"$1\"[[:space:]]*:[[:space:]]*\"\([^\"]*\)\".*/\1/p" | head -n 1 } # Stampa il nome utente Gitea del token. Esce 1 se il token manca o Gitea lo # rifiuta, 2 se Gitea non risponde: "non vale" e "non so" sono due cose # diverse, e la seconda non deve far chiedere di nuovo la password. utente_gitea () { local risposta codice [ -n "$(token_gitea)" ] || return 1 risposta="$(api_gitea /user)" codice="${risposta##*$'\n'}" case "$codice" in 200) printf '%s' "${risposta%$'\n'*}" | campo_json login ;; 401|403) return 1 ;; *) return 2 ;; esac } # Controlla che l'identita' AWS (un ARN) sia l'utente IAM della persona # nell'account di OTO, e non solo un utente con lo stesso nome altrove. aws_e_di () { [ "$1" = "arn:aws:iam::$AWS_ACCOUNT:user/$2" ] } # Le variabili che fanno usare alla AWS CLI un'altra chiave invece di quella # scritta in ~/.aws/credentials: le stampa, senza i valori. aws_variabili_in_conflitto () { local v for v in AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY AWS_SESSION_TOKEN AWS_PROFILE AWS_SHARED_CREDENTIALS_FILE ; do [ -n "${!v:-}" ] && printf '%s ' "$v" done } # La credenziale che git usa davvero per Gitea, chiesta a git e non letta da # un file: e' quella che serve per clone e pull, qualunque gestore la tenga. # Senza nessuna domanda: nel terminale di VS Code GIT_ASKPASS aprirebbe una # finestra di login. password_git_gitea () { printf 'protocol=https\nhost=%s\n\n' "$GITEA_HOST" \ | env -u GIT_ASKPASS -u SSH_ASKPASS GIT_TERMINAL_PROMPT=0 GCM_INTERACTIVE=never \ git -c credential.interactive=never credential fill 2> /dev/null \ | sed -n 's/^password=//p' }