mirror of
https://gitlab.com/hacklab01/pivilion.git
synced 2026-08-06 16:08:22 +00:00
79 lines
2.5 KiB
Bash
Executable file
79 lines
2.5 KiB
Bash
Executable file
#!/bin/bash
|
|
set -euo pipefail
|
|
|
|
ROOT=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")/.." && pwd)
|
|
TMP=$(mktemp -d)
|
|
trap 'rm -rf "$TMP"' EXIT
|
|
USER_NAME=$(id -un)
|
|
|
|
cat > "$TMP/primary.conf" <<EOF
|
|
PIVILION_USER=$USER_NAME
|
|
PIVILION_MODE=hotspot
|
|
EOF
|
|
cat > "$TMP/fallback.conf" <<EOF
|
|
PIVILION_USER=$USER_NAME
|
|
PIVILION_HOME=$HOME
|
|
PIVILION_DIR=$TMP/pivilion
|
|
PIVILION_WEBROOT=/var/www/html/pivilion
|
|
PIVILION_MODE=onion
|
|
PIVILION_HOTSPOT_SSID=fixture-portal
|
|
PIVILION_WIFI_INTERFACE=wlan-test
|
|
EOF
|
|
|
|
export PIVILION_CONFIG_PATHS="$TMP/primary.conf $TMP/fallback.conf"
|
|
export PIVILION_STATE_DIR="$TMP/run"
|
|
export PIVILION_STATE_FILE="$TMP/run/status.tsv"
|
|
export PIVILION_SELECTED_MODE_FILE="$TMP/run/selected-mode"
|
|
source "$ROOT/usr/local/lib/pivilion/common.sh"
|
|
PIVILION_BOOT_ROOT="$TMP/boot"
|
|
export PIVILION_BOOT_ROOT
|
|
[ "$(pivilion_boot_config_path)" = "$TMP/boot/pivilion.conf" ]
|
|
unset PIVILION_BOOT_ROOT
|
|
pivilion_load_config
|
|
|
|
[ "$PIVILION_MODE" = hotspot ]
|
|
[ "$PIVILION_HOTSPOT_SSID" = fixture-portal ]
|
|
[ "$PIVILION_DIR" = "$TMP/pivilion" ]
|
|
|
|
install -d "$PIVILION_DIR" "$PIVILION_STATE_DIR"
|
|
printf 'onion\n' > "$PIVILION_DIR/mode"
|
|
[ "$(pivilion_current_mode)" = hotspot ]
|
|
cat > "$PIVILION_STATE_FILE" <<EOF
|
|
desired_mode onion
|
|
active_mode hotspot
|
|
backend networkmanager
|
|
health degraded
|
|
failure probe failed
|
|
EOF
|
|
[ "$(pivilion_state_value active_mode)" = hotspot ]
|
|
[ "$(pivilion_state_value health)" = degraded ]
|
|
[ "$(pivilion_state_value missing fallback)" = fallback ]
|
|
printf 'hotspot\n' > "$PIVILION_SELECTED_MODE_FILE"
|
|
[ "$(pivilion_selected_mode)" = hotspot ]
|
|
printf 'onion\n' > "$PIVILION_SELECTED_MODE_FILE"
|
|
[ "$(pivilion_selected_mode)" = onion ]
|
|
printf 'invalid\n' > "$PIVILION_SELECTED_MODE_FILE"
|
|
if pivilion_selected_mode >/dev/null 2>&1; then exit 1; fi
|
|
|
|
pivilion_print_issue > "$TMP/pivilion.issue"
|
|
grep -Fqx 'My IP address is \4{wlan-test}' "$TMP/pivilion.issue"
|
|
grep -q '^Welcome to Pivilion!$' "$TMP/pivilion.issue"
|
|
grep -q '^@@@@@@@@@@@@@@@@@@@' "$TMP/pivilion.issue"
|
|
|
|
mkdir "$TMP/bin"
|
|
cat > "$TMP/bin/nmcli" <<'EOF'
|
|
#!/bin/sh
|
|
exit 0
|
|
EOF
|
|
cat > "$TMP/bin/systemctl" <<'EOF'
|
|
#!/bin/sh
|
|
[ "${MOCK_NM_ACTIVE:-0}" = 1 ]
|
|
EOF
|
|
chmod +x "$TMP/bin/nmcli" "$TMP/bin/systemctl"
|
|
PATH="$TMP/bin:$PATH" MOCK_NM_ACTIVE=1 pivilion_uses_networkmanager
|
|
if PATH="$TMP/bin:$PATH" MOCK_NM_ACTIVE=0 pivilion_uses_networkmanager; then exit 1; fi
|
|
|
|
sed 's/PIVILION_MODE=hotspot/PIVILION_MODE=invalid/' "$TMP/primary.conf" > "$TMP/invalid.conf"
|
|
PIVILION_CONFIG_PATHS="$TMP/invalid.conf $TMP/fallback.conf"
|
|
export PIVILION_CONFIG_PATHS
|
|
if pivilion_load_config >/dev/null 2>&1; then exit 1; fi
|