#!/bin/bash # # DICE VERDE O ROSSO PER OGNI ACCESSO, e per ogni rosso cosa fare. # # ./verifica.sh # # Non modifica niente e non chiede niente: si puo' lanciare quando si vuole, # anche da Claude. Esce 0 se e' tutto verde, 1 altrimenti. set -u cd "$(dirname "$0")" || exit 1 . ./comune.sh ROSSI=0 rosso () { male "$@" ; ROSSI=$((ROSSI + 1)) ; } titolo "Programmi" for P in git docker aws curl ssh ; do if c_e "$P" ; then ok "$P" ; else rosso "$P non installato" ; fi done if c_e docker ; then if docker info > /dev/null 2>&1 ; then ok "Docker risponde" else rosso "Docker installato ma non risponde (e' acceso? il tuo utente e' nel gruppo docker?)" ; fi fi if c_e claude ; then ok "Claude Code" ; else attento "Claude Code non installato (non obbligatorio, ma ti guida)" ; fi titolo "AWS" # Chi e' la persona lo dice Gitea: una chiave AWS di un altro sul PC vuol dire # che tutto quello che fa su AWS risulta fatto da lui. UTENTE="$(utente_gitea)" if c_e aws && IDENTITA="$(aws sts get-caller-identity --query Arn --output text 2> /dev/null)" ; then if [ -n "$UTENTE" ] && [ "${IDENTITA##*/}" != "$UTENTE" ] ; then rosso "la chiave AWS di questo PC e' di ${IDENTITA##*/}, non tua ($UTENTE): rilancia ./configura.sh, che la sostituisce" else ok "accesso: ${IDENTITA##*/}" fi if aws ssm get-parameter --region "$AWS_REGIONE" --name "$SSM_PROVA" --query Parameter.Name --output text > /dev/null 2>&1 ; then ok "legge i segreti comuni su SSM" else rosso "non legge SSM: all'amministratore serve darti il ruolo di sviluppo" fi else rosso "AWS non configurato: rilancia ./configura.sh, che ti dice dove crearti la chiave nella console ($AWS_CONSOLE)" fi titolo "Gitea" if [ -n "$UTENTE" ] ; then ok "token valido (utente $UTENTE)" if grep -q "@$GITEA_HOST" "$HOME/.git-credentials" 2> /dev/null || [ -n "$(git config --global credential.helper)" ] ; then ok "git sa come entrare su $GITEA_HOST" else rosso "git non ha le credenziali di Gitea: rilancia ./configura.sh" fi else rosso "token Gitea mancante o non valido: rilancia ./configura.sh" fi titolo "Chiave SSH" if [ -f "$CHIAVE_SSH" ] ; then ok "$CHIAVE_SSH" ; else rosso "chiave mancante: rilancia ./configura.sh" ; fi titolo "VPN e server" # La VPN si riconosce da una cosa sola: staging, che sta su rete privata, # risponde sulla porta SSH. Niente `timeout`: sul Mac non c'e'. porta_aperta () { bash -c "exec 3<>/dev/tcp/$1/$2" 2> /dev/null & local pid=$! ( sleep 5 ; kill "$pid" 2> /dev/null ) & local sveglia=$! wait "$pid" 2> /dev/null ; local esito=$? kill "$sveglia" 2> /dev/null return "$esito" } if porta_aperta "$STAGING_HOST" 22 ; then ok "VPN attiva (staging raggiungibile)" if ssh -o BatchMode=yes -o ConnectTimeout=8 "$STAGING_NOME" true 2> /dev/null ; then ok "entri su staging ($STAGING_NOME)" else rosso "staging non accetta la tua chiave: l'amministratore deve ancora aggiungerla" fi else rosso "staging non raggiungibile: la VPN e' accesa?" fi if ssh -o BatchMode=yes -o ConnectTimeout=8 "$PRODUZIONE_NOME" true 2> /dev/null ; then ok "entri in produzione ($PRODUZIONE_NOME)" else attento "produzione: non entri (normale se non hai il ruolo di rilascio, o se la tua chiave non e' ancora stata aggiunta)" fi titolo "Risultato" if [ "$ROSSI" = "0" ] ; then ok "tutto a posto. Prossimo passo: ./progetti.sh" exit 0 fi male "$ROSSI cose da sistemare (sopra, in rosso)" exit 1