posting
quadrismegistus 4 years ago
parent 8bf5d2398e
commit 2e25d862ad

@ -390,19 +390,32 @@ class KomradeX(Caller):
self.log('->',res) self.log('->',res)
return res return res
def save_inbox(self,post_ids): def save_inbox(self,
self.crypt_keys.set( post_ids,
self.uri, uri=None,
BSEP.join(post_ids), encrypted=False):
'/inbox/', self.log('<-',post_ids)
newval = BSEP.join(post_ids)
res = self.crypt_keys.set(
self.uri if not uri else uri,
newval,
prefix='/inbox/',
override=True override=True
) )
assert newval == self.crypt_keys.get(
self.uri,
prefix='/inbox/'
)
self.log('->',res)
return res
def delete_msg(self,post_id): def delete_msg(self,post_id):
return self.delete_msgs([post_id]) return self.delete_msgs([post_id])
def delete_msgs(self,post_ids): def delete_msgs(self,post_ids):
#inbox_ids = self.get_inbox_ids().get('inbox',[]) inbox_ids = self.get_inbox_ids().get('inbox',[])
#print(inbox_ids,'v1',len(inbox_ids))
deleted=[] deleted=[]
for post_id in post_ids: for post_id in post_ids:
#print('deleting post:',post_id) #print('deleting post:',post_id)
@ -411,16 +424,22 @@ class KomradeX(Caller):
prefix='/post/', prefix='/post/',
) )
deleted+=[post_id] deleted+=[post_id]
return {
#print(post_id,inbox_ids,post_id in inbox_ids,'???')
# stop
if post_id in inbox_ids:
print('removing from inbox...')
inbox_ids.remove(post_id)
self.save_inbox(inbox_ids)
#print(inbox_ids,'v2',len(inbox_ids))
res= {
'success':not bool(set(post_ids) - set(deleted)), 'success':not bool(set(post_ids) - set(deleted)),
'status':f'Deleted {len(deleted)} messages.', 'status':f'Deleted {len(deleted)} messages.',
'deleted':deleted 'deleted':deleted
} }
# print(post_id,inbox_ids,post_id in inbox_ids,'???') self.log('delete_msgs ->',res)
# stop return res
#if post_id in inbox_ids:
# inbox_ids.remove(post_id)
#self.save_inbox(inbox_ids)
def inbox(self,topn=100,only_unread=False,delete_malformed=False): def inbox(self,topn=100,only_unread=False,delete_malformed=False):
# refreshing inbox # refreshing inbox
@ -606,6 +625,18 @@ class KomradeX(Caller):
if not name and not pubkey: if not name and not pubkey:
return {'success':False,'status':'Meet whom?'} return {'success':False,'status':'Meet whom?'}
keystr=self.name+'->'+name
if self.crypt_keys.get(
keystr,
prefix='/met/'
):
return {
'success':False,
'status':f'You have already sent an introduction to @{name}. It would be rude to send another.'
}
msg_to_op = { msg_to_op = {
'name':self.name, 'name':self.name,
'secret_login':self.secret_login, 'secret_login':self.secret_login,
@ -623,6 +654,13 @@ class KomradeX(Caller):
) )
# print('res from op',res) # print('res from op',res)
# record that I've already tried this
self.crypt_keys.set(
keystr,
b'y',
prefix='/met/'
)
return res return res

@ -485,7 +485,7 @@ from_komrade = {from_komrade}
'pubkey', 'pubkey',
'post_ids', 'post_ids',
], ],
delete_afterward=False): delete_afterward=True):
# logged in? # logged in?
login_res = self.login(msg_to_op) login_res = self.login(msg_to_op)
@ -505,22 +505,69 @@ from_komrade = {from_komrade}
self.log('looking for:',post_id,post) self.log('looking for:',post_id,post)
self.log(f'I {self} found {len(posts)} for {msg_to_op.from_name}') self.log(f'I {self} found {len(posts)} for {msg_to_op.from_name}')
# delete?
res = {
'status':'Succeeded in downloading new messages.' + (' I\'ve already deleted these messages from the server.' if delete_afterward else ''),
'success':True,
'data_encr':posts
}
# delete? # delete?
if delete_afterward: if delete_afterward:
# @hack: this a bit dangerous? res['res_delete_msgs'] = self.delete_msgs(
for post_id in posts: post_ids,
self.crypt_keys.delete( inbox_uri = b64enc(
post_id, msg_to_op.data.get('pubkey')
prefix='/post/'
) )
self.log('deleting post id',post_id,'...') )
# show res
self.log('->',res)
return res
def delete_msgs(self,post_ids,inbox_uri=None):
# @hack: this a bit dangerous?
for post_id in post_ids:
self.crypt_keys.delete(
post_id,
prefix='/post/'
)
self.log('deleting post id',post_id,'...')
# if inbox, remove these posts from it
if inbox_uri:
# unwrap
inbox_encr = self.crypt_keys.get(
inbox_uri,
prefix='/inbox/'
)
inbox = SMessage(
self.privkey.data,
b64dec(inbox_uri)
).unwrap(inbox_encr)
self.log('unwrapped inbox_encr:',inbox)
inbox_l = inbox.split(BSEP)
self.log('length v1:',len(inbox_l))
# alter
inbox_l = [pid for pid in inbox_l if pid not in post_ids]
self.log('length v2:',len(inbox_l))
# rewrap
inbox = inbox_l.split(BSEP)
inbox_encr = SMessage(
self.privkey.data,
b64dec(inbox_uri)
).wrap(inbox)
return { return {
'status':'Succeeded in downloading new messages.' + (' I\'ve already deleted these messages from the server.' if delete_afterward else ''),
'success':True, 'success':True,
'data_encr':posts 'deleted':post_ids,
} }
def introduce_komrades(self,msg_to_op): def introduce_komrades(self,msg_to_op):
# # logged in? # # logged in?
# self.log('introduce got:',msg_to_op) # self.log('introduce got:',msg_to_op)

@ -337,15 +337,18 @@ class CLI(Logger):
else: else:
clear_screen() clear_screen()
for i,msg in enumerate(msgs): for i,msg in enumerate(msgs):
self.stat(f'Showing message {i+1} of {len(msgs)}.') try:
print() self.stat(f'Showing message {i+1} of {len(msgs)}, from newest to oldest. Hit Ctrl+D to exit.')
print(msg) print()
# self.print('DATA',msg.msg_d) print(msg)
if msg.data.get('prompt_id')=='addcontact': # self.print('DATA',msg.msg_d)
self.prompt_adduser(msg) if msg.data.get('prompt_id')=='addcontact':
self.prompt_adduser(msg)
self.prompt_msg(msg)
clear_screen() self.prompt_msg(msg)
clear_screen()
except EOFError:
break
self.help() self.help()

Loading…
Cancel
Save