komrade update!

posting
quadrismegistus 4 years ago
parent 00bcb8961c
commit 3559006994

@ -433,14 +433,64 @@ class KomradeX(Caller):
return self.msg(WORLD_NAME,something)
@property
def login_details(self):
return {
'name':self.name,
'secret_login':self.secret_login,
'pubkey':self.uri
}
def save_posts(self,
id2post,
inbox_prefix='/feed/',
post_prefix='/post/'):
# update inbox
new_inbox = id2post.keys()
inbox = self.get_inbox_crypt(
prefix=inbox_prefix
)
inbox.prepend(new_inbox)
# update posts
for post_id,post in id2post.items():
self.crypt_data.set(
post_id,
post,
prefix=post_prefix
)
res = {
'success':True,
'status':f'Saved {len(id2post)} posts.'
}
self.log('-->',res)
return res
def save_msgs(self,id2msg):
return self.save_posts(
id2post=id2msg,
inbox_prefix='/inbox/',
post_prefix='/msg/'
)
## Getting updates
def get_updates(self):
# get any parameters we need
post_ids_read = list(self.inbox_read_db.values)
# compose msg
msg_to_op = {
**{self.login_details},
**{'post_ids_read':post_ids_read}
}
self.compose('msg to op ->',msg_to_op)
res = self.ring_ring(
{
'seen':self.inbox_read_db.values
},
msg_to_op,
route='get_updates'
)
self.log('<- Op.get_updates <-',res)
@ -448,33 +498,30 @@ class KomradeX(Caller):
# error?
if not res.get('success'): return res
# (1) save inbox
inbox=res.get('res_inbox').get('inbox',[])
if inbox: self.inbox_db.prepend(inbox)
# (2) save msgs
id2post=res.get('res_msgs').get('msgs',[])
for post_id,post in id2post.items():
post = self.crypt_data.set(
post_id,
post,
prefix='/post/'
)
id2msg=res.get('res_msgs').get('posts',[])
self.save_msgs(id2msg)
# (3) save posts
# ...
id2post=res.get('res_posts').get('posts',[])
self.save_posts(id2post)
def messages(self,show_read=True,show_unread=True):
# meta inbox
inbox = self.inbox_db.values
# filter?
if not show_read: inbox = [x for x in inbox if not x in set(self.inbox_read_db.values)]
if not show_unread: inbox = [x for x in inbox if not x in set(self.inbox_unread_db.values)]
if not show_read:
inbox = [x for x in inbox if not x in set(self.inbox_read_db.values)]
if not show_unread:
inbox = [x for x in inbox if not x in set(self.inbox_unread_db.values)]
# decrypt and read all posts
results = [self.read_msg(post_id) for post_id in inbox]
msgs = [res.get('msg2me') for res in results if res.get('success')]
msgs = [res.get('msg') for res in results if res.get('success')]
msgs = [x for x in msgs if x]
return msgs
def read_msg(self,post_id=None,post_encr=None):

