Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add kli import command for importing dot CESR file, add gateway role #921

Merged
merged 4 commits into from
Jan 8, 2025
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
75 changes: 75 additions & 0 deletions src/keri/app/cli/commands/import.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
# -*- encoding: utf-8 -*-
"""
KERI
keri.kli.commands module

"""
import argparse
import sys

from hio import help
from hio.base import doing

from keri.app import habbing
from keri.app.cli.common import existing
from keri.core import coring, serdering, parsing

logger = help.ogler.getLogger()

parser = argparse.ArgumentParser(description='Import key events in CESR stream format')
parser.set_defaults(handler=lambda args: export(args),
transferable=True)
parser.add_argument('--name', '-n', help='keystore name and file location of KERI keystore', required=True)
parser.add_argument('--base', '-b', help='additional optional prefix to file location of KERI keystore',
required=False, default="")
parser.add_argument('--passcode', '-p', help='21 character encryption passcode for keystore (is not saved)',
dest="bran", default=None) # passcode => bran
parser.add_argument("--file", help="File of streamed CESR events to import", required=True)


def export(args):
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should be 'import'

""" Command line list credential registries handler
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Docstring is probably from some other functionality?


"""

ed = ImportDoer(name=args.name,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should probably be id or importDoer ?

base=args.base,
bran=args.bran,
file=args.file)
return [ed]


class ImportDoer(doing.DoDoer):

def __init__(self, name, base, bran, file):
self.file = file

self.hby = existing.setupHby(name=name, base=base, bran=bran)

doers = [doing.doify(self.exportDo), habbing.HaberyDoer(self.hby)]

super(ImportDoer, self).__init__(doers=doers)

def exportDo(self, tymth, tock=0.0):
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should be importDo

""" Export credential from store and any related material

Parameters:
tymth (function): injected function wrapper closure returned by .tymen() of
Tymist instance. Calling tymth() returns associated Tymist .tyme.
tock (float): injected initial tock value

Returns: doifiable Doist compatible generator method
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It returns True


"""
# enter context
self.wind(tymth)
self.tock = tock
_ = (yield self.tock)

with open(self.file, 'rb') as f:
ims = f.read()
parsing.Parser(kvy=self.hby.kvy, rvy=self.hby.rvy, local=False).parse(ims=ims)
self.hby.kvy.processEscrows()

self.exit()
return True
2 changes: 1 addition & 1 deletion src/keri/app/cli/commands/init.py
Original file line number Diff line number Diff line change
@@ -51,7 +51,7 @@ def handler(args):
parser.add_argument('--passcode', '-p', help='21 character encryption passcode for keystore (is not saved)',
dest="bran", default=None)
parser.add_argument('--nopasscode', help='create an unencrypted keystore', action='store_true')
parser.add_argument('--aeid', '-a', help='qualified base64 of non-transferable identifier prefix for authentication '
parser.add_argument('--aeid', '-a', help='qualified base64 of non-transferable identifier prefix for authentication '
'and encryption of secrets in keystore', default=None)
parser.add_argument('--seed', '-e', help='qualified base64 private-signing key (seed) for the aeid from which the '
'private decryption key may be derived', default=None)
5 changes: 3 additions & 2 deletions src/keri/kering.py
Original file line number Diff line number Diff line change
@@ -342,8 +342,9 @@ def sniff(ims):
Schemage = namedtuple("Schemage", 'tcp http https')
Schemes = Schemage(tcp='tcp', http='http', https='https')

Rolage = namedtuple("Rolage", 'controller witness registrar watcher judge juror peer mailbox agent indexer')
Roles = Rolage(controller='controller', witness='witness', registrar='registrar',

Rolage = namedtuple("Rolage", 'controller witness registrar gateway watcher judge juror peer mailbox agent indexer')
Roles = Rolage(controller='controller', witness='witness', registrar='registrar', gateway="gateway",
watcher='watcher', judge='judge', juror='juror', peer='peer', mailbox="mailbox", agent="agent", indexer="indexer")


8 changes: 5 additions & 3 deletions tests/peer/test_exchanging.py
Original file line number Diff line number Diff line change
@@ -3,6 +3,8 @@
tests.peer.test_exchanging module

"""
import json

import pysodium
import pytest

@@ -57,10 +59,10 @@ def test_essrs():
ims = hab.makeOwnInception()
parsing.Parser().parse(ims=ims, kvy=recHby.kvy)
# create the test message with essr attachment
msg = "This is a test message that must be secured"
msg = dict(msg="This is a test message that must be secured", i=hab.pre)
rkever = recHab.kever
pubkey = pysodium.crypto_sign_pk_to_box_pk(rkever.verfers[0].raw)
raw = pysodium.crypto_box_seal(msg.encode("utf-8"), pubkey)
raw = pysodium.crypto_box_seal(json.dumps(msg).encode("utf-8"), pubkey)

texter = coring.Texter(raw=raw)
diger = coring.Diger(ser=raw, code=MtrDex.Blake3_256)
@@ -84,7 +86,7 @@ def test_essrs():
# Pull the logged ESSR attachment and verify it is the one attached
texter = recHby.db.essrs.get(keys=(serder.said,))
raw = recHab.decrypt(ser=texter[0].raw)
assert raw.decode("utf-8") == msg
assert json.loads(raw.decode("utf-8")) == msg

# Test with invalid diger
diger = coring.Diger(qb64="EKC8085pwSwzLwUGzh-HrEoFDwZnCJq27bVp5atdMT9o")