From ca201fb216ba7c2164bd09f40ef7b1f5db06f344 Mon Sep 17 00:00:00 2001 From: quadrismegistus Date: Sat, 26 Sep 2020 13:11:56 +0100 Subject: [PATCH] fixes? --- komrade/app/main.py | 14 +++++++++----- komrade/app/screens/base.py | 4 ++++ komrade/app/screens/feed/feed.py | 5 +++++ komrade/app/screens/login/login.py | 22 ++++++++++++---------- komrade/app/screens/post/post.py | 4 ++-- komrade/backend/crypt.py | 2 +- komrade/backend/komrades.py | 7 ++++++- komrade/cli/cli.py | 3 ++- 8 files changed, 41 insertions(+), 20 deletions(-) diff --git a/komrade/app/main.py b/komrade/app/main.py index 7ace921..255c7d4 100644 --- a/komrade/app/main.py +++ b/komrade/app/main.py @@ -128,15 +128,17 @@ class MessagePopup(MDDialog2): pass class MessagePopupCard(MDDialog2): def __init__(self,*x,**y): - y['color_bg']=rgb(*COLOR_BG) + y['color_bg']=rgb(*COLOR_BG,a=0.5) y['type']='custom' - y['overlay_color']=rgb(*COLOR_BG) + y['overlay_color']=rgb(*COLOR_BG,a=0.5) #rgb(*COLOR_BG) self.color_bg=rgb(*COLOR_BG) super().__init__(*x,**y) self.ok_to_continue=False + self.dismissable=False def on_dismiss(self): - return True + if not self.dismissable: + return True def on_touch_down(self,touch): self.ok_to_continue=True @@ -587,8 +589,10 @@ class MainApp(MDApp, Logger): @property def keys(self): - return self.komrade.contacts() - + contacts_obj = self.komrade.contacts() + contacts = [p.name for p in contacts_obj] + return contacts + async def get_post(self,post_id): return self.komrade.read_post() diff --git a/komrade/app/screens/base.py b/komrade/app/screens/base.py index fb6f99e..5ac3697 100644 --- a/komrade/app/screens/base.py +++ b/komrade/app/screens/base.py @@ -12,6 +12,9 @@ import asyncio ### Base screens class BaseScreen(MDScreen): + def on_pre_enter(self): + self.clear_widgets() + @property def root(self): return self.app.root @@ -64,6 +67,7 @@ class BaseScreen(MDScreen): class ProtectedScreen(BaseScreen): def on_pre_enter(self): + super().on_pre_enter() if not hasattr(self.app,'is_logged_in') or not self.app.is_logged_in or not hasattr(self.app,'komrade') or not self.app.komrade: self.root.change_screen('login') self.log('changing screen???') diff --git a/komrade/app/screens/feed/feed.py b/komrade/app/screens/feed/feed.py index ad07b40..2b617f5 100644 --- a/komrade/app/screens/feed/feed.py +++ b/komrade/app/screens/feed/feed.py @@ -280,7 +280,12 @@ class FeedScreen(ProtectedScreen): def on_pre_enter(self): if not super().on_pre_enter(): return + # self.root.clear_widgets() + if self.app.map: + self.app.map.dismiss() + self.root.remove_widget(self.app.map) if not hasattr(self,'get_posts'): self.get_posts=self.app.komrade.posts + for post in self.posts: self.ids.post_carousel.remove_widget(post) diff --git a/komrade/app/screens/login/login.py b/komrade/app/screens/login/login.py index 31754e2..fa17721 100644 --- a/komrade/app/screens/login/login.py +++ b/komrade/app/screens/login/login.py @@ -185,6 +185,9 @@ class LoginScreen(BaseScreen): # await asyncio.sleep(1) # return + # remove login layout for now + self.remove_widget(self.layout) + # return name=un @@ -208,16 +211,17 @@ class LoginScreen(BaseScreen): self.app.is_logged_in=True self.app.username=kommie.name self.app.komrade=kommie - self.remove_widget(self.layout) self.root.change_screen('feed') else: logger.info(f'passkey login failed') self.login_status.text='Login failed...' + # self.layout.add_widget(self.layout_password) elif kommie.exists_locally_as_contact(): await self.app.stat('This is a contact of yours') self.login_status.text='Komrade exists as a contact of yours.' + self.app.change_screen('login') else: # await self.app.stat('Account does not exist on hardware, maybe not on server. Try to register?') # self.login_status.text='Komrade not known on this device. Registering...' @@ -235,6 +239,7 @@ class LoginScreen(BaseScreen): self.app.change_screen('feed') else: self.login_status.text = 'Sign up failed...' + self.app.change_screen('login') return 1 @@ -256,8 +261,6 @@ class LoginScreen(BaseScreen): await logfunc(f'Welcome, Komrade @{name}. To help us communicate safely, I have cut for you a matching pair of encryption keys.',pause=True,clear=True,komrade_name='Keymaker') - self.app.clear_widget_tree(MDDialog) - self.app.clear_widget_tree(MDDialog2) # ## 2) Make pub public/private keys from komrade.backend.keymaker import KomradeAsymmetricKey @@ -298,9 +301,12 @@ class LoginScreen(BaseScreen): await logfunc(f"In fact this private encryption is so sensitive we'll encrypt it itself before storing it on your device -- locking the key itself away with a password.",pause=True,use_prefix=False) - passphrase = await self.app.get_input('Please enter a memorable password.', - get_pass=True - ) + passphrase = None + while not passphrase: + passphrase = await self.app.get_input('Please enter a memorable password.', + get_pass=True + ) + passhash = hasher(passphrase) privkey_decr = KomradeSymmetricKeyWithPassphrase(passhash=passhash) @@ -376,9 +382,6 @@ class LoginScreen(BaseScreen): await logfunc(f'Congratulations. Welcome, {kommie}.',pause=True,clear=True) # remove all dialogs!!!!!!!! - self.app.clear_widget_tree(MDDialog) - self.app.clear_widget_tree(MDDialog2) - # last minute: get posts if 'res_posts' in resp_msg_d and resp_msg_d['res_posts'].get('success'): id2post=resp_msg_d.get('res_posts').get('posts',{}) @@ -392,7 +395,6 @@ class LoginScreen(BaseScreen): await logfunc('returning...') from komrade.app.screens.map import MapWidget - return resp_msg_d \ No newline at end of file diff --git a/komrade/app/screens/post/post.py b/komrade/app/screens/post/post.py index d5892e6..91e9e56 100644 --- a/komrade/app/screens/post/post.py +++ b/komrade/app/screens/post/post.py @@ -164,8 +164,8 @@ class PostScreen(ProtectedScreen): # self.post_card.author_section_layout.add_widget(self.tmp_msg,1) self.post_card.author_section_layout.add_widget(self.to_whom_btn,1) - - self.to_whom_btn.ids.txt_input.text = '@' + from komrade.constants import WORLD_NAME + self.to_whom_btn.ids.txt_input.text = '@'+WORLD_NAME #self.to_whom_btn.adaptive_height = True self.to_whom_btn.ids.txt_input.word_list = ['@'+k for k in self.app.keys if k != self.app.username] self.to_whom_btn.ids.txt_input.starting_no = 1 diff --git a/komrade/backend/crypt.py b/komrade/backend/crypt.py index 8564070..576bd1b 100644 --- a/komrade/backend/crypt.py +++ b/komrade/backend/crypt.py @@ -13,7 +13,7 @@ from pythemis.exception import ThemisError # from walrus.tusks.rlite import WalrusLite import hirlite -LOG_GET_SET = 1 +LOG_GET_SET = 0 diff --git a/komrade/backend/komrades.py b/komrade/backend/komrades.py index df5c7ee..f193748 100644 --- a/komrade/backend/komrades.py +++ b/komrade/backend/komrades.py @@ -367,7 +367,12 @@ class KomradeX(Caller): def contacts(self): # who do I know? - return sorted([fn.split('.png')[0] for fn in os.listdir(PATH_QRCODES)]) + qr_names = sorted([ + fn.split('.png')[0] for fn in os.listdir(PATH_QRCODES) + ]) + ppl = [Komrade(name) for name in qr_names] + ppl = [p for p in ppl if p.exists_locally_as_contact()] + return ppl ### MEETING PEOLPE diff --git a/komrade/cli/cli.py b/komrade/cli/cli.py index 3fd9f4c..25e9686 100644 --- a/komrade/cli/cli.py +++ b/komrade/cli/cli.py @@ -228,7 +228,8 @@ class CLI(Logger): def who(self,whom): if self.with_required_login(): - contacts = self.komrade.contacts() + contacts_obj = self.komrade.contacts() + contacts = [p.name for p in contacts_obj] self.print(' ' + '\n '.join(contacts))