blob: 63ab2e09ea24e50f1c92f928fa69e866bfc57d8f (
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
|
# Connect to one of the Mullvad VPN Servers via Wireguard and optionally filter by name
export def connect [
--filter: string # Filter by VPN server config name, e.g. 'de' to filter German servers
] {
try {
let current_status = (status)
if ($current_status | is-not-empty) {
let connected_server_name = ($current_status | get name | get 0)
print $"You are already connected to ($connected_server_name)."
return
}
let servers = (sudo ls /etc/wireguard/ | lines | str replace '.conf' '') | where { |name| $name =~ ($filter | default '') }
sudo wg-quick up ($servers | select (random int 0..($servers | length)) | get 0)
} catch {
|err|
print $"Failed to connect to VPN...\n\nError: ($err.msg)"
}
}
# Check if you are connected to a Mullvad VPN server.
# Return:
# If connected: table<name: string, ip: string>
# If not: nothing
export def status [] {
try {
let response = (http get https://am.i.mullvad.net/connected --max-time 5sec)
let result = ($response | parse "You are connected to Mullvad (server {name}). Your IP address is {ip}")
if ($result | is-not-empty) {
return $result
}
} catch {
|err|
print $"Failed to get response from status...\n\nError: ($err.msg)"
}
}
# Disconnect the active VPN server connection
export def disconnect [] {
try {
let current_status = (status)
if ($current_status | is-empty) {
print "You are not connected to any Mullvad VPN server."
return
}
let current_server_name = ($current_status | get name | get 0)
sudo wg-quick down $current_server_name
} catch {
|err|
print $"Failed to disconnect active VPN connection...\n\n Error: ($err.msg)"
}
}
|