mirror of
https://github.com/freedombox/FreedomBox.git
synced 2026-09-19 04:59:01 +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 = subparsers.add_parser('configure', help='Configure Tor')
|
||||||
configure.add_argument('--service', choices=['enable', 'disable'],
|
configure.add_argument('--service', choices=['enable', 'disable'],
|
||||||
help='Configure Tor service')
|
help='Configure Tor service')
|
||||||
|
configure.add_argument('--relay', choices=['enable', 'disable'],
|
||||||
|
help='Configure relay')
|
||||||
configure.add_argument('--hidden-service', choices=['enable', 'disable'],
|
configure.add_argument('--hidden-service', choices=['enable', 'disable'],
|
||||||
help='Configure hidden service')
|
help='Configure hidden service')
|
||||||
configure.add_argument('--apt-transport-tor',
|
configure.add_argument('--apt-transport-tor',
|
||||||
@ -123,6 +125,12 @@ def subcommand_configure(arguments):
|
|||||||
if arguments.service == 'disable':
|
if arguments.service == 'disable':
|
||||||
_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
|
restart = arguments.service == None
|
||||||
if arguments.hidden_service == 'enable':
|
if arguments.hidden_service == 'enable':
|
||||||
_enable_hs(restart=restart)
|
_enable_hs(restart=restart)
|
||||||
@ -140,7 +148,17 @@ def subcommand_configure(arguments):
|
|||||||
|
|
||||||
def get_status():
|
def get_status():
|
||||||
"""Return dict with Tor 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():
|
def get_ports():
|
||||||
@ -227,6 +245,30 @@ def _disable():
|
|||||||
action_utils.service_disable('tor')
|
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):
|
def _enable_hs(restart=True):
|
||||||
"""Enable Tor hidden service"""
|
"""Enable Tor hidden service"""
|
||||||
if get_hidden_service()['enabled']:
|
if get_hidden_service()['enabled']:
|
||||||
|
|||||||
@ -31,6 +31,13 @@ class TorForm(forms.Form): # pylint: disable=W0232
|
|||||||
enabled = forms.BooleanField(
|
enabled = forms.BooleanField(
|
||||||
label=_('Enable Tor'),
|
label=_('Enable Tor'),
|
||||||
required=False)
|
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(
|
hs_enabled = forms.BooleanField(
|
||||||
label=_('Enable Tor Hidden Service'),
|
label=_('Enable Tor Hidden Service'),
|
||||||
required=False,
|
required=False,
|
||||||
|
|||||||
@ -93,17 +93,15 @@
|
|||||||
value="{% trans "Update setup" %}"/>
|
value="{% trans "Update setup" %}"/>
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
<h3>{% trans "Bridge" %}</h3>
|
{% if status.relay_enabled %}
|
||||||
|
<h3>{% trans "Bridge Relay" %}</h3>
|
||||||
<p>
|
<p>
|
||||||
{% blocktrans trimmed %}
|
{% blocktrans trimmed %}
|
||||||
Your {{ box_name }} is configured as a Tor bridge with obfsproxy,
|
If your {{ box_name }} is behind a router or firewall, you should
|
||||||
so it can help circumvent censorship. If your {{ box_name }} is
|
make sure the following ports are open, and port-forwarded, if
|
||||||
behind a router or firewall, you should make sure the following
|
necessary:
|
||||||
ports are open, and port-forwarded, if necessary:
|
|
||||||
{% endblocktrans %}
|
{% endblocktrans %}
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-sm-3">
|
<div class="col-sm-3">
|
||||||
<table class="table table-bordered table-condensed table-striped">
|
<table class="table table-bordered table-condensed table-striped">
|
||||||
@ -124,6 +122,7 @@
|
|||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
<h3>{% trans "SOCKS" %}</h3>
|
<h3>{% trans "SOCKS" %}</h3>
|
||||||
|
|
||||||
|
|||||||
@ -59,6 +59,7 @@ def get_status():
|
|||||||
|
|
||||||
return {'enabled': is_enabled(),
|
return {'enabled': is_enabled(),
|
||||||
'is_running': is_running(),
|
'is_running': is_running(),
|
||||||
|
'relay_enabled': status['relay_enabled'],
|
||||||
'ports': ports,
|
'ports': ports,
|
||||||
'hs_enabled': hs_info['enabled'],
|
'hs_enabled': hs_info['enabled'],
|
||||||
'hs_status': hs_info['status'],
|
'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'
|
arg_value = 'enable' if new_status['enabled'] else 'disable'
|
||||||
arguments.extend(['--service', arg_value])
|
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']:
|
if old_status['hs_enabled'] != new_status['hs_enabled']:
|
||||||
arg_value = 'enable' if new_status['hs_enabled'] else 'disable'
|
arg_value = 'enable' if new_status['hs_enabled'] else 'disable'
|
||||||
arguments.extend(['--hidden-service', arg_value])
|
arguments.extend(['--hidden-service', arg_value])
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user