Example #1
0
def perform_pubkey_get(intent):
    msg = {'id': intent.id}
    ret = yield Effect(BackendCmd('pubkey_get', msg))
    status = ret['status']
    if status != 'ok':
        raise exception_from_status(status)(ret['label'])
    return PubKey(intent.id, from_jsonb64(ret['key']))
Example #2
0
def perform_group_read(intent):
    msg = {'name': intent.name}
    ret = yield Effect(BackendCmd('group_read', msg))
    status = ret['status']
    if status != 'ok':
        raise exception_from_status(status)(ret['label'])
    return Group(intent.name, ret['admins'], ret['users'])
Example #3
0
 async def open_connection(self, identity):
     logger.debug('Connection to backend opened')
     assert not self._websocket, "Connection to backend already opened"
     try:
         self._websocket = await websockets.connect(self.url)
         # Handle handshake
         raw = await self._websocket.recv()
         challenge = ejson_loads(raw)
         answer = identity.private_key.sign(challenge['challenge'].encode())
         await self._websocket.send(
             ejson_dumps({
                 'handshake': 'answer',
                 'identity': identity.id,
                 'answer': to_jsonb64(answer)
             }))
         resp = ejson_loads(await self._websocket.recv())
         if resp['status'] != 'ok':
             await self.close_connection()
             raise exception_from_status(resp['status'])(resp['label'])
         self._ws_recv_handler_task = asyncio.ensure_future(
             self._ws_recv_handler(), loop=self.loop)
         if self.watchdog_time:
             self._watchdog_task = asyncio.ensure_future(self._watchdog(),
                                                         loop=self.loop)
     except (ConnectionRefusedError,
             websockets.exceptions.ConnectionClosed) as exc:
         raise BackendConnectionError('Cannot connect to backend (%s)' %
                                      exc)
Example #4
0
def perform_vlob_create(intent):
    msg = {'blob': to_jsonb64(intent.blob)}
    ret = yield Effect(BackendCmd('vlob_create', msg))
    status = ret['status']
    if status != 'ok':
        raise exception_from_status(status)(ret['label'])
    return VlobAccess(ret['id'], ret['read_trust_seed'],
                      ret['write_trust_seed'])
def perform_user_vlob_read(intent):
    msg = {}
    if intent.version is not None:
        msg['version'] = intent.version
    ret = yield Effect(BackendCmd('user_vlob_read', msg))
    status = ret['status']
    if status != 'ok':
        raise exception_from_status(status)(ret['label'])
    return UserVlobAtom(ret['version'], from_jsonb64(ret['blob']))
Example #6
0
def perform_vlob_read(intent):
    assert isinstance(intent.id, str)
    msg = {'id': intent.id, 'trust_seed': intent.trust_seed}
    if intent.version is not None:
        msg['version'] = intent.version
    ret = yield Effect(BackendCmd('vlob_read', msg))
    status = ret['status']
    if status != 'ok':
        raise exception_from_status(status)(ret['label'])
    return VlobAtom(ret['id'], ret['version'], from_jsonb64(ret['blob']))
Example #7
0
def perform_message_get(intent):
    msg = {'recipient': intent.recipient, 'offset': intent.offset}
    ret = yield Effect(BackendCmd('message_get', msg))
    status = ret['status']
    if status != 'ok':
        raise exception_from_status(status)(ret['label'])
    return [
        Message(msg['count'], from_jsonb64(msg['body']))
        for msg in ret['messages']
    ]
Example #8
0
def perform_vlob_update(intent):
    msg = {
        'id': intent.id,
        'version': intent.version,
        'trust_seed': intent.trust_seed,
        'blob': to_jsonb64(intent.blob)
    }
    ret = yield Effect(BackendCmd('vlob_update', msg))
    status = ret['status']
    if status != 'ok':
        raise exception_from_status(status)(ret['label'])
Example #9
0
 async def send_cmd(self, msg):
     if not self._websocket:
         raise BackendConnectionError(
             'BackendAPIService cannot send command in current state')
     try:
         await self._websocket.send(ejson_dumps(msg))
     except websockets.exceptions.ConnectionClosed as exc:
         raise BackendConnectionError('Cannot connect to backend (%s)' %
                                      exc)
     ret = await self._resp_queue.get()
     status = ret['status']
     if status == 'ok':
         return ret
     else:
         raise exception_from_status(status)(ret['label'])
Example #10
0
def perform_group_remove_identities(intent):
    msg = {'name': intent.name, 'identities': intent.identities, 'admin': intent.admin}
    ret = yield Effect(BackendCmd('group_remove_identities', msg))
    status = ret['status']
    if status != 'ok':
        raise exception_from_status(status)(ret['label'])
Example #11
0
def perform_group_create(intent):
    msg = {'name': intent.name}
    ret = yield Effect(BackendCmd('group_create', msg))
    status = ret['status']
    if status != 'ok':
        raise exception_from_status(status)(ret['label'])
Example #12
0
def perform_message_new(intent):
    msg = {'recipient': intent.recipient, 'body': to_jsonb64(intent.body)}
    ret = yield Effect(BackendCmd('message_new', msg))
    status = ret['status']
    if status != 'ok':
        raise exception_from_status(status)(ret['label'])