diff --git a/src/gossip/__init__.py b/src/gossip/__init__.py index 778a37e2..d17b9dee 100644 --- a/src/gossip/__init__.py +++ b/src/gossip/__init__.py @@ -1,3 +1,4 @@ +from time import sleep from typing import TYPE_CHECKING, Set from os import urandom import queue @@ -45,3 +46,5 @@ def start_gossip_threads( add_onionr_thread( gossip_client, 1, peer_set, block_queue, seed, initial_sleep=0) onionrplugins.events.event('gossip_start', data=peer_set, threaded=True) + sleep(4) + onionrplugins.events.event('bootstrap', data=peer_set) diff --git a/src/gossip/client.py b/src/gossip/client.py index 954785ba..a26f5a4c 100644 --- a/src/gossip/client.py +++ b/src/gossip/client.py @@ -33,4 +33,4 @@ def gossip_client( peer_set: Set['Peer'], block_queue: Queue['Block'], dandelion_seed: bytes): - onionrplugins.events.event('') + return diff --git a/static-data/default-plugins/tor/getsocks.py b/static-data/default-plugins/tor/getsocks.py index 2cb52f6c..815a7ca0 100644 --- a/static-data/default-plugins/tor/getsocks.py +++ b/static-data/default-plugins/tor/getsocks.py @@ -5,4 +5,5 @@ from torfilepaths import control_socket def get_socks(): with Controller.from_socket_file(control_socket) as controller: + controller.authenticate() return controller.get_listeners('SOCKS') diff --git a/static-data/default-plugins/tor/main.py b/static-data/default-plugins/tor/main.py index 1a97bea7..a29bb35a 100644 --- a/static-data/default-plugins/tor/main.py +++ b/static-data/default-plugins/tor/main.py @@ -6,9 +6,11 @@ This default plugin handles "flow" messages import sys import os import locale +from time import sleep import traceback from typing import Set, TYPE_CHECKING import base64 +from threading import Thread import stem from stem.control import Controller @@ -18,7 +20,6 @@ from utils import readstatic import config from filepaths import gossip_server_socket_file - from gossip.peer import Peer locale.setlocale(locale.LC_ALL, '') @@ -51,6 +52,7 @@ PLUGIN_VERSION = '0.0.0' bootstrap_file = f'{os.path.dirname(os.path.realpath(__file__))}/bootstrap.txt' + class OnionrTor: def __init__(self): return @@ -65,20 +67,28 @@ def on_bootstrap(api, data: Set[Peer] = None): bootstrap_nodes: Set[str] peers = data - socks_address, socks_port = get_socks() - try: with open(bootstrap_file, 'r') as bootstrap_file_obj: bootstrap_nodes = set(bootstrap_file_obj.read().split(',')) except FileNotFoundError: bootstrap_nodes = set() + while not os.path.exists(control_socket): + sleep(0.1) + + socks_address, socks_port = get_socks()[0] + sleep(10) + for transport_address in bootstrap_nodes: + config.reload() + if config.get('tor.transport_address') == transport_address: + # ignore if its our own + continue if not transport_address.endswith('.onion'): transport_address += '.onion' tor_peer = TorPeer(socks_address, socks_port, transport_address) try: - s = tor_peer.get_socket() + tor_peer.get_socket() except Exception as e: logger.warn( f"Could not connnect to Tor peer {transport_address} " + @@ -87,12 +97,12 @@ def on_bootstrap(api, data: Set[Peer] = None): logger.warn(traceback.format_exc()) continue peers.add(tor_peer) + logger.info(f"Connected to {len(peers)} Tor peers", terminal=True) def on_gossip_start(api, data: Set[Peer] = None): # We don't do gossip logic - starttor.start_tor() with Controller.from_socket_file(control_socket) as controller: @@ -105,15 +115,16 @@ def on_gossip_start(api, data: Set[Peer] = None): if not key: add_onion_resp = controller.create_ephemeral_hidden_service( {'80': f'unix:{gossip_server_socket_file}'}, - key_content='BEST', key_type='NEW') + key_content='BEST', key_type='NEW', detached=True) config.set('tor.key', add_onion_resp.private_key, savefile=True) new_address = 'Generated ' - config.set('tor.transport_address', add_onion_resp.service_id) + config.set('tor.transport_address', add_onion_resp.service_id, + savefile=True) else: try: add_onion_resp = controller.create_ephemeral_hidden_service( {'80': f'unix:{gossip_server_socket_file}'}, - key_content=key, key_type='ED25519-V3') + key_content=key, key_type='ED25519-V3', detached=True) except stem.ProtocolError: logger.error( "Could not start Tor transport. Try restarting Onionr", @@ -124,4 +135,3 @@ def on_gossip_start(api, data: Set[Peer] = None): f'{new_address}Tor transport address {add_onion_resp.service_id}' + '.onion', terminal=True) - diff --git a/static-data/default-plugins/tor/starttor.py b/static-data/default-plugins/tor/starttor.py index f0618101..00df434e 100644 --- a/static-data/default-plugins/tor/starttor.py +++ b/static-data/default-plugins/tor/starttor.py @@ -1,3 +1,5 @@ +from time import sleep + import stem.process from utils.identifyhome import identify_home @@ -5,14 +7,13 @@ from utils.identifyhome import identify_home from torfilepaths import control_socket from torfilepaths import tor_data_dir -def start_tor(): +def start_tor(): tor_process = stem.process.launch_tor_with_config( config={ 'SocksPort': 'auto OnionTrafficOnly', 'DataDirectory': tor_data_dir, 'ControlSocket': control_socket, }, - completion_percent=50, - take_ownership=True + completion_percent=100 ) diff --git a/static-data/default-plugins/tor/torpeer.py b/static-data/default-plugins/tor/torpeer.py index beb02801..37726a35 100644 --- a/static-data/default-plugins/tor/torpeer.py +++ b/static-data/default-plugins/tor/torpeer.py @@ -10,6 +10,6 @@ class TorPeer: def get_socket(self) -> socks.socksocket: s = socks.socksocket() - s.set_proxy(socks.SOCKS4, self.socks_host, self.socks_host, rdns=True) + s.set_proxy(socks.SOCKS4, self.socks_host, self.socks_port, rdns=True) s.connect((self.onion_address, 80)) return s diff --git a/static-data/default_config.json b/static-data/default_config.json index fe047199..6f4cc0fb 100755 --- a/static-data/default_config.json +++ b/static-data/default_config.json @@ -1,6 +1,6 @@ { "advanced": { - "security_auditing": true + "security_auditing": false }, "allocations": { "disk": 1073741824 @@ -12,7 +12,6 @@ "dev_mode": false, "display_header": true, "ephemeral_tunnels": false, - "hide_created_blocks": true, "insert_deniable_blocks": true, "max_block_age": 2678400, "minimum_block_pow": 5, @@ -22,9 +21,7 @@ "security_level": 0, "show_notifications": true, "store_plaintext_blocks": true, - "upload_mixing": false, - "use_bootstrap_list": true, - "use_subprocess_pow_if_possible": true + "use_bootstrap_list": true }, "log": { "console": { @@ -33,7 +30,7 @@ }, "file": { "output": true, - "remove_on_exit": true + "remove_on_exit": false }, "verbosity": "default" },