async def make_agent_GET_request(
        self, op, rec_id=None, text=False, params=None
    ) -> (int, str):
        if op["topic"] == "connection":
            if rec_id:
                log_msg("Getting connection for", rec_id)
                connection = get_resource(rec_id, "connection")

                if connection:
                    resp_status = 200
                    resp_text = json.dumps({"connection_id": rec_id, "state": "active", "connection": connection})
                    return (resp_status, resp_text)

            else:
                log_msg("Getting connections")
                connections = get_resources("connection")
                log_msg(connections)
                ret_connections = []
                for connection_id in connections:
                    connection = connections[connection_id]
                    ret_connections.append({"connection_id": connection_id, "state": "active", "connection": connection})

                resp_status = 200
                resp_text = json.dumps(ret_connections)
                log_msg(resp_status, resp_text)
                return (resp_status, resp_text)

        log_msg("Returning 404")

        return (404, '404: Not Found\n\n'.encode('utf8'))
    async def make_agent_GET_request(self,
                                     op,
                                     rec_id=None,
                                     text=False,
                                     params=None) -> (int, str):
        if op["topic"] == "status":
            status = 200 if self.ACTIVE else 418
            status_msg = "Active" if self.ACTIVE else "Inactive"
            return (status, json.dumps({"status": status_msg}))

        elif op["topic"] == "connection":
            if rec_id:
                log_msg("Getting connection for", rec_id)
                connection = get_resource(rec_id, "connection")

                if connection:
                    connection_dict = await connection.serialize()
                    connection_state = await connection.get_state()

                    resp_status = 200
                    resp_text = json.dumps({
                        "connection_id":
                        rec_id,
                        "state":
                        state_text(connection_state),
                        "connection":
                        connection_dict
                    })
                    return (resp_status, resp_text)

            else:
                log_msg("Getting connections")
                connections = get_resources("connection")
                log_msg(connections)
                ret_connections = []
                for connection_id in connections:
                    connection = connections[connection_id]
                    connection_dict = await connection.serialize()
                    connection_state = await connection.get_state()
                    ret_connections.append({
                        "connection_id":
                        connection_id,
                        "state":
                        state_text(connection_state),
                        "connection":
                        connection_dict
                    })

                resp_status = 200
                resp_text = json.dumps(ret_connections)
                log_msg(resp_status, resp_text)
                return (resp_status, resp_text)

        log_msg("Returning 404")

        return (404, '404: Not Found\n\n'.encode('utf8'))
    async def make_agent_GET_request_response(
        self, topic, rec_id=None, text=False, params=None
    ) -> (int, str):
        if topic == "connection" and rec_id:
            # TODO no-op for now
            connection = get_resource(rec_id, "connection")
            resp_status = 200
            resp_text = json.dumps({"connection_id": rec_id, "connection": connection})

            return (resp_status, resp_text)

        return (404, '404: Not Found\n\n'.encode('utf8'))
