aboutsummaryrefslogtreecommitdiffstats
path: root/modules/scripts/warp-stop.sh
blob: 95fdc7e68c2bcd04582aa00c5579fcceabb0df08 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
set -euo pipefail

stop_daemon() {
  echo "Stopping warp-svc process..."

  if pgrep -x warp-svc >/dev/null 2>&1; then
    sudo pkill -x warp-svc
  else
    echo "warp-svc is not running."
    return 0
  fi

  echo "Waiting for warp-svc to stop..."
  for _ in {1..30}; do
    if ! pgrep -x warp-svc >/dev/null 2>&1; then
      echo "warp-svc stopped."
      return 0
    fi
    sleep 1
  done

  echo "ERROR: warp-svc did not stop in time" >&2
  exit 1
}

disconnect_client() {
  echo "Disconnecting from WARP..."
  if warp-cli status 2>&1 | grep -qi "Connected"; then
    sudo warp-cli disconnect
    echo "Disconnected."
  else
    echo "WARP is already disconnected."
  fi
}

main() {
  [[ "${EUID:-$(id -u)}" -eq 0 ]] || {
    if [[ -t 2 ]]; then
      echo -e "\e[31mERROR:\e[0m Must be run as root" >&2
    else
      echo "ERROR: Must be run as root" >&2
    fi
    exit 1
  }

  disconnect_client
  stop_daemon

  echo "Final status:"
  warp-cli status || true

  echo "Flushing DNS and restarting systemd-resolved..."
  sudo systemd-resolve --flush-caches
  sudo systemctl restart systemd-resolved
}

main "$@"