working in new p2p changes

operator-time
quadrismegistus 4 years ago
parent 0e2cf2137f
commit 0e3fa481f5

1
.gitignore vendored

@ -14,3 +14,4 @@ dbm.*
.vscode/settings.json
lib
*.venv
.vscode

@ -1,3 +1,19 @@
#from p2p_api import
PORT_LISTEN = 5969
# NODES_PRIME = [("128.232.229.63",8467), ("68.66.241.111",8467)]
NODES_PRIME = [("128.232.229.63",8467)]
DEFAULT_URI='/login/'
import random,platform

@ -4,6 +4,8 @@
from config import *
# monkeypatching the things that asyncio needs
import subprocess
subprocess.PIPE = -1 # noqa
@ -50,7 +52,10 @@ import shutil,sys
from kivy.uix.image import Image
import sys
sys.path.append("..") # Adds higher directory to python modules path.
from p2p import p2p,crypto,api
from p2p.p2p_api import *
from p2p.persona import *
from kivy.event import EventDispatcher
import threading,asyncio,sys
@ -247,21 +252,13 @@ class MainApp(MDApp):
self.username=''
self.load_store()
self.uri=DEFAULT_URI
# connect to API
self.api = api.Api(log=self.log,app=self)
self.api = Api(log=self.log,app=self)
@property
def channel(self):
return self.uri.split('/')[2] if self.uri and self.uri.count('/')>=2 else None
def get_session(self):
# return get_async_tor_proxy_session()
return get_tor_proxy_session()
#return get_tor_python_session()
async def node(self):
return await self.api.node
def get_username(self):
if hasattr(self,'username'): return self.username
@ -269,6 +266,7 @@ class MainApp(MDApp):
if hasattr(self,'username'): return self.username
return ''
def build(self):
# bind
global app,root
@ -302,9 +300,15 @@ class MainApp(MDApp):
self.username = userd.get('username','')
def register(self,un):
async def do():
dat = await self.api.register(un)
self.persona = persona = Persona(un,node=await self.node)
dat = await persona.boot()
#dat = await self.api.register(un)
if 'success' in dat:
self.username=un
self.store.put('user',username=un)
@ -383,26 +387,29 @@ class MainApp(MDApp):
async def get_post(self,post_id):
return await self.api.get_post(post_id)
async def get_posts(self,uri='/inbox/world'):
if uri.count('/')<2: raise Exception('not a URI: '+uri)
if 'login' in uri:
raise Exception('!!!! '+uri)
self.log(f'app.get_posts(uri={uri} -> ...')
data = await self.api.get_posts(uri)
self.log(f'app.get_posts() got back from api.get_posts() a {type(data)}')
newdata=[]
for d in data:
# self.log('data d:',d)
if not 'val' in d: continue
newdict = dict(d['val'].items())
newdict['timestamp']=float(d['time'])
newdict['to_name']=d['channel']
newdata.append(newdict)
async def get_posts(self,uri=b'/inbox/world'):
return await self.persona.read_inbox(uri)
# if uri.count('/')<2: raise Exception('not a URI: '+uri)
# if 'login' in uri:
# raise Exception('!!!! '+uri)
# self.log(f'app.get_posts(uri={uri} -> ...')
# data = await self.api.get_posts(uri)
# self.log(f'app.get_posts() got back from api.get_posts() a {type(data)}')
# newdata=[]
# for d in data:
# # self.log('data d:',d)
# if not 'val' in d: continue
# newdict = dict(d['val'].items())
# newdict['timestamp']=float(d['time'])
# newdict['to_name']=d['channel']
# newdata.append(newdict)
# return index
return newdata
# # return index
# return newdata
async def get_channel_posts(self,channel,prefix='inbox'):
# am I allowed to?
@ -417,13 +424,8 @@ class MainApp(MDApp):
async def get_channel_outbox(self,channel):
return await self.get_channel_posts(channel=channel,prefix='outbox')
async def get_my_posts(self,username=None,prefix='outbox'):
if username is None and self.username: username=self.username
if not username:
self.log(f'!! whose posts?')
return
self.log(f'get_my_posts({self.username})')
return await self.get_channel_outbox(username)
async def get_my_posts(self):
return await self.persona.read_outbox()

