Generate file `ob_config` if property `master_address` is set

The file informs Tor that the hidden service is OnionBalanced.
pull/11/head
Onion Limited 4 years ago
parent 1352bf22e0
commit 45aa4001b3
No known key found for this signature in database
GPG Key ID: E4B6CAC49B242A44

@ -43,6 +43,7 @@ class Onion(ABC):
_pub_key_filename = None
_host_filename = None
_version = None
_master_address = None
def __init__(
self, private_key: bytes = None, hidden_service_path: str = None
@ -73,6 +74,10 @@ class Onion(ABC):
"Add private key"
...
def set_master_address(self, address: str) -> None:
"Set master address (OnionBalance)"
self._master_address = address
@abstractmethod
def _save_keypair(self, key) -> None:
"Generate pub key from priv key and save both in instance"
@ -113,6 +118,9 @@ class Onion(ABC):
f.write(self._get_private_key_has_native())
with open(os.path.join(path, self._host_filename), "w") as f:
f.write(self.onion_hostname)
if self._master_address:
with open(os.path.join(path, "ob_config"), "w") as f:
f.write(self.get_ob_config())
def get_available_private_key_formats(self) -> list:
"Get private key export availables formats"
@ -131,6 +139,9 @@ class Onion(ABC):
raise NotImplementedError("Method {method} if not implemented")
return getattr(self, method)()
def get_ob_config(self):
return "MasterOnionAddress {}".format(self._master_address)
@abstractmethod
def _get_private_key_has_native(self) -> bytes:
"Get private key like in tor native format"
@ -155,6 +166,10 @@ class Onion(ABC):
def version(self) -> str:
return str(self._version)
@property
def master_address(self) -> str:
return (self._master_address)
class OnionV2(Onion):
"""

@ -19,6 +19,7 @@ class _testOnion:
"priv": "get_private_key",
"pub": "get_public_key",
"onion": "onion_hostname",
"ob_config": "get_ob_config",
}
def generate_new_key(self):
@ -81,6 +82,13 @@ class _testOnion:
assert d.join(self.files["priv"]).read_binary() == o.get_private_key()
assert d.join(self.files["onion"]).read() == o.onion_hostname
def test_import_hidden_directory_with_ob_config(self, tmpdir):
d = tmpdir.mkdir("hidden_directory")
o = self.onion_cls(hidden_service_path=d, private_key=self.private_key)
o.set_master_address("juhu5cebdr4jlv33puderf7ow7air7ilo6ulcwrflkz5w6ttkxghnfad.onion")
o.write_hidden_service()
assert d.join(self.files["ob_config"]).read() == o.get_ob_config()
def test_version(self):
assert self.onion_cls().version == str(self.version)
@ -118,6 +126,7 @@ Ch5OTBuvMLzQ8W0yDwIDAQAB
files = {
"priv": "private_key",
"onion": "hostname",
"ob_config": "ob_config",
}
version = 2
@ -148,5 +157,6 @@ m9/hW13isA==
"priv": "hs_ed25519_secret_key",
"pub": "hs_ed25519_public_key",
"onion": "hostname",
"ob_config": "ob_config",
}
version = 3

Loading…
Cancel
Save