From e9e69100289dd0e85463f73127509760b9316ca4 Mon Sep 17 00:00:00 2001 From: quadrismegistus Date: Tue, 15 Sep 2020 07:10:22 +0100 Subject: [PATCH] updates --- komrade/backend/komrades.py | 73 ++++++++++++++++++++++++++------- komrade/backend/the_operator.py | 37 ++++++++++++++++- 2 files changed, 94 insertions(+), 16 deletions(-) diff --git a/komrade/backend/komrades.py b/komrade/backend/komrades.py index 1a7e67c..d6789aa 100644 --- a/komrade/backend/komrades.py +++ b/komrade/backend/komrades.py @@ -347,19 +347,44 @@ class KomradeX(Caller): self.log('inbox decrypted:',inbox) unread = [] - for post_id in inbox.split(b'\n'): + inbox = inbox.split(b'\n') + for post_id in inbox: if not post_id: continue - print('>>',x) - already = self.crypt_keys.get( - post_id, - prefix='/post/', - ) - + print('>>',post_id) + + if not self.crypt_keys.get(post_id,prefix='/post/'): + unread.append(post_id) + self.log(f'I {self} have {len(unread)} new messages') + # print('unread:',unread,len(unread)) - return {'success':'?'} + return { + 'success':True, + 'status':'Inbox retrieved.', + 'unread':unread, + 'inbox':inbox + } - + def read_msgs(self,post_ids=[],inbox=None): + if not post_ids: + # get unerad + post_ids = self.check_msgs(inbox).get('unread',[]) + if not post_ids: + return {'success':False,'status':'No messages requested'} + + # ask Op for them + msgs = self.ring_ring( + { + 'secret_login':self.secret_login, + 'name':self.name, + 'pubkey':self.pubkey.data_b64, + 'post_ids':post_ids, + }, + route='read_msgs' + ) + + self.log('got back from op!',msgs) + return msgs def test_register(): import random @@ -372,12 +397,14 @@ def test_register(): def test_msg(): - z = comlink('zuck') - z.login(passphrase='eee') - - s = comlink('sergey') + b = Komrade('bez') + b.login() + + print(b.check_msgs()) + + # z = Komrade('zuckbot') - z.send_msg_to('you ssssssuck') + # b.msg(z,'you ssssssuck') def test_loading(): @@ -396,6 +423,22 @@ def test_loading(): # z1.login() +def test_sign(): + from pythemis import smessage + + b = Komrade('bez') + m = Komrade('marx') + z = Komrade('zuckbot') + + msg = b'this is cool. --bez' + + signed_msg = smessage.ssign(b.privkey.data, msg) + + print(signed_msg) + + verified_msg = smessage.sverify(b.pubkey.data, signed_msg) + print(verified_msg) + if __name__=='__main__': - test_loading() \ No newline at end of file + test_msg() \ No newline at end of file diff --git a/komrade/backend/the_operator.py b/komrade/backend/the_operator.py index 3cc2de8..6d8731b 100644 --- a/komrade/backend/the_operator.py +++ b/komrade/backend/the_operator.py @@ -387,7 +387,12 @@ from_komrade = {from_komrade} ).wrap(inbox_new) self.log('encrypted inbox new:',inbox_new_encr) - self.crypt_keys.set(deliver_to,inbox_new_encr,prefix='/inbox/') + self.crypt_keys.set( + deliver_to, + inbox_new_encr, + prefix='/inbox/', + override=True + ) return {'status':'Message delivered.', 'success':True} @@ -417,7 +422,37 @@ from_komrade = {from_komrade} 'success':True, 'data_encr':inbox_encr } + + def read_msgs(self, + msg_to_op, + required_fields = [ + 'secret_login', + 'name', + 'pubkey', + 'post_ids', + ]): + # logged in? + login_res = self.login(msg_to_op) + if not login_res.get('success'): + return login_res + + # ok, then find the posts? + post_ids=msg_to_op.data.get('post_ids',[]) + if not post_ids: return {'success':False, 'status':'No post_ids specified'} + + posts = {} + for post_id in post_ids: + post = self.crypt_keys.get(b64enc(post_id),prefix='/post/') + if post: + posts[post_id] = post + self.log(f'I {self} found {len(posts)} for {msg_to_op.from_name}') + + return { + 'status':'Succeeded in getting posts.', + 'success':True, + 'data_encr':posts + } def test_op(): from komrade.backend.the_telephone import TheTelephone