From 7ef561ff2effcd289bd014cfcb104f9378261d80 Mon Sep 17 00:00:00 2001 From: jMyles Date: Tue, 23 Oct 2018 18:45:43 +0200 Subject: [PATCH] Some cleanup and refactor. --- nucypher/characters/lawful.py | 3 +- nucypher/config/constants.py | 8 ++-- nucypher/config/node.py | 52 ++++++++++-------------- nucypher/network/middleware.py | 2 + nucypher/network/nodes.py | 10 ++--- nucypher/utilities/sandbox/middleware.py | 6 +++ nucypher/utilities/sandbox/ursula.py | 1 - 7 files changed, 41 insertions(+), 41 deletions(-) diff --git a/nucypher/characters/lawful.py b/nucypher/characters/lawful.py index 8b7eacfbb..74c95df53 100644 --- a/nucypher/characters/lawful.py +++ b/nucypher/characters/lawful.py @@ -584,9 +584,10 @@ class Ursula(Character, VerifiableNode, Miner): network_middleware: RestMiddleware, host: str, port: int, + certificate_filepath, federated_only: bool = False) -> 'Ursula': - response = network_middleware.node_information(host, port) # TODO: pre-load certificates here? + response = network_middleware.node_information(host, port, certificate_filepath=certificate_filepath) if not response.status_code == 200: raise RuntimeError("Got a bad response: {}".format(response)) diff --git a/nucypher/config/constants.py b/nucypher/config/constants.py index 43201d8c7..2c9910c77 100644 --- a/nucypher/config/constants.py +++ b/nucypher/config/constants.py @@ -12,10 +12,10 @@ APP_DIR = AppDirs("nucypher", "NuCypher") DEFAULT_CONFIG_ROOT = APP_DIR.user_data_dir # -# Bootnodes +# seednodes # -Bootnode = namedtuple('Bootnode', ['checksum_address', 'rest_url']) -BOOTNODES = ( - Bootnode('0xDbf2Bc4b81eB46CdDfa52348Ecf3c142841267E0', 'https://18.223.117.103:9151'), +SeednodeMetadata = namedtuple('seednode', ['checksum_address', 'rest_host', 'rest_port']) +SEEDNODES = ( + SeednodeMetadata('0xDbf2Bc4b81eB46CdDfa52348Ecf3c142841267E0', 'https://18.223.117.103', '9151'), ) diff --git a/nucypher/config/node.py b/nucypher/config/node.py index 9b31086cc..f380ba388 100644 --- a/nucypher/config/node.py +++ b/nucypher/config/node.py @@ -1,31 +1,21 @@ import binascii import json import os -import socket -import ssl -import time from json import JSONDecodeError from logging import getLogger from tempfile import TemporaryDirectory from typing import List -from urllib.parse import urlparse from constant_sorrow import constants -from cryptography import x509 -from cryptography.hazmat.backends import default_backend -from cryptography.hazmat.primitives.serialization import Encoding -from nucypher.characters.lawful import Ursula -from nucypher.config.constants import DEFAULT_CONFIG_ROOT, BASE_DIR, BOOTNODES -from nucypher.config.keyring import NucypherKeyring, _write_tls_certificate +from nucypher.config.constants import DEFAULT_CONFIG_ROOT, BASE_DIR +from nucypher.config.keyring import NucypherKeyring from nucypher.config.storages import NodeStorage, InMemoryNodeStorage, LocalFileBasedNodeStorage from nucypher.crypto.powers import CryptoPowerUp -from nucypher.crypto.signing import signature_splitter from nucypher.network.middleware import RestMiddleware class NodeConfiguration: - _name = 'node' _Character = NotImplemented @@ -236,19 +226,19 @@ class NodeConfiguration: def static_payload(self) -> dict: """Exported static configuration values for initializing Ursula""" payload = dict( - # Identity - is_me=self.is_me, - federated_only=self.federated_only, # TODO: 466 - checksum_address=self.checksum_address, - keyring_dir=self.keyring_dir, - known_certificates_dir=self.known_certificates_dir, + # Identity + is_me=self.is_me, + federated_only=self.federated_only, # TODO: 466 + checksum_address=self.checksum_address, + keyring_dir=self.keyring_dir, + known_certificates_dir=self.known_certificates_dir, - # Behavior - learn_on_same_thread=self.learn_on_same_thread, - abort_on_learning_error=self.abort_on_learning_error, - start_learning_now=self.start_learning_now, - save_metadata=self.save_metadata - ) + # Behavior + learn_on_same_thread=self.learn_on_same_thread, + abort_on_learning_error=self.abort_on_learning_error, + start_learning_now=self.start_learning_now, + save_metadata=self.save_metadata + ) return payload @property @@ -334,9 +324,9 @@ class NodeConfiguration: try: # Directories - os.mkdir(self.keyring_dir, mode=0o700) # keyring - os.mkdir(self.known_nodes_dir, mode=0o755) # known_nodes - os.mkdir(self.known_certificates_dir, mode=0o755) # known_certs + os.mkdir(self.keyring_dir, mode=0o700) # keyring + os.mkdir(self.known_nodes_dir, mode=0o755) # known_nodes + os.mkdir(self.known_certificates_dir, mode=0o755) # known_certs self.node_storage.initialize() # TODO: default know dir if not self.temp and not no_keys: @@ -356,7 +346,8 @@ class NodeConfiguration: except FileExistsError: existing_paths = [os.path.join(self.config_root, f) for f in os.listdir(self.config_root)] - message = "There are pre-existing nucypher installation files at {}: {}".format(self.config_root, existing_paths) + message = "There are pre-existing nucypher installation files at {}: {}".format(self.config_root, + existing_paths) self.log.critical(message) raise NodeConfiguration.ConfigurationError(message) @@ -374,7 +365,7 @@ class NodeConfiguration: raise self.ConfigurationError("No account specified to unlock keyring") self.keyring = NucypherKeyring(keyring_root=self.keyring_dir, account=self.checksum_address, - *args, ** kwargs) + *args, **kwargs) def write_keyring(self, passphrase: str, @@ -410,7 +401,8 @@ class NodeConfiguration: blank=False) -> str: if force and os.path.isfile(output_filepath): - raise self.ConfigurationError('There is an existing file at the registry output_filepath {}'.format(output_filepath)) + raise self.ConfigurationError( + 'There is an existing file at the registry output_filepath {}'.format(output_filepath)) output_filepath = output_filepath or self.registry_filepath source = source or self.REGISTRY_SOURCE diff --git a/nucypher/network/middleware.py b/nucypher/network/middleware.py index 67115de42..0e820a809 100644 --- a/nucypher/network/middleware.py +++ b/nucypher/network/middleware.py @@ -3,9 +3,11 @@ import requests from bytestring_splitter import BytestringSplitter, VariableLengthBytestring from umbral.fragments import CapsuleFrag +from twisted.logger import Logger class RestMiddleware: + log = Logger() def consider_arrangement(self, arrangement): node = arrangement.ursula diff --git a/nucypher/network/nodes.py b/nucypher/network/nodes.py index 171d17fe8..d2b4638ed 100644 --- a/nucypher/network/nodes.py +++ b/nucypher/network/nodes.py @@ -8,6 +8,7 @@ from cryptography.hazmat.primitives.serialization import Encoding from cryptography.x509 import Certificate from eth_keys.datatypes import Signature as EthSignature +from nucypher.config.constants import SeednodeMetadata from nucypher.config.keyring import _write_tls_certificate from nucypher.crypto.powers import BlockchainPower, SigningPower, EncryptingPower, NoSigningPower from nucypher.network.protocols import SuspiciousActivity @@ -15,7 +16,6 @@ from nucypher.network.server import TLSHostingPower class VerifiableNode: - _evidence_of_decentralized_identity = constants.NOT_SIGNED verified_stamp = False verified_interface = False @@ -72,7 +72,7 @@ class VerifiableNode: return True elif self.federated_only and signature is constants.NOT_SIGNED: message = "This node can't be verified in this manner, " \ - "but is OK to use in federated mode if you" \ + "but is OK to use in federated mode if you" \ " have reason to believe it is trustworthy." raise self.WrongMode(message) else: @@ -131,9 +131,9 @@ class VerifiableNode: certificate_filepath=certificate_filepath) if not response.status_code == 200: raise RuntimeError("Or something.") # TODO: Raise an error here? Or return False? Or something? - timestamp, signature, identity_evidence, \ - verifying_key, encrypting_key, \ - public_address, certificate_vbytes, rest_info = self._internal_splitter(response.content) + timestamp, signature, identity_evidence, \ + verifying_key, encrypting_key, \ + public_address, certificate_vbytes, rest_info = self._internal_splitter(response.content) verifying_keys_match = verifying_key == self.public_keys(SigningPower) encrypting_keys_match = encrypting_key == self.public_keys(EncryptingPower) diff --git a/nucypher/utilities/sandbox/middleware.py b/nucypher/utilities/sandbox/middleware.py index 4eba3a419..f41e72146 100644 --- a/nucypher/utilities/sandbox/middleware.py +++ b/nucypher/utilities/sandbox/middleware.py @@ -1,4 +1,9 @@ +from urllib.parse import urlparse + from apistar import TestClient +from cryptography import x509 +from cryptography.hazmat.backends import default_backend +from cryptography.hazmat.primitives.serialization import Encoding from nucypher.characters.lawful import Ursula from nucypher.network.middleware import RestMiddleware @@ -88,6 +93,7 @@ class EvilMiddleWare(MockRestMiddleware): """ Middleware for assholes. """ + def propagate_shitty_interface_id(self, ursula, shitty_interface_id): """ Try to get Ursula to propagate a malicious (or otherwise shitty) interface ID. diff --git a/nucypher/utilities/sandbox/ursula.py b/nucypher/utilities/sandbox/ursula.py index 98fb7e7f3..96928a4de 100644 --- a/nucypher/utilities/sandbox/ursula.py +++ b/nucypher/utilities/sandbox/ursula.py @@ -15,7 +15,6 @@ from typing import Set, Union from nucypher.blockchain.eth import constants from nucypher.characters.lawful import Ursula from nucypher.config.characters import UrsulaConfiguration -from nucypher.config.constants import BOOTNODES from nucypher.crypto.api import secure_random from nucypher.utilities.sandbox.constants import (DEFAULT_NUMBER_OF_URSULAS_IN_DEVELOPMENT_NETWORK, TEST_URSULA_STARTING_PORT,