kemonine
/
lollipopcloud
Archived
1
0
Fork 0

Update AutoVPN docs to be more robust and have a fixedup script/systemd unit

This commit is contained in:
KemoNine 2018-07-10 21:57:50 -04:00
parent a78434a332
commit 546877a9d7
No known key found for this signature in database
GPG Key ID: 331B7E1107F99137
1 changed files with 28 additions and 14 deletions

View File

@ -132,7 +132,8 @@ class AutoVPN(object):
self.delay = delay
self.failed_attempts = 0
self.bus = dbus.SystemBus()
self.ignore_networks = filter(None, ignore_networks.split(','))
self.ignore_networks = ignore_networks.split(',')
print(self.ignore_networks)
self.activate_vpn() # Auto connect at startup (Listen for StateChanged going forward)
self.get_network_manager().connect_to_signal("StateChanged", self.onNetworkStateChanged)
logger.info("Maintaining connection for %s, reattempting up to %d times with %d ms between retries", vpn_name, max_attempts, delay)
@ -198,32 +199,44 @@ class AutoVPN(object):
logger.info("No active connections found")
return None
logger.info("Found %d active connection(s)", len(active_connections))
return active_connections[0]
return active_connections
def activate_vpn(self):
"""Activates the vpn connection."""
logger.info("Activating %s VPN connection", self.vpn_name)
vpn_con = self.get_vpn_interface(self.vpn_name)
active_con = self.get_active_connection()
if active_con is None:
active_cons = self.get_active_connection()
if active_cons is None:
print('active cons is None')
return
# check if we have to ignore vpn
proxy = self.bus.get_object('org.freedesktop.NetworkManager', active_con)
con = dbus.Interface(proxy, 'org.freedesktop.DBus.Properties').Get('org.freedesktop.NetworkManager.Connection.Active', 'Connection')
proxy = self.bus.get_object('org.freedesktop.NetworkManager', con)
settings = dbus.Interface(proxy, 'org.freedesktop.NetworkManager.Settings.Connection').GetSettings()
if settings['connection']['id'] in self.ignore_networks:
logger.info("Ignored network connection %s based on settings", settings['connection']['id'])
inet_con = None
for active_con in active_cons:
print(active_con)
# check if we have to ignore vpn
proxy = self.bus.get_object('org.freedesktop.NetworkManager', active_con)
con = dbus.Interface(proxy, 'org.freedesktop.DBus.Properties').Get('org.freedesktop.NetworkManager.Connection.Active', 'Connection')
proxy = self.bus.get_object('org.freedesktop.NetworkManager', con)
settings = dbus.Interface(proxy, 'org.freedesktop.NetworkManager.Settings.Connection').GetSettings()
if settings['connection']['id'] not in self.ignore_networks:
print('found valid con')
inet_con = active_con
break
if inet_con is None:
print('no valid con')
logger.info("Ignored network connections based on settings")
return
# activate vpn and watch for reconnects
if vpn_con and active_con:
if vpn_con and inet_con:
print('activating vpn')
print(inet_con)
try:
new_con = self.get_network_manager().ActivateConnection(
vpn_con,
dbus.ObjectPath("/"),
active_con,
inet_con,
)
proxy = self.bus.get_object('org.freedesktop.NetworkManager', new_con)
iface = dbus.Interface(proxy, 'org.freedesktop.NetworkManager.VPN.Connection')
@ -232,6 +245,7 @@ class AutoVPN(object):
except dbus.exceptions.DBusException:
# Ignore dbus connections (in case VPN already active when this script runs)
# TODO: Do this handling better; maybe check active/inactive status above and bail if already active?
print('dbus.exceptions.DBusException')
pass
if __name__ == '__main__':
@ -274,7 +288,7 @@ After=network-online.target
Wants=network-online.target systemd-networkd-wait-online.service
[Service]
ExecStart=/etc/autovpn/autovpn.py `cat /etc/autovpn/default` `cat /etc/autovpn/exclude`
ExecStart=/bin/sh -c "/etc/autovpn/autovpn.py `cat /etc/autovpn/default` `cat /etc/autovpn/exclude`"
Restart=on-failure
[Install]