@ -1 +0,0 @@
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

@ -1 +0,0 @@
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA4HdamnfXIzzBMJe6qx6JxB1p8qIO7C3hDGoDALpkuycUypXDgay/dm108G7fNj5oV4H3rhpqK4cRuncY+CfmnHSEg2IoWXzHP9A4L+drMpyTBbLxwaflKPzDHDr894O/DJXJ1LBkZf2LECFehYJRkozUzR66ZVaUkoqSyEslg67QFKOSp5/YNolZdMLXTwzA85nd1B1G4k8NG6FhgrFaLemAm41d0Try8kcoY1u796fg23zy8zlkDvloqZqId0dIOXu4Nw1MprID/qdiLq+on7bA267Usj4WLN7Nn/RuqgVA53dLXRfGrXtAkx0odRanTcf7QlCDpklgXy1lupZHzjzOq9knzZGJDI08xwhkxVGyFA7ZnvK/yVHDKDNgDHMqLHj6NuSPgh7fXQS7Q/cCXEgaWMzWpNAjOkc5/WD7YCF+70wlMni96OPa1ostqL9hei3yqMdLGlYd59nv95fbppeljOQq22VWXsk9e3nBWQQKOZ3smmCYPjzdFnYvvG4hGd7YOiIC64Uadx3F7Mubkx0D+ArEKHcrbjqqFo1EKnST5FSqiQl9joYcnJ0V/P69HdmEmFz6OyKArr+KqMtzmBDudiZVAY7BrdulXMoAbqfUxqrccyUiGz/xQRryA8Xc+Vdw5Mir17B5UsmMgCsrD/r3rtx+hibeogfwcfkd8F0CAwEAAQ==

@ -4,7 +4,7 @@ from pythemis.skeygen import KEY_PAIR_TYPE, GenerateKeyPair
from pythemis.smessage import SMessage, ssign, sverify
from pythemis.exception import ThemisError
from base64 import b64decode,b64encode
from kademlia.network import Server
# from kademlia.network import Server
import os,time,sys,logging
from pathlib import Path
@ -54,11 +54,6 @@ def check_world_keys():
check_world_keys()
#from p2p_api import
PORT_LISTEN = 5969
# NODES_PRIME = [("128.232.229.63",8467), ("68.66.241.111",8467)]
NODES_PRIME = [("128.232.229.63",8467)]
## CONNECTING
@ -123,40 +118,8 @@ class Persona(object):
@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=PORT_LISTEN):
self.log('connecting on port %s...' % port)
node = await self._getdb(port)
self.log(f'connect() has node {node}')
self._node = node
return node
async def _getdb(self,port=PORT_LISTEN):
self.log('starting server on port %s..' % port)
node = Server(log=self.log)
try:
if self: self.log('listening on port %s...' % format(port))
await node.listen(port)
except OSError:
return await self._getdb(port=port+1)
raise NetworkStillConnectingError('Still connecting...')
#await asyncio.sleep(3)
if self: self.log('bootstrapping server..')
await node.bootstrap(NODES_PRIME)
self.log('NODE:',node)
return node
async def boot(self):
self.log(f'>> Persona.boot()')
@ -166,6 +129,11 @@ class Persona(object):
self.gen_keys()
await self.set_pubkey_p2p()
if self.privkey and self.pubkey:
return {'success':'Logged in...'}
return {'error':'Login failed'}
@property
def key_path_pub(self):
return os.path.join(KEY_PATH,'.'+self.name+'.kom')
@ -406,6 +374,13 @@ class Persona(object):
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}) ?')
@ -455,11 +430,18 @@ def run_multiple_tasks(tasks):
return res
return asyncio.get_event_loop().run_until_complete(_go(tasks))
async def main(port=PORT_LISTEN):
async def main():
# start node
from kademlia.network import Server
#from p2p_api import
PORT_LISTEN = 5969
# NODES_PRIME = [("128.232.229.63",8467), ("68.66.241.111",8467)]
NODES_PRIME = [("128.232.229.63",8467)]
node = Server(log=log)
await node.listen(port)
await node.listen(PORT_LISTEN)
await node.bootstrap(NODES_PRIME)
marx = Persona('marx',node=node)
Loading…
Cancel
Save