diff --git a/komrade/backend/crypt.py b/komrade/backend/crypt.py index 13fe66a..8a75d75 100644 --- a/komrade/backend/crypt.py +++ b/komrade/backend/crypt.py @@ -91,7 +91,7 @@ class Crypt(Logger): def set(self,k,v,prefix=''): if self.has(k,prefix=prefix): self.log("I'm afraid I can't let you do that, overwrite someone's data!") - return False + return (False,None,None) k_b=self.package_key(k,prefix=prefix) k_b_hash = self.hash(k_b) @@ -111,11 +111,18 @@ Crypt.set( ''') # store self.store.put(k_b_hash,v_b) - return True + return (True,k_b_hash,v_b) def exists(self,k,prefix=''): return self.has(k,prefix=prefix) + def key2hash(self,k,prefix=''): + return self.hash( + self.package_key( + prefix + k + ) + ) + def get(self,k,prefix=''): k_b=self.package_key(k,prefix=prefix) k_b_hash = self.hash(k_b) diff --git a/komrade/backend/keymaker.py b/komrade/backend/keymaker.py index 682d6f0..92fd6d0 100644 --- a/komrade/backend/keymaker.py +++ b/komrade/backend/keymaker.py @@ -328,7 +328,9 @@ Keymaker ({self}) is forging new keys for {name} return fnfn @property - def qr(self,data=None): + def qr(self): return self.qr_str(data=self.uri_id) + + def qr_str(self,data=None): import qrcode qr=qrcode.QRCode() qr.add_data(self.uri_id if not data else data) diff --git a/komrade/backend/people.py b/komrade/backend/people.py index 5a97b0d..45aa06f 100644 --- a/komrade/backend/people.py +++ b/komrade/backend/people.py @@ -75,64 +75,6 @@ class Persona(Caller): resp_msg_obj = self.phone.ring_ring(data) self.log('register got back from op:',resp_msg_obj) - # phone_res = msg_obj.msg - - # # URI id - # uri_id = phone_res.get('uri_id') - # returned_keys = phone_res.get('_keychain') - # self.log('got URI from Op:',uri_id) - # self.log('got returnd keys from Op:',returned_keys) - - # # better have the right keys - # assert set(KEYMAKER_DEFAULT_KEYS_TO_SAVE_ON_CLIENT) == set(returned_keys.keys()) - - # # now save these keys! - # saved_keys = self.save_keychain(name,returned_keys,uri_id=uri_id) - # self.log('saved keys!',saved_keys) - - # # success! - # self.log('yay!!!!') - # return saved_keys - - - - # def register(self, name = None, passphrase = DEBUG_DEFAULT_PASSPHRASE, is_group=None): - # # get needed metadata - # if not name: name=self.name - # if name is None: - # name = input('\nWhat is the name for this account? ') - # if passphrase is None: - # passphrase = getpass.getpass('\nEnter a memborable password: ') - # # if is_group is None: - # # is_group = input('\nIs this a group account? [y/N]').strip().lower() == 'y' - - # # form request - # msg_to_op = { - # '_route':'forge_new_keys', - # 'name':name, - # 'passphrase':hashish(passphrase.encode()) - # } - - # # get message back - # msg_obj = self.phone.ring_ring(msg_to_op) - # phone_res = msg_obj.msg - - # # URI id - # uri_id = phone_res.get('uri_id') - # returned_keys = phone_res.get('_keychain') - # self.log('got URI from Op:',uri_id) - # self.log('got returnd keys from Op:',returned_keys) - - # # better have the right keys - # assert set(KEYMAKER_DEFAULT_KEYS_TO_SAVE_ON_CLIENT) == set(returned_keys.keys()) - - # # now save these keys! - # saved_keys = self.save_keychain(name,returned_keys,uri_id=uri_id) - # self.log('saved keys!',saved_keys) - - # # success! - # self.log('yay!!!!') - # return saved_keys def ring_ring(self,msg): diff --git a/komrade/backend/the_operator.py b/komrade/backend/the_operator.py index d630f3d..495ddb9 100644 --- a/komrade/backend/the_operator.py +++ b/komrade/backend/the_operator.py @@ -95,9 +95,34 @@ class TheOperator(Operator): return bool(pubkey) def register_new_user(self,name,pubkey,**data): - self.log('setting pubkey under name') - res = self.crypt_keys.set(name,pubkey,prefix='/pubkey/') + # self.log('setting pubkey under name') + success,ck,cv = self.crypt_keys.set(name,pubkey,prefix='/pubkey/') self.log('got result from crypt:',res) + + # check input back from crypt + assert cv==pubkey + assert name==self.crypt_keys.key2hash(name) #(self.crypt_keys.prepare_key() + + res = { + 'success':success, + 'pubkey':cv, + 'name':name, + } + + ## success msg + if success: + res['status'] = f''' +{OPERATOR_INTRO} I have managed to register user {name}. +I've stored their public key ({b64encode(cv).decode()}) under their name, +in a disguished (hashed with salt) form: {ck}. +''' + else: + res['status']= f''' +{OPERATOR_INTRO}. I'm sorry, but I can'tregister username {name}. +Someone has already registered under that name.''' + + self.log('Operator returning result:',res) + return res diff --git a/komrade/constants.py b/komrade/constants.py index 0c80ed8..373beba 100644 --- a/komrade/constants.py +++ b/komrade/constants.py @@ -166,4 +166,6 @@ OPERATOR_ROUTES = [ 'does_username_exist', 'hello_world', 'register_new_user' -] \ No newline at end of file +] + +OPERATOR_INTRO = 'Hello, this is the Operator speaking. ' \ No newline at end of file