From bcd11275cbe997d422826dd825ec39df6c15e971 Mon Sep 17 00:00:00 2001 From: pfeairheller Date: Thu, 7 Mar 2024 19:37:51 -0800 Subject: [PATCH] New endpoint for renaming credential registries. Includes support to join an existing registry. Signed-off-by: pfeairheller --- src/keria/app/credentialing.py | 65 ++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) diff --git a/src/keria/app/credentialing.py b/src/keria/app/credentialing.py index 8e75f295..70185c9a 100644 --- a/src/keria/app/credentialing.py +++ b/src/keria/app/credentialing.py @@ -14,6 +14,8 @@ from keri.app.habbing import SignifyGroupHab from keri.core import coring, scheming, serdering from keri.db import dbing +from keri.db.dbing import dgKey +from keri.vdr import viring from keria.core import httping, longrunning @@ -230,6 +232,69 @@ def on_get(req, rep, name, registryName): rep.content_type = "application/json" rep.data = json.dumps(rd).encode("utf-8") + @staticmethod + def on_put(req, rep, name, registryName): + """ Registry Resource PUT endpoint + + Parameters: + req: falcon.Request HTTP request + rep: falcon.Response HTTP response + name (str): human readable name for AID + registryName(str): human readable name for registry or its SAID + + --- + summary: Get a single credential issuance and revocation registy + description: Get a single credential issuance and revocation registy + tags: + - Registries + responses: + 200: + description: credential issuance and revocation registy + + """ + agent = req.context.agent + + hab = agent.hby.habByName(name) + if hab is None: + raise falcon.HTTPNotFound(description=f"{name} is not a valid reference to an identifier") + + body = req.get_media() + if 'name' not in body: + raise falcon.HTTPBadRequest(description="'name' is required in body") + + name = body['name'] + if agent.rgy.registryByName(name) is not None: + raise falcon.HTTPBadRequest(description=f"{name} is already in use for a registry") + + registry = agent.rgy.registryByName(registryName) + if registry is None: + if registryName in agent.rgy.regs: # Check to see if the registryName parameter is a SAID + registry = agent.rgy.regs[registryName] + else: + regk = registryName + key = dgKey(regk, regk) + raw = agent.rgy.reger.getTvt(key=key) + if raw is None: + raise falcon.HTTPNotFound( + description=f"{registryName} is not a valid reference to a credential registry") + + regser = serdering.SerderKERI(raw=bytes(raw)) + registry = agent.rgy.makeSignifyRegistry(name, hab.pre, regser) + + regord = viring.RegistryRecord(registryKey=registry.regk, prefix=hab.pre) + agent.rgy.reger.regs.pin(keys=(name,), val=regord) + registry.name = name + + rd = dict( + name=registry.name, + regk=registry.regk, + pre=registry.hab.pre, + state=asdict(registry.tever.state()) + ) + rep.status = falcon.HTTP_200 + rep.content_type = "application/json" + rep.data = json.dumps(rd).encode("utf-8") + class SchemaResourceEnd: