mirror of
https://github.com/freedombox/FreedomBox.git
synced 2026-03-11 09:04:54 +00:00
tor: Add option to toggle bridge relay
This commit is contained in:
parent
1c98d1272f
commit
38382ec09c
44
actions/tor
44
actions/tor
@ -53,6 +53,8 @@ def parse_arguments():
|
||||
configure = subparsers.add_parser('configure', help='Configure Tor')
|
||||
configure.add_argument('--service', choices=['enable', 'disable'],
|
||||
help='Configure Tor service')
|
||||
configure.add_argument('--relay', choices=['enable', 'disable'],
|
||||
help='Configure relay')
|
||||
configure.add_argument('--hidden-service', choices=['enable', 'disable'],
|
||||
help='Configure hidden service')
|
||||
configure.add_argument('--apt-transport-tor',
|
||||
@ -123,6 +125,12 @@ def subcommand_configure(arguments):
|
||||
if arguments.service == 'disable':
|
||||
_disable()
|
||||
|
||||
restart = arguments.service == None and arguments.hidden_service == None
|
||||
if arguments.relay == 'enable':
|
||||
_enable_relay(restart=restart)
|
||||
elif arguments.relay == 'disable':
|
||||
_disable_relay(restart=restart)
|
||||
|
||||
restart = arguments.service == None
|
||||
if arguments.hidden_service == 'enable':
|
||||
_enable_hs(restart=restart)
|
||||
@ -140,7 +148,17 @@ def subcommand_configure(arguments):
|
||||
|
||||
def get_status():
|
||||
"""Return dict with Tor status."""
|
||||
return {'ports': get_ports(), 'hidden_service': get_hidden_service()}
|
||||
return {'relay_enabled': is_relay_enabled(),
|
||||
'ports': get_ports(),
|
||||
'hidden_service': get_hidden_service()}
|
||||
|
||||
|
||||
def is_relay_enabled():
|
||||
"""Return whether bridge relay is enabled."""
|
||||
aug = augeas_load()
|
||||
orport = aug.get(TOR_CONFIG + '/ORPort')
|
||||
bridge = aug.get(TOR_CONFIG + '/BridgeRelay')
|
||||
return orport == 'auto' and bridge == '1'
|
||||
|
||||
|
||||
def get_ports():
|
||||
@ -227,6 +245,30 @@ def _disable():
|
||||
action_utils.service_disable('tor')
|
||||
|
||||
|
||||
def _enable_relay(restart=True):
|
||||
"""Enable Tor bridge relay."""
|
||||
aug = augeas_load()
|
||||
aug.set(TOR_CONFIG + '/ORPort', 'auto')
|
||||
aug.set(TOR_CONFIG + '/BridgeRelay', '1')
|
||||
aug.save()
|
||||
|
||||
if restart:
|
||||
if is_enabled() and is_running():
|
||||
action_utils.service_restart('tor')
|
||||
|
||||
|
||||
def _disable_relay(restart=False):
|
||||
"""Disable Tor bridge relay."""
|
||||
aug = augeas_load()
|
||||
aug.remove(TOR_CONFIG + '/ORPort')
|
||||
aug.set(TOR_CONFIG + '/BridgeRelay', '0')
|
||||
aug.save()
|
||||
|
||||
if restart:
|
||||
if is_enabled() and is_running():
|
||||
action_utils.service_restart('tor')
|
||||
|
||||
|
||||
def _enable_hs(restart=True):
|
||||
"""Enable Tor hidden service"""
|
||||
if get_hidden_service()['enabled']:
|
||||
|
||||
@ -31,6 +31,13 @@ class TorForm(forms.Form): # pylint: disable=W0232
|
||||
enabled = forms.BooleanField(
|
||||
label=_('Enable Tor'),
|
||||
required=False)
|
||||
relay_enabled = forms.BooleanField(
|
||||
label=_('Enable Tor bridge relay'),
|
||||
required=False,
|
||||
help_text=format_lazy(_(
|
||||
'When enabled, your {box_name} will run a Tor bridge relay with '
|
||||
'obfsproxy, so it can help circumvent censorship.'),
|
||||
box_name=_(cfg.box_name)))
|
||||
hs_enabled = forms.BooleanField(
|
||||
label=_('Enable Tor Hidden Service'),
|
||||
required=False,
|
||||
|
||||
@ -93,17 +93,15 @@
|
||||
value="{% trans "Update setup" %}"/>
|
||||
</form>
|
||||
|
||||
<h3>{% trans "Bridge" %}</h3>
|
||||
|
||||
{% if status.relay_enabled %}
|
||||
<h3>{% trans "Bridge Relay" %}</h3>
|
||||
<p>
|
||||
{% blocktrans trimmed %}
|
||||
Your {{ box_name }} is configured as a Tor bridge with obfsproxy,
|
||||
so it can help circumvent censorship. If your {{ box_name }} is
|
||||
behind a router or firewall, you should make sure the following
|
||||
ports are open, and port-forwarded, if necessary:
|
||||
If your {{ box_name }} is behind a router or firewall, you should
|
||||
make sure the following ports are open, and port-forwarded, if
|
||||
necessary:
|
||||
{% endblocktrans %}
|
||||
</p>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-sm-3">
|
||||
<table class="table table-bordered table-condensed table-striped">
|
||||
@ -124,6 +122,7 @@
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<h3>{% trans "SOCKS" %}</h3>
|
||||
|
||||
|
||||
@ -59,6 +59,7 @@ def get_status():
|
||||
|
||||
return {'enabled': is_enabled(),
|
||||
'is_running': is_running(),
|
||||
'relay_enabled': status['relay_enabled'],
|
||||
'ports': ports,
|
||||
'hs_enabled': hs_info['enabled'],
|
||||
'hs_status': hs_info['status'],
|
||||
|
||||
@ -80,6 +80,10 @@ def __apply_changes(request, old_status, new_status):
|
||||
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])
|
||||
|
||||
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])
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user