From eba12f7f411cb2d7508d47db79da0b94e034a700 Mon Sep 17 00:00:00 2001 From: quadrismegistus Date: Sat, 22 Aug 2020 09:07:46 +0100 Subject: [PATCH] ??? --- p2p/api.py | 55 ++++++++--------------------------------- p2p/kademlia/network.py | 17 +++++++++---- 2 files changed, 22 insertions(+), 50 deletions(-) diff --git a/p2p/api.py b/p2p/api.py index c965670..7b1ace7 100644 --- a/p2p/api.py +++ b/p2p/api.py @@ -210,7 +210,7 @@ class Api(object): authentic = verify_signature(signature, value_bytes, public_sender_key) if not authentic: - self.log('message is inauthentic for set??',authentic) + raise Exception('message is inauthentic for set??' +str(authentic)) return None # encrypt? @@ -229,7 +229,9 @@ class Api(object): payload = sep2.join(WDV) res = aes_rsa_encrypt(payload,encrypt_for_pubkey) - if res is None: return None + if res is None: + raise Exception('encryption result does not exist') + return None payload_encr_aes, payload_encr_aes_key, payload_encr_aes_iv = res decryption_tools = sep2.join([ @@ -373,6 +375,9 @@ class Api(object): res = await node.set(key,proc(key,value)) #node.stop() + self.log('reconnecting ...',self._node) + #await self._node.stop() + #await self.connect() return res return await _set() @@ -398,7 +403,6 @@ class Api(object): self.log(f'jsonize_res({res0} [{type(res0)}] --> {res} [{type(res)}') return res - # if key_or_keys.startsiwth('/post/'): res = await self.get(key_or_keys,decode_data=decode_data) self.log('get_json() got from get():',res) #self.log('get_json() got',res) @@ -451,9 +455,11 @@ class Api(object): # if not (name and passkey): return {'error':'Name and password needed'} person = await self.get_person(name) if person is not None: + self.log('register() person <-',person) # try to log in self.log('my keys',self.keys.keys()) if not name in self.keys: + self.log('!! person already exists') return {'error':'Person already exists'} # test 3 conditions @@ -462,6 +468,7 @@ class Api(object): if simple_lock_test(privkey,pubkey): self.username=name + self.log('!! logging into',name) return {'success':'Logging back in...'} private_key = generate_rsa_key() @@ -491,40 +498,6 @@ class Api(object): self.log('!!',e) return {'error':'Incorrect password'} - - - ## LOGIN - async def login(self,name,passkey): - # verify input - if not (name and passkey): - return {'error':'Name and password required'} - - # try to load private key - private_key_dat = self.load_private_key(passkey) - if 'error' in private_key_dat: - return {'error':private_key_dat['error']} - if not 'success' in private_key_dat: - return {'error':'Incorrect password?'} - self._private_key = private_key = private_key_dat['success'] - - # see if user exists - person = await self.get_person(name) - # self.log(person) - if person is None: - return {'error':'Login failed'} - - # verify keys - # self.log('got person =',person) - person_public_key_pem = person['public_key'] - public_key = load_pubkey(person_public_key_pem) #load_public_key(person_public_key_pem.encode()) - self._public_key = real_public_key = private_key.public_key() - - #log('PUBLIC',public_key.public_numbers()) - #log('REAL PUBLIC',real_public_key.public_numbers()) - - if public_key.public_numbers() != real_public_key.public_numbers(): - return {'error':'Keys do not match!'} - return {'success':'Login successful', 'username':name} #@property def get_keys(self): @@ -626,14 +599,6 @@ class Api(object): file_store['parts_data']=pieces return file_store - #def get_current_event_id(self): - # return self.get_json_val(self,'/current/event/id') - - # def get_uri(self): - # event_id = self.get_current_event_id() - # event_id=1 if event_id is None else int(event_id) - # return f'/post/{event_id}' - async def flush(self): self.log('saving back to db file...') node = await self.node diff --git a/p2p/kademlia/network.py b/p2p/kademlia/network.py index dc52040..f01fef8 100644 --- a/p2p/kademlia/network.py +++ b/p2p/kademlia/network.py @@ -182,8 +182,8 @@ class Server: nearest = self.protocol.router.find_neighbors(node) self.log(f'nearest = {nearest}') if not nearest: - self.log("There are no known neighbors to get key %s" % key) - return None + raise Exception("There are no known neighbors to get key %s" % key) + spider = ValueSpiderCrawl(self.protocol, node, nearest, @@ -192,10 +192,14 @@ class Server: found = await spider.find() self.log(f"Eventually found for key {key} value {found}") + if not found: + return None + raise Exception('nothing found!') # set it locally? @EDIT if store_anywhere and found: - self.storage.set(dkey,found) + self.log(f'storing anywhere: {dkey} -> {found}') + self.storage[dkey]=found return found @@ -219,8 +223,10 @@ class Server: """ node = Node(dkey) + self.log('set_digest()',node) nearest = self.protocol.router.find_neighbors(node) + self.log('set_digest() nearest -->',nearest) if not nearest: self.log.warning("There are no known neighbors to set key %s", dkey.hex()) @@ -234,7 +240,7 @@ class Server: # if this node is close too, then store here as well if store_anywhere: self.log(f'store_anywhere -> {dkey} --> {value}') - self.storage.set(dkey,value) + self.storage[dkey]=value else: biggest = max([n.distance_to(node) for n in nodes]) if self.node.distance_to(node) < biggest: @@ -243,9 +249,10 @@ class Server: results = [self.protocol.call_store(n, dkey, value) for n in nodes] + results = await asyncio.gather(*results) self.log(f'--> set() results --> {results}') # return true only if at least one store call succeeded - return any(await asyncio.gather(*results)) + return any(results) def save_state(self, fname): """