Source code for keria.end.ending

# -*- encoding: utf-8 -*-
"""
KERIA
keria.end.ending module

ReST API endpoints

"""
import falcon
from keri import kering
from keri.end import ending


def loadEnds(app, agency, default=None):
    end = OOBIEnd(agency=agency, default=default)
    app.add_route("/oobi", end)
    app.add_route("/oobi/{aid}", end)
    app.add_route("/oobi/{aid}/{role}", end)
    app.add_route("/oobi/{aid}/{role}/{eid}", end)


[docs] class OOBIEnd: """ REST API for OOBI endpoints Attributes: .hby (Habery): database access """ def __init__(self, agency, default=None): """ End point for responding to OOBIs Parameters: default (str) qb64 AID of the 'self' of the node for """ self.agency = agency self.default = default
[docs] def on_get(self, _, rep, aid=None, role=None, eid=None): """ GET endoint for OOBI resource Parameters: _: Falcon request object rep: Falcon response object aid: qb64 identifier prefix of OOBI role: requested role for OOBI rpy message eid: qb64 identifier prefix of participant in role """ if not aid: if self.default is None: raise falcon.HTTPNotFound(description="no blind oobi for this node") aid = self.default agent = self.agency.lookup(pre=aid) if agent is None: raise falcon.HTTPNotFound(description="AID not found for this OOBI") kever = agent.hby.kevers[aid] if not agent.hby.db.fullyWitnessed(kever.serder): raise falcon.HTTPNotFound(description=f"{aid} not available") if kever.prefixer.qb64 in agent.hby.prefixes: # One of our identifiers hab = agent.hby.habs[kever.prefixer.qb64] else: # Not allowed to respond raise falcon.HTTPNotAcceptable(description=f"{aid} is not a local identifier") eids = [] if eid: eids.append(eid) msgs = hab.replyToOobi(aid=aid, role=role, eids=eids) if not msgs and role is None: msgs = hab.replyToOobi(aid=aid, role=kering.Roles.witness, eids=eids) msgs.extend(hab.replay(aid)) if msgs: rep.status = falcon.HTTP_200 # This is the default status rep.set_header(ending.OOBI_AID_HEADER, aid) rep.content_type = "application/json+cesr" rep.data = bytes(msgs) else: rep.status = falcon.HTTP_NOT_FOUND