From 038acb6b5ecb513f521ab19059da651f7ccb07a1 Mon Sep 17 00:00:00 2001 From: FailedProxy Date: Tue, 24 Mar 2026 01:08:07 +0000 Subject: [PATCH] test --- Master.conf | 38 ++++++++++++++++++++++++++- common.sh | 74 ++++++++++++++--------------------------------------- 2 files changed, 56 insertions(+), 56 deletions(-) diff --git a/Master.conf b/Master.conf index 4db225b..1a0e88a 100644 --- a/Master.conf +++ b/Master.conf @@ -111,4 +111,40 @@ PROFILE_EXCLUDE_DIRS["important-data"]="logs *.tmp" PROFILE_EXCLUDE_DIRS["emby"]="logs *.tmp" #----------------------------------------------------------------------------------------------- #---------------End Of User Variables, Please adjust here in Master.conf as needed ------------- -#----------------------------------------------------------------------------------------------- \ No newline at end of file +#----------------------------------------------------------------------------------------------- + + +# Detect local hostname +LOCAL_HOSTNAME="$(hostname)" +if [[ "$LOCAL_HOSTNAME" == "$HOST1" ]]; then + LOCAL_SERVER_NAME="$HOST1" + REMOTE_SERVER_NAME="$HOST2" +elif [[ "$LOCAL_HOSTNAME" == "$HOST2" ]]; then + LOCAL_SERVER_NAME="$HOST2" + REMOTE_SERVER_NAME="$HOST1" +else + echo "Error: Local hostname ($LOCAL_HOSTNAME) not recognized." + exit 1 +fi +echo "Local server: $LOCAL_SERVER_NAME" +echo "Remote server: $REMOTE_SERVER_NAME" + + +# Remote Server Ip Resolution +# Resolve Tailscale IP dynamically +REMOTE_SERVER=$(tailscale ip -4 "$REMOTE_SERVER_NAME" 2>/dev/null) +if [[ -z "$REMOTE_SERVER" ]]; then + echo "Error: Could not resolve Tailscale IP for $REMOTE_SERVER_NAME" + exit 1 +fi + + +# SSH Key Mapping +KEY_ID="$LOCAL_SERVER_NAME|$REMOTE_SERVER_NAME" +if [[ -n "${SSH_KEYS[$KEY_ID]}" ]]; then + SSH_KEY="${SSH_KEYS[$KEY_ID]}" +else + echo "Error: No SSH key defined for $LOCAL_SERVER_NAME → $REMOTE_SERVER_NAME" + exit 1 +fi +echo "Using SSH key: $SSH_KEY" \ No newline at end of file diff --git a/common.sh b/common.sh index d1c4a3f..93675af 100644 --- a/common.sh +++ b/common.sh @@ -17,14 +17,14 @@ #---------------End Of User Variables, Please adjust in Master.conf as needed ------------------ #----------------------------------------------------------------------------------------------- -# Load Master.conf +# Load Master.conf relative to calling script load_master_conf() { local script_dir script_dir="$(cd "$(dirname "${BASH_SOURCE[1]}")" && pwd)" + local master_conf="$script_dir/../Master.conf" if [ -f "$master_conf" ]; then - # shellcheck source=/dev/null source "$master_conf" echo "Loaded Master.conf from $master_conf" else @@ -33,7 +33,7 @@ load_master_conf() { fi } -# Parse CLI args +# Parse CLI arguments (flags + VAR=value overrides) parse_args() { DRY_RUN=${DRY_RUN:-false} @@ -43,35 +43,44 @@ parse_args() { local VAR_VALUE="${ARG#*=}" if declare -p "$VAR_NAME" &>/dev/null; then - printf -v "$VAR_NAME" '%s' "$VAR_VALUE" - echo "Overriding $VAR_NAME -> $VAR_VALUE" + if [[ "$VAR_NAME" =~ ^[A-Za-z_][A-Za-z0-9_]*$ ]]; then + printf -v "$VAR_NAME" '%s' "$VAR_VALUE" + echo "Overriding $VAR_NAME -> $VAR_VALUE" + else + echo "Warning: Invalid variable name $VAR_NAME" + fi else echo "Warning: Unknown variable $VAR_NAME, ignoring." fi else case "$ARG" in - --dry-run|-n) DRY_RUN=true ;; + --dry-run|-n) + DRY_RUN=true + ;; --help|-h) echo "Usage: script [--dry-run|-n] [VAR=value ...]" - exit 0 ;; + exit 0 + ;; *) - echo "Warning: Unknown argument $ARG" ;; + echo "Warning: Unknown argument $ARG" + ;; esac fi done } -# Validate integer +# Validate integer (non-negative) validate_int() { local name="$1" local value="$2" + if ! [[ "${value:-}" =~ ^[0-9]+$ ]]; then echo "Error: $name must be a non-negative integer." exit 1 fi } -# Require variable to be set +# Optional: require variable to be set require_var() { local var="$1" if [[ -z "${!var:-}" ]]; then @@ -79,48 +88,3 @@ require_var() { exit 1 fi } - -#----------------------------------------------------------------------------------------------- -# Host and Remote Detection -# Uses HOST1, HOST2, and SSH_KEYS from Master.conf -#----------------------------------------------------------------------------------------------- -detect_hosts() { - # Must load Master.conf first - require_var HOST1 - require_var HOST2 - require_var SSH_KEYS - - LOCAL_HOSTNAME="$(hostname)" - - if [[ "$LOCAL_HOSTNAME" == "$HOST1" ]]; then - LOCAL_SERVER_NAME="$HOST1" - REMOTE_SERVER_NAME="$HOST2" - elif [[ "$LOCAL_HOSTNAME" == "$HOST2" ]]; then - LOCAL_SERVER_NAME="$HOST2" - REMOTE_SERVER_NAME="$HOST1" - else - echo "Error: Local hostname ($LOCAL_HOSTNAME) not recognized." - exit 1 - fi - - echo "Local server: $LOCAL_SERVER_NAME" - echo "Remote server: $REMOTE_SERVER_NAME" - - # Resolve remote Tailscale IP - REMOTE_SERVER=$(tailscale ip -4 "$REMOTE_SERVER_NAME" 2>/dev/null) - if [[ -z "$REMOTE_SERVER" ]]; then - echo "Error: Could not resolve Tailscale IP for $REMOTE_SERVER_NAME" - exit 1 - fi - - # Determine SSH key - KEY_ID="$LOCAL_SERVER_NAME|$REMOTE_SERVER_NAME" - if [[ -n "${SSH_KEYS[$KEY_ID]}" ]]; then - SSH_KEY="${SSH_KEYS[$KEY_ID]}" - else - echo "Error: No SSH key defined for $LOCAL_SERVER_NAME → $REMOTE_SERVER_NAME" - exit 1 - fi - - echo "Using SSH key: $SSH_KEY" -} \ No newline at end of file