Store and verify connection parameters

This commit is contained in:
2022-09-24 14:42:35 -04:00
parent 5035ff2dd1
commit 31ffadbae3
3 changed files with 14 additions and 8 deletions

10
rpc.py
View File

@@ -99,7 +99,8 @@ class ClientSync(object):
self.sock.connect((host, port))
self.recv_rpc_msg = recv_rpc_msg(self.sock)
self.lock = threading.Lock()
self._server = self._user = None
self._server = { 'host': host, 'port': port }
self._user = None
self.context = 'XUS SIGNON'
if TCPConnect and (res := self.TCPConnect(self.sock.getsockname()[0], '0', socket.gethostname())) != 'accept':
raise RPCExcInvalidResult('TCPConnect', self.sock.getsockname()[0], '0', socket.gethostname(), res)
@@ -129,7 +130,7 @@ class ClientSync(object):
self.sock = self.recv_rpc_msg = None
return res
def authenticate(self, identity: str, *, context=('XUS SIGNON',)):
self._server = RecordServerInfo(*self('XUS SIGNON SETUP', '', '1', context=context))
self._server.update(RecordServerInfo(*self('XUS SIGNON SETUP', '', '1', context=context))._asdict())
res = self('XUS AV CODE', XWBHash_encrypt(identity))
if res[0] == '0' or res[2] != '0':
raise RPCExcAuth(res[3], res)
@@ -170,7 +171,8 @@ class ClientAsync(object):
self.reader, self.writer = await asyncio.open_connection(host, port)
self.arecv_rpc_msg = arecv_rpc_msg(self.reader)
self.lock = asyncio.Lock()
self._server = self._user = None
self._server = { 'host': host, 'port': port, 'info': None }
self._user = None
self.context = 'XUS SIGNON'
if TCPConnect and (res := await self.TCPConnect(self.writer.get_extra_info('sockname')[0], '0', socket.gethostname())) != 'accept':
raise RPCExcInvalidResult('TCPConnect', self.writer.get_extra_info('sockname')[0], '0', socket.gethostname(), res)
@@ -205,7 +207,7 @@ class ClientAsync(object):
self.reader = self.writer = None
return res
async def authenticate(self, identity: str, *, context=('XUS SIGNON',)):
self._server = RecordServerInfo(*await self('XUS SIGNON SETUP', '', '1', context=context))
self._server.update(RecordServerInfo(*await self('XUS SIGNON SETUP', '', '1', context=context))._asdict())
res = await self('XUS AV CODE', XWBHash_encrypt(identity))
if res[0] == '0' or res[2] != '0':
raise RPCExcAuth(res[3], res)