aboutsummaryrefslogtreecommitdiff
path: root/config/waybar/scripts/ivpn.sh
blob: 9ff88fcc740ceeda25df8f1757288e6418c53b1b (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
#!/usr/bin/env bash

ivpn_status_output () {
    ivpn status
}

ivpn_connected () {
    ivpn status | grep -q '^VPN.*: CONNECTED'
}

toggle_status () {
    if ivpn_connected; then
        ivpn disconnect
    else
        ivpn connect -f
    fi
}

case $1 in
    --status)
        status_output="$(ivpn_status_output)"
        if echo "$status_output" | grep -q '^VPN.*: CONNECTED'; then
            # Line after "VPN : CONNECTED" holds server + location,
            # e.g. "de.gw.ivpn.net [de3.gw.ivpn.net], Frankfurt (DE), Germany"
            server_line=$(echo "$status_output" | awk '/^VPN.*CONNECTED/{getline; sub(/^[ \t]+/, ""); print}')
            protocol=$(echo "$status_output" | awk -F': ' '/^[ \t]*Protocol/{print $2}')
            server_ip=$(echo "$status_output" | awk -F': ' '/^[ \t]*Server IP/{print $2}')
            endpoint="${server_line%%,*} (${protocol})"
            location="${server_line#*, } (${server_ip})"
            echo "{\"text\":\"\",\"class\":\"connected\",\"alt\":\"connected\", \"tooltip\": \"${endpoint}\\n${location}\"}"
        else
            echo "{\"text\":\"\",\"class\":\"disconnected\",\"alt\":\"disconnected\", \"tooltip\": \"VPN is not active.\"}"
        fi
    ;;
    --toggle)
        toggle_status
    ;;
esac