Пример #4
0
 async def swap_thread_id_for_exchange_id(self, thread_id, data_type,
                                          id_txt):
     timeout = 0
     webcall_returned = None
     while webcall_returned is None or timeout == 20:
         msg = get_resource(thread_id, data_type)
         try:
             ex_id = msg[0][id_txt]
             webcall_returned = True
         except TypeError:
             await asyncio.sleep(1)
             timeout += 1
     if timeout == 20:
         raise TimeoutError(
             'Timeout waiting for web callback to retrieve the thread id based on the exchange id'
         )
     return ex_id
    async def make_agent_GET_request_response(self,
                                              topic,
                                              rec_id=None,
                                              text=False,
                                              params=None) -> (int, str):
        if topic == "connection" and rec_id:
            connection = get_resource(rec_id, "connection")
            connection_state = await connection.update_state()
            store_resource(rec_id, "connection", connection)

            resp_status = 200
            connection_dict = await connection.serialize()
            resp_text = json.dumps({
                "connection_id": rec_id,
                "connection": connection_dict
            })

            return (resp_status, resp_text)

        return (404, '404: Not Found\n\n'.encode('utf8'))
    async def make_agent_POST_request(self,
                                      op,
                                      rec_id=None,
                                      data=None,
                                      text=False,
                                      params=None) -> (int, str):
        if op["topic"] == "connection":
            operation = op["operation"]
            if operation == "create-invitation":
                connection_id = create_uuid()

                connection = await Connection.create(connection_id)
                await connection.connect('{"use_public_did": true}')
                invitation = await connection.invite_details(False)

                store_resource(connection_id, "connection", connection)
                connection_dict = await connection.serialize()

                resp_status = 200
                resp_text = json.dumps({
                    "connection_id": connection_id,
                    "invitation": invitation,
                    "connection": connection_dict
                })

                return (resp_status, resp_text)

            elif operation == "receive-invitation":
                connection_id = create_uuid()

                connection = await Connection.create_with_details(
                    connection_id, json.dumps(data))
                await connection.connect('{"use_public_did": true}')
                connection_state = await connection.update_state()
                store_resource(connection_id, "connection", connection)
                connection_dict = await connection.serialize()

                resp_status = 200
                resp_text = json.dumps({
                    "connection_id": connection_id,
                    "invitation": data,
                    "connection": connection_dict
                })

                return (resp_status, resp_text)

            elif (operation == "accept-invitation"
                  or operation == "accept-request" or operation == "remove"
                  or operation == "start-introduction"
                  or operation == "send-ping"):
                connection_id = rec_id
                connection = get_resource(rec_id, "connection")
                if connection:
                    # wait for a small period just in case ...
                    await asyncio.sleep(0.1)
                    # make sure we have latest & greatest connection state
                    await connection.update_state()
                    store_resource(connection_id, "connection", connection)
                    connection_dict = await connection.serialize()
                    connection_state = await connection.get_state()

                    resp_status = 200
                    resp_text = json.dumps({
                        "connection_id":
                        rec_id,
                        "state":
                        state_text(connection_state),
                        "connection":
                        connection_dict
                    })
                    return (resp_status, resp_text)

        return (404, '404: Not Found\n\n'.encode('utf8'))
    async def make_agent_POST_request(
        self, op, rec_id=None, data=None, text=False, params=None
    ) -> (int, str):
        if op["topic"] == "status":
            status = 200 if self.ACTIVE else 418
            status_msg = "Active" if self.ACTIVE else "Inactive"
            return (status, json.dumps({"status": status_msg}))

        elif op["topic"] == "connection":
            operation = op["operation"]
            if operation == "create-invitation":
                connection_id = create_uuid()

                (invitation_url, invitation) = await self.pico_create_invitation()
                print(invitation_url, invitation)

                connection = {"id": connection_id, "invitation": invitation, "invitation_url": invitation_url}

                store_resource(connection_id, "connection", connection)

                resp_status = 200
                resp_text = json.dumps({"connection_id": connection_id, "invitation": invitation, "invitation_url": invitation_url, "connection": connection})

                return (resp_status, resp_text)

            elif operation == "receive-invitation":
                connection_id = create_uuid()

                if "invitation_url" in data and 0 < len(data["invitation_url"]):
                    invitation_url = data["invitation_url"]
                    invitation = self.extract_invite_info(invitation_url)
                elif "invitation" in data and 0 < len(data["invitation"]):
                    return (500, '500: No Invitation URL Provided\n\n'.encode('utf8'))
                else:
                    return (500, '500: No Invitation Provided\n\n'.encode('utf8'))

                print(invitation_url)
                print(invitation)
                await self.pico_receive_invitation(invitation_url)

                connection = {"id": connection_id, "invitation": invitation, "invitation_url": invitation_url}

                store_resource(connection_id, "connection", connection)

                resp_status = 200
                resp_text = json.dumps({"connection_id": connection_id, "invitation": invitation, "invitation_url": invitation_url, "connection": connection})

                return (resp_status, resp_text)

            elif (operation == "accept-invitation" 
                or operation == "accept-request"
                or operation == "remove"
                or operation == "start-introduction"
                or operation == "send-ping"
            ):
                connection_id = rec_id
                connection = get_resource(rec_id, "connection")
                if connection:
                    # TODO no op for now
                    resp_status = 200
                    resp_text = json.dumps({"connection_id": rec_id, "state": "active", "connection": connection_dict})
                    return (resp_status, resp_text)

        return (404, '404: Not Found\n\n'.encode('utf8'))
Пример #8
0
 async def swap_thread_id_for_exchange_id(self, thread_id, data_type,
                                          id_txt):
     await asyncio.sleep(2)
     msg = get_resource(thread_id, data_type)
     ex_id = msg[0][id_txt]
     return ex_id