From fa91a1c536fa6b2d37bff267b8559791ca0c580d Mon Sep 17 00:00:00 2001 From: quadrismegistus Date: Sat, 22 Aug 2020 14:06:50 +0100 Subject: [PATCH] ?? --- app/config.py | 11 +++++++++-- app/screens/base.py | 9 +++++++-- p2p/api.py | 40 +++++++++++++++++++++++++--------------- 3 files changed, 41 insertions(+), 19 deletions(-) diff --git a/app/config.py b/app/config.py index 258f66a..fa1af05 100644 --- a/app/config.py +++ b/app/config.py @@ -1,13 +1,20 @@ DEFAULT_URI='/login/' -import random +import random,platform HORIZONTAL = False #random.choice([True,True,True,False]) FACTOR=1 WINDOW_SIZE = (1136*FACTOR,640*FACTOR) if HORIZONTAL else (640*FACTOR,1136*FACTOR) +PLAYING_CARDS = (2.5,3.5) +ASPECT_RATIO = PLAYING_CARDS[0]/PLAYING_CARDS[1] +HEIGHT = 800 -WINDOW_SIZE=700,700 +if platform.platform().startswith('Linux'): + HEIGHT *= 1.5 + + +WINDOW_SIZE=int(HEIGHT * ASPECT_RATIO),int(HEIGHT) BG_IMG='assets/bg-brown.png' diff --git a/app/screens/base.py b/app/screens/base.py index e92d53b..66604e2 100644 --- a/app/screens/base.py +++ b/app/screens/base.py @@ -3,6 +3,7 @@ from kivy.properties import ObjectProperty from kivymd.uix.boxlayout import MDBoxLayout from kivymd.uix.label import MDLabel from kivy.app import App +import asyncio @@ -27,5 +28,9 @@ class BaseScreen(MDScreen): class ProtectedScreen(BaseScreen): def on_pre_enter(self): - if not self.channel in self.app.keys: - return + async def guard(): + keys=await self.app.get_keys() + if not self.channel in keys: + self.root.change_screen('login') + return + asyncio.create_task(guard()) \ No newline at end of file diff --git a/p2p/api.py b/p2p/api.py index 5ad1acd..1d0b78a 100644 --- a/p2p/api.py +++ b/p2p/api.py @@ -560,26 +560,34 @@ class Api(object): self.log('!!',e) return {'error':'Incorrect password'} - async def add_world_key(self,fn=PATH_WORLD_KEY): + def add_world_key(self,fn=PATH_WORLD_KEY): import shutil - name='.'.join(os.path.basename(PATH_WORLD_KEY).split('.')[1:-1]) + thisdir=os.path.dirname(__file__) + fnfn=os.path.join(thisdir,fn) + self.log('getting',fnfn) + name='.'.join(os.path.basename(fn).split('.')[1:-1]) - priv_key=load_privkey_fn(fn) + priv_key=load_privkey_fn(fnfn) pub_key=priv_key.public_key() pub_key_b=serialize_pubkey(pub_key) - - if await self.set_person(name,pub_key_b): - ofn=os.path.join(KEYDIR,f'.{name}.key') - shutil.copyfile(fn,ofn) + ofn=os.path.join(KEYDIR,f'.{name}.key') + shutil.copyfile(fnfn,ofn) + + asyncio.create_task(self.add_world_key_to_net(name,pub_key_b)) + + async def add_world_key_to_net(self,name,pub_key_b): + await self.set_person(name,pub_key_b) + #@property - async def get_keys(self): + def get_keys(self): res={} key_files = os.listdir(KEYDIR) world_key_fn = os.path.basename(PATH_WORLD_KEY) if not world_key_fn in key_files: - self.log('[first time?] adding world key') - await self.add_world_key() + self.log('[first time?] adding world key:',world_key_fn) + self.add_world_key() + for priv_key_fn in key_files: if (not priv_key_fn.startswith('.') or not priv_key_fn.endswith('.key')): continue @@ -594,11 +602,13 @@ class Api(object): @property - async def keys(self): - #if not hasattr(self,'_keys'): self._keys = self.get_keys() - #return self._keys - return await self.get_keys() - + def keys(self): + self.load_keys() + return self._keys + + def load_keys(self): + self._keys = self.get_keys() + async def append_json(self,key,data):