#!/bin/bash # Script per sincronizzare lo stato VPN con il database # Salva come: storage/scripts/sync-vpn-status.sh # Aggiungi al cron: */5 * * * * /var/www/polizia/storage/scripts/sync-vpn-status.sh SCRIPT_DIR="$(dirname "$0")" LARAVEL_DIR="$(dirname "$(dirname "$SCRIPT_DIR")")" LOG_FILE="$SCRIPT_DIR/../logs/vpn-status-sync.log" # Funzione di logging log_message() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >> "$LOG_FILE" } # Controlla se AnyConnect รจ installato if [[ ! -f "/opt/cisco/anyconnect/bin/vpn" ]]; then log_message "ERROR: Cisco AnyConnect not found" exit 1 fi # Ottieni lo stato reale del sistema VPN_OUTPUT=$(/opt/cisco/anyconnect/bin/vpn state 2>/dev/null) SYSTEM_STATUS="unknown" if echo "$VPN_OUTPUT" | grep -q "state: Connected"; then SYSTEM_STATUS="connected" elif echo "$VPN_OUTPUT" | grep -q "Disconnected"; then SYSTEM_STATUS="disconnected" fi log_message "INFO: System VPN status detected: $SYSTEM_STATUS" # Ottieni lo stato dal database cd "$LARAVEL_DIR" DB_STATUS=$(php artisan tinker --execute="echo \DB::table('vpn_status')->first()->status ?? 'no_record';" 2>/dev/null | tail -1) log_message "INFO: Database VPN status: $DB_STATUS" # Aggiorna il database se necessario if [[ "$SYSTEM_STATUS" != "$DB_STATUS" && "$SYSTEM_STATUS" != "unknown" ]]; then log_message "INFO: Status mismatch detected. Updating database from '$DB_STATUS' to '$SYSTEM_STATUS'" php artisan tinker --execute=" \DB::table('vpn_status')->updateOrInsert( ['id' => 1], [ 'status' => '$SYSTEM_STATUS', 'last_update' => now(), 'updated_at' => now(), ] ); echo 'Database updated successfully'; " >> "$LOG_FILE" 2>&1 log_message "SUCCESS: Database status updated to: $SYSTEM_STATUS" else log_message "INFO: Status already in sync: $SYSTEM_STATUS" fi