@ -187,10 +187,6 @@ class TheOperator(Operator):
secret_login=data.get('secret_login')
name=name.encode() if type(name)==str else name
# pubkey=pubkey.encode() if type(pubkey)==str else pubkey
# secret_login=secret_login.encode() if type(secret_login)==str else secret_login
# get my records
# uri = b64enc(pubkey)
uri = b64enc(pubkey)
secret_login = b64enc(secret_login)
name_record = self.crypt_keys.get(
@ -207,22 +203,21 @@ class TheOperator(Operator):
prefix='/secret_login/'
))
self.log(f'''Checking inputs:
{name} (input)
vs.
{name_record} (record)
{uri} (input)
vs.
{pubkey_record} (record)
{secret_login} (input)
vs.
{secret_record} (record)
''')
{name} (input)
vs.
{name_record} (record)
{uri} (input)
vs.
{pubkey_record} (record)
{secret_login} (input)
vs.
{secret_record} (record)
''')
# stop
# check name?
if name != name_record:
@ -243,12 +238,15 @@ class TheOperator(Operator):
return {
'success': True,
'status':f'Welcome back, Komrade @{name.decode()}.',
'inbox':self.get_inbox(msg_obj,do_login=False)
'status_type':'login',
'name':name_record,
'pubkey':pubkey_record
}
else:
return {
'success': False,
'status':'Login failed.',
'status_type':'login',
}
def register_new_user(self,msg_obj):
@ -521,7 +519,8 @@ class TheOperator(Operator):
if not msg_to_op:
return {'success':False, 'status':'Cannot login outside of message context.'}
res_login=self.require_login(msg_to_op,do_login=do_login)
if not res_login.get('success'): return res_login
if not res_login.get('success'):
return {'res_login':res_login}
# (1) get inbox
res_inbox=self.get_inbox(uri)
@ -530,22 +529,35 @@ class TheOperator(Operator):
# (2) get msgs
res_msgs = self.get_msgs(inbox)
if not res_msgs.get('success'): return res_msgs
if not res_msgs.get('success'):
return {
'res_login':res_login,
'res_msgs':res_msgs
}
msgs=res_msgs.get('posts')
# (3) get posts
posts=[]
if include_posts and self.name!=WORLD_NAME:
res_posts = self.get_posts()
if not res_posts.get('success'): return res_posts
posts=res.get('res_posts').get('posts',[])
if not res_posts.get('success'):
return {
'res_login':res_login,
'res_msgs':res_msgs,
'res_posts':res_posts
}
posts=res_posts.get('posts',[])
# return
res={
'success': True,
'status': f'You have {len(msgs)} new messages, and {len(posts)} new posts.',
'posts': posts,
'msgs': msgs,
# 'posts': posts,
# 'msgs': msgs,
'res_login':res_login,
# 'res_inbox':res_inbox,
'res_msgs':res_msgs,
'res_posts':res_posts,
}
self.log('-->',res)
return res
@ -563,10 +575,12 @@ class TheOperator(Operator):
for post_id in inbox:
res_read_msg = world.read_msg(post_id)
if res_read_msg.get('success'):
post=res_read_msg.get('msg2me')
post=res_read_msg.get('msg')
if post:
post[post_id]=post
self.log('id2post for world',id2post)
stop
return id2post
# (3) reencrypt for requester

@ -194,12 +194,15 @@ class CLI(Logger):
self.komrade=Komrade(name)
res = self.komrade.login()
return self.do_login(res)
def do_login(self,res)
# print('got login res:',res)
self.log('<- komrade.login() <-',res)
if res and type(res)==dict and 'success' in res and res['success']:
self.name=self.komrade.name
self.name=res['name']
self.komrade=Komrade(res['name'])
self.loggedin=True
else:
self.name=None
@ -208,13 +211,8 @@ class CLI(Logger):
if res and 'status' in res:
self.help()
self.stat(res.get('status','?'),komrade_name='Operator')
# also see if we got a msg update
# if 'res_refresh' in res:
# self.check(
# res=res['res_refresh'],
# statd={'use_prefix':False}
# )
return bool(res.get('success'))
@property
def logged_in(self):
@ -228,14 +226,6 @@ class CLI(Logger):
return False
return True
# def meet(self,name):
# if not name:
# name=input(f'@Operator: To whom would you like to introduce yourself?\n\n@{self.name}: ')
# if not name: return
# # meet?
# self.komrade.meet(name)
def meet(self,dat,returning=False):
if self.with_required_login():
@ -289,15 +279,21 @@ class CLI(Logger):
print()
self.stat(f'Message successfully sent to @{name_or_pubkey}.',komrade_name='Operator',pause=True)
def update(self,dat=None,res=None,statd={}):
self.log(f'<-- dat={dat}, res={res}')
if self.with_required_login():
res = self.komrade.get_updates()
self.log('<-- get_updates',res)
if not res['success']:
self.stat(res['status'],komrade_name='Operator')
return
## get updates
# this does login, msgs, and posts in one req
res = self.komrade.get_updates()
self.log('<-- get_updates',res)
# check logged in
if not self.do_login(res): return
self.stat(res['status'],komrade_name='Operator',**statd)
def prompt_adduser(self,msg):
@ -361,6 +357,9 @@ class CLI(Logger):
else:
pass
def read(self,dat='',inbox_res=None):
if self.with_required_login():
if not inbox_res:

Loading…
Cancel
Save