mirror of
https://github.com/freedombox/FreedomBox.git
synced 2026-06-17 11:10:23 +00:00
Enable/disable Tor hidden service.
Currently only supports a single hidden service for HTTP/HTTPS.
This commit is contained in:
parent
cf52bf5029
commit
50797f9a92
87
actions/tor
87
actions/tor
@ -42,9 +42,15 @@ def parse_arguments():
|
||||
# Stop Tor and disable service
|
||||
subparsers.add_parser('stop', help='Stop Tor service')
|
||||
|
||||
# Get currently configured Tor hidden service
|
||||
# Get currently configured Tor hidden service information
|
||||
subparsers.add_parser('get-hs', help='Get hidden service')
|
||||
|
||||
# Enable Tor hidden service
|
||||
subparsers.add_parser('enable-hs', help='Enable hidden service')
|
||||
|
||||
# Disable Tor hidden service
|
||||
subparsers.add_parser('disable-hs', help='Disable hidden service')
|
||||
|
||||
return parser.parse_args()
|
||||
|
||||
|
||||
@ -78,23 +84,58 @@ def subcommand_stop(_):
|
||||
|
||||
|
||||
def subcommand_get_hs(_):
|
||||
"""Get currently configured Tor hidden service"""
|
||||
hs_dir = ""
|
||||
hs_ports = []
|
||||
"""Print currently configured Tor hidden service information"""
|
||||
print get_hidden_service()
|
||||
|
||||
|
||||
def subcommand_enable_hs(_):
|
||||
"""Enable Tor hidden service"""
|
||||
|
||||
if get_hidden_service() != "":
|
||||
return
|
||||
|
||||
with open(TOR_CONFIG, 'r') as file:
|
||||
lines = file.readlines()
|
||||
|
||||
lines.append("# Hidden Service configured by Plinth\n")
|
||||
lines.append("HiddenServiceDir /var/lib/tor/hidden_service/\n")
|
||||
lines.append("HiddenServicePort 80 127.0.0.1:80\n")
|
||||
lines.append("HiddenServicePort 443 127.0.0.1:443\n")
|
||||
|
||||
with open(TOR_CONFIG, 'w') as file:
|
||||
file.writelines(lines)
|
||||
|
||||
subprocess.call(['service', 'tor', 'restart'])
|
||||
|
||||
|
||||
def subcommand_disable_hs(_):
|
||||
"""Disable Tor hidden service"""
|
||||
|
||||
if not get_hidden_service():
|
||||
return
|
||||
|
||||
with open(TOR_CONFIG, 'r') as file:
|
||||
lines = file.readlines()
|
||||
|
||||
filtered_lines = []
|
||||
removing = False
|
||||
for line in lines:
|
||||
if line.startswith('HiddenServiceDir'):
|
||||
hs_dir = line.split()[1]
|
||||
elif line.startswith('HiddenServicePort'):
|
||||
hs_ports.append(line.split()[1])
|
||||
if removing:
|
||||
if not line.startswith("HiddenService"):
|
||||
# end of Plinth hidden service block -- stop removing lines
|
||||
removing = False
|
||||
filtered_lines.append(line)
|
||||
else:
|
||||
if line.startswith("# Hidden Service configured by Plinth"):
|
||||
# start of Plinth hidden service block -- remove following HiddenService lines
|
||||
removing = True
|
||||
else:
|
||||
filtered_lines.append(line)
|
||||
|
||||
if hs_dir != "":
|
||||
with open(hs_dir + 'hostname', 'r') as file:
|
||||
hs_hostname = file.read().strip()
|
||||
with open(TOR_CONFIG, 'w') as file:
|
||||
file.writelines(filtered_lines)
|
||||
|
||||
print hs_hostname + ' ' + ','.join(hs_ports)
|
||||
subprocess.call(['service', 'tor', 'restart'])
|
||||
|
||||
|
||||
def set_tor_service(enable):
|
||||
@ -111,6 +152,28 @@ def set_tor_service(enable):
|
||||
file.writelines(lines)
|
||||
|
||||
|
||||
def get_hidden_service():
|
||||
"""Returns a string with configured Tor hidden service information"""
|
||||
hs_dir = ""
|
||||
hs_ports = []
|
||||
|
||||
with open(TOR_CONFIG, 'r') as file:
|
||||
lines = file.readlines()
|
||||
for line in lines:
|
||||
if line.startswith('HiddenServiceDir'):
|
||||
hs_dir = line.split()[1]
|
||||
elif line.startswith('HiddenServicePort'):
|
||||
hs_ports.append(line.split()[1])
|
||||
|
||||
if hs_dir == "":
|
||||
return ""
|
||||
|
||||
with open(hs_dir + 'hostname', 'r') as file:
|
||||
hs_hostname = file.read().strip()
|
||||
|
||||
return hs_hostname + ' ' + ','.join(hs_ports)
|
||||
|
||||
|
||||
def main():
|
||||
"""Parse arguments and perform all duties"""
|
||||
arguments = parse_arguments()
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user