From a837d3f34b7923f64936c662bf1d8e5d20511720 Mon Sep 17 00:00:00 2001 From: quadrismegistus Date: Tue, 22 Sep 2020 10:08:20 +0100 Subject: [PATCH] fixing installer? --- komrade/api/__init__.py | 1 - komrade/api/api.py | 519 ----------------------- komrade/api/persona.py | 81 ---- komrade/api/run.sh | 1 - komrade/app/assets/avatars/Telephone.jpg | Bin 0 -> 15624 bytes komrade/app/assets/avatars/Telephone.png | Bin 0 -> 85579 bytes komrade/app/main.py | 33 +- komrade/app/root.kv | 58 ++- komrade/app/screens/base.py | 23 + komrade/app/screens/feed/feed.py | 79 ++-- komrade/app/screens/login/login.py | 11 + komrade/app/screens/profile/profile.py | 4 +- komrade/constants.py | 6 +- script/install | 29 +- 14 files changed, 167 insertions(+), 678 deletions(-) delete mode 100644 komrade/api/__init__.py delete mode 100644 komrade/api/api.py delete mode 100644 komrade/api/persona.py delete mode 100755 komrade/api/run.sh create mode 100644 komrade/app/assets/avatars/Telephone.jpg create mode 100644 komrade/app/assets/avatars/Telephone.png diff --git a/komrade/api/__init__.py b/komrade/api/__init__.py deleted file mode 100644 index f77d506..0000000 --- a/komrade/api/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from .api import * \ No newline at end of file diff --git a/komrade/api/api.py b/komrade/api/api.py deleted file mode 100644 index 5baa762..0000000 --- a/komrade/api/api.py +++ /dev/null @@ -1,519 +0,0 @@ -# ### Constants -import os,sys; sys.path.append(os.path.abspath(os.path.join(os.path.abspath(os.path.join(os.path.dirname(__file__),'..')),'..'))) -from komrade import * -from komrade.constants import * -LAST_N_IN_INBOX = 10 - - -### Imports - -import os,time,sys,logging -from pathlib import Path -import asyncio,time,sys -from base64 import b64encode,b64decode -sys.path.append(os.path.dirname(__file__)) -import logging -import asyncio -import shelve -from collections import OrderedDict -import pickle,os -from threading import Thread -from pathlib import Path - -# local imports -from komrade import * -CACHE_DIR = os.path.join(os.path.expanduser('~'),'.komrade','.cache') -if not os.path.exists(CACHE_DIR): os.makedirs(CACHE_DIR) -MEMCACHE_FNFN=os.path.join(CACHE_DIR,'.memory') - - -### Logging -def logger(): - import logging - handler = logging.StreamHandler() - formatter = logging.Formatter('[%(asctime)s]\n%(message)s\n') - handler.setFormatter(formatter) - logger = logging.getLogger('komrade') - logger.addHandler(handler) - logger.setLevel(logging.DEBUG) - return logger - -LOG = None - -def log(*x): - global LOG - if not LOG: LOG=logger().debug - - tolog=' '.join(str(_) for _ in x) - LOG(tolog) - - - -## func - -def bytes_from_file(filename,chunksize=8192): - with open(filename, 'rb') as f: - while True: - piece = f.read(chunksize) - if not piece: - break - yield piece - -def get_random_id(): - import uuid - return uuid.uuid4().hex - -def get_random_binary_id(): - import base64 - idstr = get_random_id() - return base64.b64encode(idstr.encode()) - -### Headless API - -def boot_lonely_selfless_node(port=8467): - async def go(): - api = Api(log=log, port=port) - await api.connect_forever() - asyncio.run(go()) - - -class NetworkStillConnectingError(OSError): pass - - -PORT_LISTEN = 5111 -async def _getdb(self=None,port=PORT_LISTEN): - return None - from kademlia.network import Server - - if self: - self.log('starting server on port %s..' % port) - - import os - if self: self.log(os.getcwd()) - node = Server(log=self.log if self else None) #fn='../p2p/data.db',log=(self.log if self else print))) - - try: - if self: self.log('listening on port %s...' % format(port)) - await node.listen(port) - except OSError: - raise NetworkStillConnectingError('Still connecting...') - #await asyncio.sleep(3) - - if self: self.log('bootstrapping server..') - await node.bootstrap(NODES_PRIME) - - if self: node.log = self.log - self.log('NODE:',node) - - # if self and self.app: - # self.app.close_dialog() - - return node - -def logg(*x): - print(*x) - - - - - - - - -class Api(object): - def __init__(self,log=None,port=PORT_LISTEN): - self.log = log if log is not None else logg - self.port=port - - # load file-based keys - self.load_keys() - - - async def connect_forever(self,save_every=60): - try: - i = 0 - self._node = await self.connect() - while True: - if not i%90: self.log(f'Node status (tick {i}): {self._node}') - if i and not i%save_every: await self.flush() - i += 1 - await asyncio.sleep(1) - # asyncio.sleep(0) - except (asyncio.CancelledError,KeyboardInterrupt) as e: - self.log('P2P node cancelled', e) - await self.flush() - finally: - # when canceled, print that it finished - self.log('P2P node shutting down') - pass - - @property - async def node(self): - if not hasattr(self,'_node'): - await self.connect() - self._node.log=self.log - return self._node - - async def connect(self): - port=self.port - # if self.app: self.app.open_dialog('hello?') - self.log('connecting on port %s...' % port) - node = await _getdb(self,port) - self.log(f'connect() has node {node}') - self._node = node - return node - - def get_tor_python_session(self): - # from torpy.http.requests import TorRequests - # with TorRequests() as tor_requests: - # with tor_requests.get_session() as s: - # # return s - # from torpy.http.requests import tor_requests_session - # with tor_requests_session() as s: # returns requests.Session() object - # return s - pass - - - - def get_tor_proxy_session(self): - session = requests.session() - # Tor uses the 9050 port as the default socks port - session.proxies = {'http': 'socks5://127.0.0.1:9050', - 'https': 'socks5://127.0.0.1:9050'} - return session - - def get_async_tor_proxy_session(self): - from requests_futures.sessions import FuturesSession - session = FuturesSession() - # Tor uses the 9050 port as the default socks port - session.proxies = {'http': 'socks5://127.0.0.1:9050', - 'https': 'socks5://127.0.0.1:9050'} - return session - - - - - def tor_request(self,url,method='get',data=None): - stopfixthis - with self.get_tor_proxy_session() as s: - if method=='get': - return s.get(url) - elif method=='post': - self.log('data',data) - return s.post(url,data=data) - - - def request(self,Q,**kwargs): - self.log('request() Q:',Q) - res = self.tor_request(Q,**kwargs) - self.log('reqeust() <-',res) - return res - - - - #@property - def load_keys(self): - # get key names - KEY_PATH_PUB ='.' - KEY_PATH_PRIV ='.' - - pub_key_names = [x.split('.')[1] for x in os.listdir(KEY_PATH_PUB) if x.count('.')==2 and x.endswith('.loc')] - priv_key_names = [x.split('.')[1] for x in os.listdir(KEY_PATH_PRIV) if x.count('.')==2 and x.endswith('.key')] - key_names = set(pub_key_names)|set(priv_key_names) - - self.log('get_keys() found public key names:',pub_key_names) - self.log('get_keys() found private key names:',priv_key_names) - - - # load and find all local - self._keys = {} - for key_name in key_names: - self.log('key_name =',key_name) - self._keys[key_name] = Komrade(key_name,api=self,create_if_missing=False) - - # break into types - self.accounts = [self._keys[name] for name in priv_key_names] - self.contacts = [self._keys[name] for name in pub_key_names] - - - self.log('get_keys() loaded accounts:',self.accounts) - self.log('get_keys() loaded contacts:',self.contacts) - - @property - def keys(self): - if not hasattr(self,'_keys'): self.load_keys() - return self._keys - - #async - def personate(self,persona_name,create_if_missing=True): - komrade = Komrade(persona_name,api=self,create_if_missing=create_if_missing) - res = persona.boot() - self.log('personate() res =',res) - return persona - # komrade = self.keys[persona_name] if persona_name in self.keys else None - # if komrade is None and create_if_missing: - # self.keys[persona_name] = komrade = Komrade(persona_name, api=self, create_if_missing=create_if_missing) - # res = await persona.boot() - # self.log('BOOT RESULT:',res) - # return persona - - - async def upload(self,filename,file_id=None, uri='/file/',uri_part='/part/'): - import sys - - if not file_id: file_id = get_random_id() - part_ids = [] - part_keys = [] - parts=[] - PARTS=[] - buffer_size=100 - for part in bytes_from_file(filename,chunksize=1024*2): - part_id = get_random_id() - part_ids.append(part_id) - part_key='/part/'+part_id - part_keys.append(part_key) - parts.append(part) - # PARTS.append(part) - - # self.log('part!:',sys.getsizeof(part)) - #self.set(part_key,part) - - if len(parts)>=buffer_size: - # self.log('setting...') - await self.set(part_keys,parts) - part_keys=[] - PARTS+=parts - parts=[] - - # set all parts - #self.set(part_keys,PARTS) - # self.log('# parts:',len(PARTS)) - if parts and part_keys: - await self.set(part_keys, parts) - - # how many parts? - # self.log('# pieces!',len(part_ids)) - - file_store = {'ext':os.path.splitext(filename)[-1][1:], 'parts':part_ids} - # self.log('FILE STORE??',file_store) - await self.set_json(uri+file_id,file_store) - - # file_store['data'].seek(0) - file_store['id']=file_id - return file_store - - async def download(self,file_id): - self.log('file_id =',file_id) - file_store = await self.get_json_val('/file/'+file_id) - self.log('file_store =',file_store) - if file_store is None: return - - self.log('file_store!?',file_store) - keys = ['/part/'+x for x in file_store['parts']] - - #time,pieces,pub,sign = await self.get_json_val(keys) - pieces = await self.get_json_val(keys) - self.log('pieces = ',pieces) - file_store['parts_data']=pieces - return file_store - - async def flush(self): - #self.log('saving back to db file...') - node = await self.node - node.storage.dump() - # self.log('DONE saving back to db file...') - - - - async def get_posts(self,uri='/inbox/world'): - # get IDs - post_ids = await self.get_post_ids(uri) - - # get posts - posts = [self.get_post(post_id) for post_id in post_ids] - return await asyncio.gather(*posts) - - - - - - - async def read_inbox(self,uri_inbox=None): - if uri_inbox is None: uri_inbox = P2P_PREFIX_INBOX+self.name.encode() - node = await self.node - inbox_ids = await node.get(uri_inbox) - if inbox_ids is not None: - inbox_ids = inbox_ids.split(BSEP) - self.log('found inbox IDs:',inbox_ids) - - msgs_toread = [self.read_msg(msg_id) for msg_id in inbox_ids] - msgs = await asyncio.gather(*msgs_toread) - self.log('read_inbox() msgs = ',msgs) - return msgs - return [] - - async def read_outbox(self,uri_outbox=None): - if uri_outbox is None: uri_outbox = P2P_PREFIX_OUTBOX+self.name.encode() - return await self.read_inbox(uri_outbox) - - - async def read_msg(self,msg_id): - self.log(f'Persona.read_msg({msg_id}) ?') - uri_msg=P2P_PREFIX_POST+msg_id - node = await self.node - komrade = await self.komrade - - res = await node.get(uri_msg) - self.log('res = ',res) - if res is not None: - double_encrypted_payload_b64 = res - single_encrypted_payload = self.decrypt(double_encrypted_payload_b64, komrade.pubkey_b64) - self.log('GOT ENRYPTED PAYLOAD:',single_encrypted_payload) - - signed_encrypted_payload_b64,from_pubkey_b64,name_b64,time_b64 = single_encrypted_payload.split(BSEP) - self.log('signed_encrypted_payload =',signed_encrypted_payload_b64) - self.log('from_pubkey_b64 =',from_pubkey_b64) - self.log('time_b64 =',time_b64) - - from_name = b64decode(name_b64).decode() - self.log('from_name =',from_name) - timestamp = b64decode(time_b64).decode() - tmpP = Komrade(from_name) - await tmpP.boot() - from_pubkey_b64_accto_name = tmpP.pubkey_b64 - assert from_pubkey_b64==from_pubkey_b64_accto_name - - encrypted_payload_b64 = self.verify(signed_encrypted_payload_b64, from_pubkey_b64) - self.log('encrypted_payload_b64 =',encrypted_payload_b64) - - payload = self.decrypt(encrypted_payload_b64, from_pubkey_b64) - self.log('payload =',payload) - return { - 'success':True, - 'content':payload, - 'from_name':from_name, - 'from_pubkey_b64':from_pubkey_b64, - 'timestamp':timestamp - } - return {'error':'Unknown'} - - async def refresh_inboxes(self): - uris_to_get=[] - - for komrade in self.accounts: - inbox = await persona.load_inbox(decrypt_msg_uri=True, last=LAST_N_IN_INBOX) - for decr_msg_uri in inbox: - uris_to_get.append(self.get_msg(decr_msg_uri)) - # uris_to_get+=inbox - - - res = await asyncio.gather(*uris_to_get) - for decr_msg_uri,encr_msg in res: - self.memcache[decr_msg_uri]=encr_msg - - self.memcache_save() - - @property - def memcache(self): - if not hasattr(self,'_memcache'): - self._memcache = OrderedDict() - if os.path.exists(MEMCACHE_FNFN): - import pickle - try: - self._memcache = pickle.load(open(MEMCACHE_FNFN,'rb')) - except EOFError: - pass - return self._memcache - - def memcache_save(self): - import pickle - with open(MEMCACHE_FNFN,'wb') as of: - pickle.dump(self.memcache, of) - self.log('>> saved:',MEMCACHE_FNFN) - - async def get_msg(self,decr_msg_uri): - self.log('get_msg()',decr_msg_uri) - rval=self.memcache.get(decr_msg_uri) - self.log('got <--',rval) - if rval is not None: - self.log('in memcache') - encr_msg = rval - else: - self.log('>> downloading',decr_msg_uri,'...') - - node = await self.node - encr_msg = await node.get(decr_msg_uri) - self.log('downloaded:',encr_msg) - - return (decr_msg_uri,encr_msg) - #self.memcache. - - async def see(self,decr_msg_id): - res=await self.get(decr_msg_id) - self.log('see() saw',res) - return decr_msg_id - - - -async def test1(): - api = Api() - - marx=await api.personate('marx') - elon=await api.personate('elon') - res = await marx.send(b'secret',to=elon) - - print(marx,elon,res) - -async def test(): - - api = Api() - - - # message? - marx=await api.personate('marx') - elon=await api.personate('elon') - res = await marx.send(b'secret',to=elon) - - res = await elon.send(b'secret back',to=marx) - # print(marx,elon,res) - - # get overall inbox - meta_inbox = await api.refresh_inboxes() - api.log('meta_inbox',meta_inbox) - - keys = api.memcache.keys() - api.log('ALL KEYS =',keys) - - for key in keys: - val = api.memcache.get(key) - api.log(key,'-->',val) - # stop - -#async -async def test_keyserver(): - api = Api() - marx = api.personate('marx') - elon = api.personate('elon') - - - - - zuck = api.personate('zuck') - - print('marx',marx.pubkey_b64) - - print('elon',elon.pubkey_b64) - - print('zuck',zuck.pubkey_b64) - - - #marx = await api.personate(marx) - #res = await api.get_externally_signed_pubkey('marx') - #res = await api.get_externally_signed_pubkey('marx') - #return res - - await elon.send(b'oh no',to=marx) - - -if __name__=='__main__': - asyncio.run(test_keyserver()) \ No newline at end of file diff --git a/komrade/api/persona.py b/komrade/api/persona.py deleted file mode 100644 index 4c0fea1..0000000 --- a/komrade/api/persona.py +++ /dev/null @@ -1,81 +0,0 @@ -# mine imports -import os,sys; sys.path.append(os.path.abspath(os.path.join(os.path.abspath(os.path.join(os.path.dirname(__file__),'..')),'..'))) -from komrade.backend.caller import Caller -from komrade import KomradeException,Logger - -# other imports -import asyncio,os,time,sys,logging,getpass -from pythemis.skeygen import KEY_PAIR_TYPE, GenerateKeyPair -from pythemis.smessage import SMessage, ssign, sverify -from pythemis.exception import ThemisError -from pythemis.scell import SCellSeal -from base64 import b64decode,b64encode -from pathlib import Path - - -class Model(Logger): pass - -class UserAlreadyExists(KomradeException): pass - -class Komrade(Model): - def __init__(self, name, is_group=False): - self.name = name - self.is_group=is_group - - @property - def op(self): - return Caller(self.name) - - - ### - # MAJOR OPERATIONS - ### - - def register(self,passphrase = DEBUG_DEFAULT_PASSPHRASE): - """ - Register this new persona. - Protect keys according to a passphrase. - If group, only admin key pass-protected; - if individual, all keys pass-protected. - """ - - # Does user already exist? - if self.op.exists(): raise UserAlreadyExists('User already exists') - - # Get passphrase - if not passphrase: passphrase = getpass.getpass('Enter password for new account: ') - - # Create - if self.is_group: - self.op.create_keys(adminkey_pass=passphrase) - else: - self.op.create_keys(privkey_pass=passphrase,adminkey_pass=passphrase) - - - def login(self,passphrase = DEBUG_DEFAULT_PASSPHRASE): - # Get passphrase - if not passphrase: passphrase = getpass.getpass('Enter login password: ') - - # Get my decryption keys - if self.is_group: - keychain_decr = self.op.keychain_decr(adminkey_pass=passphrase) - else: - keychain_decr = self.op.keychain_decr(privkey_pass=passphrase,adminkey_pass=passphrase) - - print(keychain_decr) - - - - - - -if __name__ == '__main__': - import random - idnum = random.choice(list(range(1000))) - komrade = Komrade('Op'+str(idnum)) - print('\n\n\nREGISTERING\n\n\n') - persona.register(passphrase='bb') - - print('\n\n\nLOGGING IN\n\n\n') - - persona.login(passphrase='bb') \ No newline at end of file diff --git a/komrade/api/run.sh b/komrade/api/run.sh deleted file mode 100755 index 027a7d7..0000000 --- a/komrade/api/run.sh +++ /dev/null @@ -1 +0,0 @@ -python -c "import api; api.boot_lonely_selfless_node()" \ No newline at end of file diff --git a/komrade/app/assets/avatars/Telephone.jpg b/komrade/app/assets/avatars/Telephone.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3e886eb568bf5eeecd4ad41d3397f7ef93bfe1e0 GIT binary patch literal 15624 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 literal 0 HcmV?d00001 diff --git a/komrade/app/assets/avatars/Telephone.png b/komrade/app/assets/avatars/Telephone.png new file mode 100644 index 0000000000000000000000000000000000000000..60633cbc6058bb761169843797ba216071d326dc GIT binary patch literal 85579 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 U&+dNu8VGpFORGrLNt%WK4{QQ|8UO$Q literal 0 HcmV?d00001 diff --git a/komrade/app/main.py b/komrade/app/main.py index 6b1d392..c04588e 100644 --- a/komrade/app/main.py +++ b/komrade/app/main.py @@ -4,7 +4,7 @@ from config import * import os,sys; sys.path.append(os.path.abspath(os.path.join(os.path.abspath(os.path.join(os.path.dirname(__file__),'..')),'..'))) from komrade import * -from komrade.api import Api + import logging logger=logging.getLogger(__name__) @@ -106,6 +106,7 @@ class MyLayout(MDBoxLayout): class ProgressPopup(MDDialog): pass class MessagePopup(MDDialog): pass +class MessagePopupCard(MDDialog): pass class MyBoxLayout(MDBoxLayout): pass class MyLabel(MDLabel): pass @@ -238,6 +239,9 @@ class MainApp(MDApp, Logger): logo.text_color=root.rgb(*COLOR_LOGO) self.root.change_screen_from_uri(self.uri if self.uri else DEFAULT_URI) + + + return self.root @@ -367,16 +371,26 @@ class MainApp(MDApp, Logger): #stop def stat(self,msg,komrade_name='Telephone',pause=False,**y): - logger.info(msg) - # self.open_msg_dialog(msg) - self.root.add_card({ - 'author':komrade_name, - 'to_name':self.komrade.name if self.komrade else '?', - 'content':str(msg) - }) + from komrade.app.screens.feed.feed import PostCard + if not hasattr(self,'msg_dialog') or not self.msg_dialog: + self.msg_dialog = MessagePopupCard() + # self.msg_dialog.ids.msg_label.text=msg + + self.msg_dialog.card = postcard = PostCard({ + 'author':komrade_name, + 'author_prefix':'Komrade @', + 'to_name':'me', + 'content':msg, + 'timestamp':time.time(), + }) + postcard.size_hint=(None,None) + postcard.size=('600sp','600sp') + self.msg_dialog.add_widget(postcard) + + self.msg_dialog.open() def open_msg_dialog(self,msg): - from screens.post.post import MessagePopup,ProgressPopup + # from screens.post.post import MessagePopup,ProgressPopup if not hasattr(self,'msg_dialog') or not self.msg_dialog: self.msg_dialog = MessagePopup() self.msg_dialog.ids.msg_label.text=msg @@ -388,6 +402,7 @@ class MainApp(MDApp, Logger): def close_msg_dialog(self): if hasattr(self,'msg_dialog'): + self.msg_dialog.remove_widget(self.msg_dialog.card) self.msg_dialog.dismiss() diff --git a/komrade/app/root.kv b/komrade/app/root.kv index afb227b..340337c 100644 --- a/komrade/app/root.kv +++ b/komrade/app/root.kv @@ -17,6 +17,7 @@ #:import COLOR_BG main.COLOR_BG #:import BG_IMG main.BG_IMG #:import COLOR_TEXT main.COLOR_TEXT +#:import COLOR_CARD main.COLOR_CARD ## CLASS DEFS @@ -98,19 +99,26 @@ type: "custom" size_hint: None,None size: ('300dp','300dp') - # md_bg_color: 0,0,0,1 + # md_bg_color: rgb(*COLOR_CARD) MDBoxLayout: id: msg_popup_box_layout size_hint:(1,1) orientation: 'vertical' cols:1 - md_bg_color: 0,0,0,1 + md_bg_color: rgb(*COLOR_CARD) spacing:'0dp' padding:'0dp' pos_hint: {'center_x':0.5, 'center_y':0.5} # radius:[20,] # border_radius:20 + border_radius:20 + canvas: + Color: + rgba: rgb(*COLOR_CARD_BORDER,a=0.5) + Line: + width: 1 + rounded_rectangle: (self.x, self.y, self.width, self.height, 20, 20, 20, 20) @@ -127,6 +135,52 @@ pos_hint: {'center_x': .5, 'y': 0} +: + type: "custom" + size_hint: 1,1 + # size: ('300dp','300dp') + # md_bg_color: rgb(*COLOR_CARD) + md_bg_color:0,0,0,1 + size:('600sp','600sp') + + MDBoxLayout: + id: msg_popup_box_layout + #size_hint:(1,1) + orientation: 'vertical' + padding: "20dp" + size_hint: (1, 1) + # adaptive_height: True + pos_hint: {"center_x": .5, "center_y": .5} + # md_bg_color: rgb(*COLOR_CARD) + md_bg_color:0,0,0,0 + height: self.minimum_height + # radius:[20,] + # border_radius:20 + # canvas: + # Color: + # rgba: rgb(*COLOR_CARD_BORDER,a=0.5) + # Line: + # width: 1 + # rounded_rectangle: (self.x, self.y, self.width, self.height, 20, 20, 20, 20) + + + # MDLabel: + # # size_hint:(None,None) + # id: msg_label + # text: '' + # halign: 'center' + # # valign: 'top' + # theme_text_color: 'Custom' + # text_color: rgb(*COLOR_TEXT) + # font_size: '18dp' + # font_name: 'assets/overpass-mono-regular.otf' + # pos_hint: {'center_x': .5, 'y': 0} + + + + + + diff --git a/komrade/app/screens/base.py b/komrade/app/screens/base.py index 304602f..ebd1833 100644 --- a/komrade/app/screens/base.py +++ b/komrade/app/screens/base.py @@ -29,6 +29,29 @@ class BaseScreen(MDScreen): +# class CardScreen(BaseScreen): +# @property +# def cards(self): +# if not hasattr(self,'_cards'): self._cards=[] +# return self._cards + +# def clear_deck(self): +# for card in self.cards: +# self.ids.post_carousel.remove_widget(card) + +# def add_card(self,data): +# card = PostCard(data) +# if not hasattr(self,'_cards'): self._cards=[] +# self._cards.append(card) + +# self.app.log('card!',data) +# self.app.log('ids:',self.ids.keys(), type(self)) +# self.app.log('card obj?',card) +# # self.ids.post_carousel.add_widget(card) +# stop + + + diff --git a/komrade/app/screens/feed/feed.py b/komrade/app/screens/feed/feed.py index 01449ef..429624c 100644 --- a/komrade/app/screens/feed/feed.py +++ b/komrade/app/screens/feed/feed.py @@ -118,7 +118,9 @@ class PostCard(MDCard): self.content = data.get('content','') self.timestamp = data.get('timestamp',None) self.bind(minimum_height=self.setter('height')) - + author_prefix=data.get('author_prefix','@') + author_label_font_size=data.get('author_label_font_size','24sp') + recip_label_font_size=data.get('author_label_font_size','14sp') # minwidth = 400 # maxwidth = 800 @@ -135,14 +137,14 @@ class PostCard(MDCard): # pieces self.author_section_layout = author_section_layout = PostAuthorLayout() - self.author_label = author_label = PostAuthorLabel(text='@'+self.author) + self.author_label = author_label = PostAuthorLabel(text=author_prefix+self.author) self.author_label.font_name='assets/overpass-mono-semibold.otf' if self.recipient: recip=self.recipient recip='@'+recip if recip and recip[0].isalpha() else recip self.author_label.text+='\n[size=14sp]to '+recip+'[/size]' self.author_label.markup=True - self.author_label.font_size = '24sp' + self.author_label.font_size = author_label_font_size self.author_avatar = author_avatar = PostAuthorAvatar(source=f'assets/avatars/{self.author}.png') #self.img_src) self.author_section_layout.add_widget(author_avatar) self.author_section_layout.add_widget(author_label) @@ -243,56 +245,29 @@ class PostCard(MDCard): class FeedScreen(BaseScreen): posts = ListProperty() - # def on_pre_enter(self): - # if not hasattr(self,'get_posts'): self.get_posts=self.app.komrade.posts - # super().on_pre_enter() - # for post in self.posts: - # self.ids.post_carousel.remove_widget(post) - - # i=0 - # lim=25 - # self.app.komrade.get_updates() - # posts=self.get_posts() - # for i,post in enumerate(reversed(posts)): - # if i>lim: break - # data = { - # 'author':post.from_name, - # 'to_name':post.to_name, - # 'content':post.msg.get('txt') if type(post.msg)==dict else str(post.msg) - # } - # post_obj = PostCard(data) - # self.posts.append(post_obj) - # self.ids.post_carousel.add_widget(post_obj) - def on_pre_enter(self): - self.clear_deck() - # for i,x - - - - - #### - # - - @property - def cards(self): - if not hasattr(self,'_cards'): self._cards=[] - return self._cards - - def clear_deck(self): - for card in self.cards: - self.ids.post_carousel.remove_widget(card) - - def add_card(self,data): - card = PostCard(data) - if not hasattr(self,'_cards'): self._cards=[] - self._cards.append(card) - - self.app.log('card!',data) - self.app.log('ids:',self.ids.keys(), type(self)) - self.app.log('card obj?',card) - # self.ids.post_carousel.add_widget(card) - stop + if not hasattr(self,'get_posts'): self.get_posts=self.app.komrade.posts + super().on_pre_enter() + for post in self.posts: + self.ids.post_carousel.remove_widget(post) + + i=0 + lim=25 + self.app.komrade.get_updates() + posts=self.get_posts() + for i,post in enumerate(reversed(posts)): + if i>lim: break + data = { + 'author':post.from_name, + 'to_name':post.to_name, + 'content':post.msg.get('txt') if type(post.msg)==dict else str(post.msg) + } + post_obj = PostCard(data) + self.posts.append(post_obj) + self.ids.post_carousel.add_widget(post_obj) + # def on_pre_enter(self): + # self.clear_deck() + # # for i,x diff --git a/komrade/app/screens/login/login.py b/komrade/app/screens/login/login.py index f88073a..3b66112 100644 --- a/komrade/app/screens/login/login.py +++ b/komrade/app/screens/login/login.py @@ -160,11 +160,21 @@ class LoginScreen(BaseScreen): return self.password_field.text def boot(self,un): + + self.app.stat( + 'You chose the username '+un + ) + + + return kommie = Komrade(un,getpass_func=self.getpass_func) # self.show_pass_opt() + logger.info(f'booted kommie: {kommie}') if kommie.exists_locally_as_account(): + logger.info(f'is account') self.login_status.text='You should be able to log into this account.' if kommie.privkey: + logger.info(f'passkey login succeeded') self.login_status.text=f'Welcome back, Komrade @{un}' self.app.is_logged_in=True self.app.username=kommie.name @@ -172,6 +182,7 @@ class LoginScreen(BaseScreen): 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) diff --git a/komrade/app/screens/profile/profile.py b/komrade/app/screens/profile/profile.py index f64c9e0..9f94f98 100644 --- a/komrade/app/screens/profile/profile.py +++ b/komrade/app/screens/profile/profile.py @@ -1,3 +1,6 @@ +import os,sys; sys.path.append(os.path.abspath(os.path.join(os.path.abspath(os.path.join(os.path.dirname(__file__),'..')),'..'))) +from komrade import * + from screens.base import BaseScreen from kivymd.uix.boxlayout import MDBoxLayout from kivymd.uix.chip import MDChip @@ -18,7 +21,6 @@ from copy import copy,deepcopy from kivy.animation import Animation from main import MyLabel,COLOR_ICON from misc import * -import os diff --git a/komrade/constants.py b/komrade/constants.py index 1a3753b..e3bda94 100644 --- a/komrade/constants.py +++ b/komrade/constants.py @@ -1,11 +1,11 @@ # addresses KOMRADE_ONION = 'u7spnj3dmwumzoa4.onion' KOMRADE_ONION2 = 'rwg4zcnpwshv4laq.onion' -KOMRADE_URL = KOMRADE_ONION +KOMRADE_URL = '68.66.241.111' #KOMRADE_ONION -OPERATOR_API_URL = f'http://{KOMRADE_ONION}/op/' -# OPERATOR_API_URL = f'http://{KOMRADE_URL}/op/' +# OPERATOR_API_URL = f'http://{KOMRADE_ONION}/op/' +OPERATOR_API_URL = f'http://{KOMRADE_URL}/op/' # paths diff --git a/script/install b/script/install index 53fed4f..221e521 100644 --- a/script/install +++ b/script/install @@ -101,8 +101,8 @@ then #eval "$(pyenv init -)" - pyenv install 3.7.3 - pyenv local 3.7.3 + $HOME/.pyenv/bin/pyenv install 3.7.3 + fi fi @@ -117,22 +117,33 @@ echo ' ' ## the pyenv way -if command -v pyenv &> /dev/null +if command -v $HOME/.pyenv/bin/pyenv &> /dev/null then + # activate right version + $HOME/.pyenv/bin/pyenv local 3.7.3 + + # activate right python exec in terminal + eval "$($HOME/.pyenv/bin/pyenv init -)" + cd $path_repo - pyenv install --skip-existing + + echo "Using Python version:" + python3 --version + + $HOME/.pyenv/bin/pyenv install --skip-existing + #VENV="${PWD##*/}.venv" VENV="venv" VENV=${VENV#-} - python -m venv $VENV + python3 -m venv $VENV . $VENV/bin/activate - python -m pip install -U pip setuptools wheel - python -m pip install -r requirements.txt + python3 -m pip install -U pip setuptools wheel + python3 -m pip install -r requirements.txt else cd $path_repo - python -m pip install virtualenv - python -m virtualenv venv + python3 -m pip install virtualenv + python3 -m virtualenv venv source venv/bin/activate pip install -r requirements.txt fi