Files
ssh-monitor/contrib/test-config-parser.sh
T
PTah 18a65078fc feat: safe config parser without source (2.3.0-SAC)
Whitelist-based /etc/ssh-monitor.conf load; validate URLs/enums/CIDR; remove BACKUP_WEBHOOK_URL.
2026-07-08 12:57:36 +10:00

51 lines
1.2 KiB
Bash

#!/bin/bash
# Smoke-test safe config parser (no network). Run from repo root.
set -euo pipefail
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
# shellcheck source=ssh-monitor-perms.sh
source "$ROOT/ssh-monitor-perms.sh"
tmpdir="$(mktemp -d)"
trap 'rm -rf "$tmpdir"' EXIT
cfg="$tmpdir/test.conf"
cat >"$cfg" <<'EOF'
# comment
TELEGRAM_BOT_TOKEN="tok"
UseSAC="exclusive"
SAC_URL="https://sac.example.test"
WHITELIST_IPS="127.0.0.1,10.0.0.5"
WHITELIST_SUBNETS="10.0.0.0/24"
BACKUP_WEBHOOK_URL="https://hooks.example/legacy"
UNKNOWN_KEY="ignored"
EOF
ssh_monitor_config_load_file "$cfg"
[ "${TELEGRAM_BOT_TOKEN:-}" = "tok" ] || {
echo "FAIL: TELEGRAM_BOT_TOKEN" >&2
exit 1
}
[ "${UseSAC:-}" = "exclusive" ] || {
echo "FAIL: UseSAC" >&2
exit 1
}
ips_csv="${WHITELIST_IPS:-}"
subs_csv="${WHITELIST_SUBNETS:-}"
WHITELIST_IPS=()
WHITELIST_SUBNETS=()
IFS=',' read -r -a WHITELIST_IPS <<<"$ips_csv"
IFS=',' read -r -a WHITELIST_SUBNETS <<<"$subs_csv"
ssh_monitor_validate_config_values || {
echo "FAIL: validate_config_values" >&2
exit 1
}
printf 'EVIL="$(id)"\n' >"$tmpdir/bad.conf"
if ssh_monitor_config_load_file "$tmpdir/bad.conf" 2>/dev/null; then
echo "OK: config parser smoke test passed"