Skip to content

Commit b932c8d

Browse files
authored
Add kli import command for importing dot CESR file, add gateway role (#921)
* Import command for loading KEL from a dot cesr file Signed-off-by: pfeairheller <pfeairheller@gmail.com> * Add Revery to Parser for import command Signed-off-by: pfeairheller <pfeairheller@gmail.com> * Fix essr to encrypt sender. Signed-off-by: pfeairheller <pfeairheller@gmail.com> --------- Signed-off-by: pfeairheller <pfeairheller@gmail.com>
1 parent 0a6fb32 commit b932c8d

File tree

4 files changed

+84
-6
lines changed

4 files changed

+84
-6
lines changed

src/keri/app/cli/commands/import.py

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
# -*- encoding: utf-8 -*-
2+
"""
3+
KERI
4+
keri.kli.commands module
5+
6+
"""
7+
import argparse
8+
import sys
9+
10+
from hio import help
11+
from hio.base import doing
12+
13+
from keri.app import habbing
14+
from keri.app.cli.common import existing
15+
from keri.core import coring, serdering, parsing
16+
17+
logger = help.ogler.getLogger()
18+
19+
parser = argparse.ArgumentParser(description='Import key events in CESR stream format')
20+
parser.set_defaults(handler=lambda args: export(args),
21+
transferable=True)
22+
parser.add_argument('--name', '-n', help='keystore name and file location of KERI keystore', required=True)
23+
parser.add_argument('--base', '-b', help='additional optional prefix to file location of KERI keystore',
24+
required=False, default="")
25+
parser.add_argument('--passcode', '-p', help='21 character encryption passcode for keystore (is not saved)',
26+
dest="bran", default=None) # passcode => bran
27+
parser.add_argument("--file", help="File of streamed CESR events to import", required=True)
28+
29+
30+
def export(args):
31+
""" Command line list credential registries handler
32+
33+
"""
34+
35+
ed = ImportDoer(name=args.name,
36+
base=args.base,
37+
bran=args.bran,
38+
file=args.file)
39+
return [ed]
40+
41+
42+
class ImportDoer(doing.DoDoer):
43+
44+
def __init__(self, name, base, bran, file):
45+
self.file = file
46+
47+
self.hby = existing.setupHby(name=name, base=base, bran=bran)
48+
49+
doers = [doing.doify(self.exportDo), habbing.HaberyDoer(self.hby)]
50+
51+
super(ImportDoer, self).__init__(doers=doers)
52+
53+
def exportDo(self, tymth, tock=0.0):
54+
""" Export credential from store and any related material
55+
56+
Parameters:
57+
tymth (function): injected function wrapper closure returned by .tymen() of
58+
Tymist instance. Calling tymth() returns associated Tymist .tyme.
59+
tock (float): injected initial tock value
60+
61+
Returns: doifiable Doist compatible generator method
62+
63+
"""
64+
# enter context
65+
self.wind(tymth)
66+
self.tock = tock
67+
_ = (yield self.tock)
68+
69+
with open(self.file, 'rb') as f:
70+
ims = f.read()
71+
parsing.Parser(kvy=self.hby.kvy, rvy=self.hby.rvy, local=False).parse(ims=ims)
72+
self.hby.kvy.processEscrows()
73+
74+
self.exit()
75+
return True

src/keri/app/cli/commands/init.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ def handler(args):
5151
parser.add_argument('--passcode', '-p', help='21 character encryption passcode for keystore (is not saved)',
5252
dest="bran", default=None)
5353
parser.add_argument('--nopasscode', help='create an unencrypted keystore', action='store_true')
54-
parser.add_argument('--aeid', '-a', help='qualified base64 of non-transferable identifier prefix for authentication '
54+
parser.add_argument('--aeid', '-a', help='qualified base64 of non-transferable identifier prefix for authentication '
5555
'and encryption of secrets in keystore', default=None)
5656
parser.add_argument('--seed', '-e', help='qualified base64 private-signing key (seed) for the aeid from which the '
5757
'private decryption key may be derived', default=None)

src/keri/kering.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -342,8 +342,9 @@ def sniff(ims):
342342
Schemage = namedtuple("Schemage", 'tcp http https')
343343
Schemes = Schemage(tcp='tcp', http='http', https='https')
344344

345-
Rolage = namedtuple("Rolage", 'controller witness registrar watcher judge juror peer mailbox agent indexer')
346-
Roles = Rolage(controller='controller', witness='witness', registrar='registrar',
345+
346+
Rolage = namedtuple("Rolage", 'controller witness registrar gateway watcher judge juror peer mailbox agent indexer')
347+
Roles = Rolage(controller='controller', witness='witness', registrar='registrar', gateway="gateway",
347348
watcher='watcher', judge='judge', juror='juror', peer='peer', mailbox="mailbox", agent="agent", indexer="indexer")
348349

349350

tests/peer/test_exchanging.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
tests.peer.test_exchanging module
44
55
"""
6+
import json
7+
68
import pysodium
79
import pytest
810

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

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

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

0 commit comments

Comments
 (0)