tor: Move restart logic into plinth module

This commit is contained in:
James Valleroy 2016-09-11 21:10:54 -04:00 committed by Sunil Mohan Adapa
parent 6430ebbc71
commit 165e880329
No known key found for this signature in database
GPG Key ID: 36C361440C9BC971
2 changed files with 34 additions and 53 deletions

View File

@ -101,7 +101,7 @@ def subcommand_setup(_):
aug.set(TOR_CONFIG + '/SocksPort[1]', '[::]:9050')
aug.set(TOR_CONFIG + '/SocksPort[2]', '0.0.0.0:9050')
aug.set(TOR_CONFIG + '/ControlPort', '9051')
_enable_relay(relay='enable', bridge='enable', restart=False, aug=aug)
_enable_relay(relay='enable', bridge='enable', aug=aug)
aug.set(TOR_CONFIG + '/ExitPolicy[1]', 'reject *:*')
aug.set(TOR_CONFIG + '/ExitPolicy[2]', 'reject6 *:*')
@ -149,21 +149,14 @@ def subcommand_configure(arguments):
if arguments.service == 'disable':
_disable()
restart = arguments.service is None and \
arguments.hidden_service is None and \
arguments.relay is None and arguments.bridge_relay is None
_use_upstream_bridges(arguments.use_upstream_bridges, restart=restart,
aug=aug)
_use_upstream_bridges(arguments.use_upstream_bridges, aug=aug)
restart = arguments.service is None and arguments.hidden_service is None
_enable_relay(arguments.relay, arguments.bridge_relay, restart=restart,
aug=aug)
_enable_relay(arguments.relay, arguments.bridge_relay, aug=aug)
restart = arguments.service is None
if arguments.hidden_service == 'enable':
_enable_hs(restart=restart, aug=aug)
_enable_hs(aug=aug)
elif arguments.hidden_service == 'disable':
_disable_hs(restart=restart, aug=aug)
_disable_hs(aug=aug)
if arguments.service == 'enable':
_enable()
@ -191,7 +184,17 @@ def subcommand_set_upstream_bridges(arguments):
def subcommand_restart(_):
"""Restart Tor."""
if is_enabled() and is_running():
action_utils.service_restart('tor')
action_utils.service_restart('tor@plinth')
aug = augeas_load()
if aug.get(TOR_CONFIG + '/HiddenServiceDir'):
# wait until hidden service information is available
tries = 0
while not _get_hidden_service()['enabled']:
tries += 1
if tries >= 12:
return
time.sleep(10)
def get_status():
@ -316,7 +319,7 @@ def _disable():
action_utils.service_disable('tor@plinth')
def _use_upstream_bridges(use_upstream_bridges=None, restart=True, aug=None):
def _use_upstream_bridges(use_upstream_bridges=None, aug=None):
"""Enable use of upstream bridges."""
if use_upstream_bridges is None:
return
@ -331,12 +334,8 @@ def _use_upstream_bridges(use_upstream_bridges=None, restart=True, aug=None):
aug.save()
if restart:
if is_enabled() and is_running():
action_utils.service_restart('tor')
def _enable_relay(relay=None, bridge=None, restart=True, aug=None):
def _enable_relay(relay=None, bridge=None, aug=None):
"""Enable Tor bridge relay."""
if relay is None and bridge is None:
return
@ -361,12 +360,8 @@ def _enable_relay(relay=None, bridge=None, restart=True, aug=None):
aug.save()
if restart:
if is_enabled() and is_running():
action_utils.service_restart('tor@plinth')
def _enable_hs(restart=True, aug=None):
def _enable_hs(aug=None):
"""Enable Tor hidden service"""
if not aug:
aug = augeas_load()
@ -384,21 +379,8 @@ def _enable_hs(restart=True, aug=None):
'443 127.0.0.1:443')
aug.save()
if restart:
if is_enabled() and is_running():
action_utils.service_restart('tor@plinth')
# wait until hidden service information is available
tries = 0
while not _get_hidden_service()['enabled']:
tries += 1
if tries >= 12:
return
time.sleep(10)
def _disable_hs(restart=True, aug=None):
def _disable_hs(aug=None):
"""Disable Tor hidden service"""
if not aug:
aug = augeas_load()
@ -410,10 +392,6 @@ def _disable_hs(restart=True, aug=None):
aug.remove(TOR_CONFIG + '/HiddenServicePort')
aug.save()
if restart:
if is_enabled() and is_running():
action_utils.service_restart('tor@plinth')
def _enable_apt_transport_tor():
"""Enable package download over Tor."""

View File

@ -85,13 +85,10 @@ def __apply_changes(request, old_status, new_status):
arguments = []
if old_status['enabled'] != new_status['enabled']:
arg_value = 'enable' if new_status['enabled'] else 'disable'
arguments.extend(['--service', arg_value])
if old_status['relay_enabled'] != new_status['relay_enabled']:
arg_value = 'enable' if new_status['relay_enabled'] else 'disable'
arguments.extend(['--relay', arg_value])
needs_restart = True
if old_status['bridge_relay_enabled'] != \
new_status['bridge_relay_enabled']:
@ -99,10 +96,12 @@ def __apply_changes(request, old_status, new_status):
if not new_status['bridge_relay_enabled']:
arg_value = 'disable'
arguments.extend(['--bridge-relay', arg_value])
needs_restart = True
if old_status['hs_enabled'] != new_status['hs_enabled']:
arg_value = 'enable' if new_status['hs_enabled'] else 'disable'
arguments.extend(['--hidden-service', arg_value])
needs_restart = True
if old_status['apt_transport_tor_enabled'] != \
new_status['apt_transport_tor_enabled']:
@ -117,16 +116,20 @@ def __apply_changes(request, old_status, new_status):
if new_status['enabled'] and new_status['use_upstream_bridges']:
arg_value = 'enable'
arguments.extend(['--use-upstream-bridges', arg_value])
needs_restart = True
if old_status['enabled'] != new_status['enabled']:
arg_value = 'enable' if new_status['enabled'] else 'disable'
arguments.extend(['--service', arg_value])
needs_restart = False
if arguments:
config_process = actions.superuser_run(
'tor', ['configure'] + arguments, async=True)
actions.superuser_run('tor', ['configure'] + arguments)
if needs_restart and new_status['enabled']:
config_process = actions.superuser_run('tor', ['restart'], async=True)
else:
if needs_restart:
config_process = actions.superuser_run(
'tor', ['restart'], async=True)
else:
messages.info(request, _('Setting unchanged'))
messages.info(request, _('Setting unchanged'))
def _collect_config_result(request):