@@ -63,6 +63,7 @@ lazy-connect - Shell function to fuzzy search an IPSec VPN by name
63
63
-u - Update lazy-connect
64
64
-r - Refresh vpn list in ~/.config/lazy-connect
65
65
-h - Show this help
66
+ -d - Disconnect a connected VPN
66
67
EOF
67
68
}
68
69
@@ -105,7 +106,7 @@ function _lazy_connect() {
105
106
esac
106
107
fi
107
108
108
- osascript << EOF
109
+ result= $( osascript << EOF
109
110
on connectVpn(vpnName, password)
110
111
tell application "System Events"
111
112
tell process "SystemUIServer"
@@ -116,6 +117,7 @@ function _lazy_connect() {
116
117
delay 1
117
118
keystroke password
118
119
keystroke return
120
+ return "true"
119
121
on error errorStr
120
122
if errorStr does not contain "Can’t get menu item" and errorStr does not contain vpnName then
121
123
display dialog errorStr
@@ -127,6 +129,34 @@ function _lazy_connect() {
127
129
128
130
connectVpn("$vpn_name ", "$password ")
129
131
EOF
132
+ )
133
+ [[ $result -eq " true" ]] && echo $vpn_name | sed ' s/Connect/Disconnect/g' >> " $_lazy_connect_config_dir /connected_vpns"
134
+ }
135
+
136
+ function _lazy_disconnect() {
137
+ vpn_name=$1
138
+
139
+ osascript << EOF
140
+ on disconnectVpn(vpnName)
141
+ tell application "System Events"
142
+ tell process "SystemUIServer"
143
+ set vpnMenu to (menu bar item 1 of menu bar 1 where description is "VPN")
144
+ tell vpnMenu to click
145
+ try
146
+ click menu item vpnName of menu 1 of vpnMenu
147
+ on error errorStr
148
+ if errorStr does not contain "Can’t get menu item" and errorStr does not contain vpnName then
149
+ display dialog errorStr
150
+ end if
151
+ end try
152
+ end tell
153
+ end tell
154
+ end disconnectVpn
155
+
156
+ disconnectVpn("$vpn_name ")
157
+ sed "/Connect ${vpn_name} /d" $_lazy_connect_config_dir /vpns
158
+ sed "/Disconnect ${vpn_name} /d" $_lazy_connect_config_dir /connected_vpns | sort -u
159
+ EOF
130
160
}
131
161
132
162
function _lazy_connect_update() {
@@ -139,7 +169,7 @@ function lazy-connect() {
139
169
local OPTIND
140
170
mkdir -p $_lazy_connect_config_dir
141
171
142
- while getopts " iruh " opt; do
172
+ while getopts " iruhd " opt; do
143
173
case $opt in
144
174
h)
145
175
_lazy_connect_usage
@@ -154,6 +184,11 @@ function lazy-connect() {
154
184
_lazy_connect_vpn_refresh
155
185
return 0
156
186
;;
187
+ d)
188
+ vpn_name=$( cat $_lazy_connect_config_dir /connected_vpns | fzf --height=10 --ansi --reverse)
189
+ _lazy_disconnect " $vpn_name "
190
+ return 0
191
+ ;;
157
192
u)
158
193
_lazy_connect_update
159
194
return 0
0 commit comments