keri 1.2.0.dev4__tar.gz → 1.2.0.dev6__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {keri-1.2.0.dev4/src/keri.egg-info → keri-1.2.0.dev6}/PKG-INFO +1 -1
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/setup.py +1 -1
- keri-1.2.0.dev6/src/keri/__init__.py +5 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/agenting.py +6 -7
- keri-1.2.0.dev6/src/keri/app/cli/commands/aid.py +58 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/delegate/confirm.py +25 -3
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/delegate/request.py +1 -1
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/incept.py +2 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/ipex/grant.py +1 -1
- keri-1.2.0.dev6/src/keri/app/cli/commands/mailbox/add.py +135 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/multisig/join.py +1 -1
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/multisig/notice.py +2 -2
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/oobi/generate.py +13 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/rotate.py +14 -3
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/status.py +1 -1
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/vc/create.py +1 -1
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/vc/registry/incept.py +1 -1
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/witness/authenticate.py +22 -9
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/common/incepting.py +2 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/delegating.py +5 -3
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/grouping.py +3 -3
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/habbing.py +10 -10
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/httping.py +3 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/indirecting.py +1 -1
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/notifying.py +1 -1
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/storing.py +65 -60
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/core/coring.py +6 -2
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/core/counting.py +3 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/core/eventing.py +1 -19
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/core/parsing.py +27 -14
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/core/serdering.py +2 -2
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/db/basing.py +2 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/peer/exchanging.py +53 -14
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/vdr/credentialing.py +4 -4
- {keri-1.2.0.dev4 → keri-1.2.0.dev6/src/keri.egg-info}/PKG-INFO +1 -1
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri.egg-info/SOURCES.txt +2 -0
- keri-1.2.0.dev4/src/keri/__init__.py +0 -5
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/LICENSE +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/README.md +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/setup.cfg +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/__init__.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/apping.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/challenging.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/__init__.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/__init__.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/challenge/__init__.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/challenge/generate.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/challenge/respond.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/challenge/verify.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/clean.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/contacts/__init__.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/contacts/list.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/decrypt.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/delegate/__init__.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/did/__init__.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/did/generate.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/ends/__init__.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/ends/add.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/ends/export.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/ends/list.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/escrow.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/export.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/init.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/interact.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/ipex/__init__.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/ipex/admit.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/ipex/agree.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/ipex/apply.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/ipex/join.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/ipex/list.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/ipex/offer.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/ipex/spurn.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/kevers.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/list.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/local/__init__.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/local/watch.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/mailbox/__init__.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/mailbox/debug.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/mailbox/update.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/migrate/__init__.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/migrate/list.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/migrate/run.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/migrate/show.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/migrate.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/multisig/__init__.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/multisig/continue.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/multisig/demo.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/multisig/incept.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/multisig/interact.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/multisig/rotate.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/multisig/shell.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/multisig/update.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/nonce.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/oobi/__init__.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/oobi/clean.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/oobi/resolve.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/passcode/__init__.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/passcode/generate.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/passcode/remove.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/passcode/set.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/query.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/rename.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/rollback.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/saidify.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/salt.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/sign.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/ssh/__init__.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/ssh/export.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/time.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/vc/__init__.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/vc/export.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/vc/list.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/vc/registry/__init__.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/vc/registry/list.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/vc/registry/status.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/vc/revoke.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/verify.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/version.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/watcher/__init__.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/watcher/add.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/witness/__init__.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/witness/demo.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/witness/start.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/witness/submit.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/common/__init__.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/common/config.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/common/displaying.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/common/existing.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/common/rotating.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/common/terming.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/kli.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/configing.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/connecting.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/directing.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/forwarding.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/keeping.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/oobiing.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/querying.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/signaling.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/signing.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/specing.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/core/__init__.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/core/indexing.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/core/routing.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/core/scheming.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/core/signing.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/core/streaming.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/core/structing.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/db/__init__.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/db/dbing.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/db/escrowing.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/db/koming.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/db/migrations/__init__.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/db/migrations/rekey_habs.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/db/subing.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/demo/__init__.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/demo/demo_bob.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/demo/demo_eve.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/demo/demo_kev.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/demo/demo_sam.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/demo/demoing.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/end/__init__.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/end/ending.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/end/priming.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/help/__init__.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/help/helping.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/kering.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/peer/__init__.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/vc/__init__.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/vc/protocoling.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/vc/proving.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/vc/walleting.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/vdr/__init__.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/vdr/eventing.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/vdr/verifying.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/vdr/viring.py +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri.egg-info/dependency_links.txt +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri.egg-info/entry_points.txt +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri.egg-info/not-zip-safe +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri.egg-info/requires.txt +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri.egg-info/top_level.txt +0 -0
- {keri-1.2.0.dev4 → keri-1.2.0.dev6}/tests/test_kering.py +0 -0
|
@@ -37,7 +37,7 @@ from os.path import splitext
|
|
|
37
37
|
from setuptools import find_packages, setup
|
|
38
38
|
setup(
|
|
39
39
|
name='keri',
|
|
40
|
-
version='1.2.0-
|
|
40
|
+
version='1.2.0-dev6', # also change in src/keri/__init__.py
|
|
41
41
|
license='Apache Software License 2.0',
|
|
42
42
|
description='Key Event Receipt Infrastructure',
|
|
43
43
|
long_description="KERI Decentralized Key Management Infrastructure",
|
|
@@ -227,8 +227,9 @@ class Receiptor(doing.DoDoer):
|
|
|
227
227
|
msg = self.msgs.popleft()
|
|
228
228
|
pre = msg["pre"]
|
|
229
229
|
sn = msg["sn"] if "sn" in msg else None
|
|
230
|
+
auths = msg["auths"] if "auths" in msg else None
|
|
230
231
|
|
|
231
|
-
yield from self.receipt(pre, sn)
|
|
232
|
+
yield from self.receipt(pre, sn, auths)
|
|
232
233
|
self.cues.push(msg)
|
|
233
234
|
|
|
234
235
|
yield self.tock
|
|
@@ -616,12 +617,10 @@ class WitnessPublisher(doing.DoDoer):
|
|
|
616
617
|
|
|
617
618
|
_ = (yield self.tock)
|
|
618
619
|
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
count += len(witer.sent)
|
|
624
|
-
_ = (yield self.tock)
|
|
620
|
+
while witers:
|
|
621
|
+
witer = witers.pop()
|
|
622
|
+
while not witer.idle:
|
|
623
|
+
_ = (yield self.tock)
|
|
625
624
|
|
|
626
625
|
self.remove(witers)
|
|
627
626
|
self.cues.push(evt)
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
|
2
|
+
"""
|
|
3
|
+
KERI
|
|
4
|
+
keri.kli.commands module
|
|
5
|
+
|
|
6
|
+
"""
|
|
7
|
+
import argparse
|
|
8
|
+
|
|
9
|
+
from hio import help
|
|
10
|
+
from hio.base import doing
|
|
11
|
+
|
|
12
|
+
from keri.app.cli.common import existing
|
|
13
|
+
from keri.kering import ConfigurationError
|
|
14
|
+
|
|
15
|
+
logger = help.ogler.getLogger()
|
|
16
|
+
|
|
17
|
+
parser = argparse.ArgumentParser(description='Print the AID for a given alias')
|
|
18
|
+
parser.set_defaults(handler=lambda args: handler(args),
|
|
19
|
+
transferable=True)
|
|
20
|
+
parser.add_argument('--name', '-n', help='keystore name and file location of KERI keystore', required=True)
|
|
21
|
+
parser.add_argument('--base', '-b', help='additional optional prefix to file location of KERI keystore',
|
|
22
|
+
required=False, default="")
|
|
23
|
+
parser.add_argument('--alias', '-a', help='human readable alias for the new identifier prefix', default=None,
|
|
24
|
+
required=True)
|
|
25
|
+
parser.add_argument('--passcode', '-p', help='21 character encryption passcode for keystore (is not saved)',
|
|
26
|
+
dest="bran", default=None) # passcode => bran
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def handler(args):
|
|
30
|
+
kwa = dict(args=args)
|
|
31
|
+
return [doing.doify(status, **kwa)]
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def status(tymth, tock=0.0, **opts):
|
|
35
|
+
""" Command line status handler
|
|
36
|
+
|
|
37
|
+
"""
|
|
38
|
+
_ = (yield tock)
|
|
39
|
+
args = opts["args"]
|
|
40
|
+
name = args.name
|
|
41
|
+
alias = args.alias
|
|
42
|
+
base = args.base
|
|
43
|
+
bran = args.bran
|
|
44
|
+
|
|
45
|
+
try:
|
|
46
|
+
with existing.existingHby(name=name, base=base, bran=bran) as hby:
|
|
47
|
+
if alias is None:
|
|
48
|
+
alias = existing.aliasInput(hby)
|
|
49
|
+
|
|
50
|
+
hab = hby.habByName(alias)
|
|
51
|
+
if hab is None:
|
|
52
|
+
print(f"{alias} is not a valid alias for an identifier")
|
|
53
|
+
|
|
54
|
+
print(hab.pre)
|
|
55
|
+
|
|
56
|
+
except ConfigurationError as e:
|
|
57
|
+
print(f"identifier prefix for {name} does not exist, incept must be run first", )
|
|
58
|
+
return -1
|
|
@@ -16,6 +16,7 @@ from keri.app.habbing import GroupHab
|
|
|
16
16
|
from keri import core
|
|
17
17
|
from keri.core import coring, serdering
|
|
18
18
|
from keri.db import dbing
|
|
19
|
+
from keri.help import helping
|
|
19
20
|
from keri.peer import exchanging
|
|
20
21
|
|
|
21
22
|
logger = help.ogler.getLogger()
|
|
@@ -32,6 +33,10 @@ parser.add_argument('--passcode', '-p', help='21 character encryption passcode f
|
|
|
32
33
|
parser.add_argument("--interact", "-i", help="anchor the delegation approval in an interaction event. "
|
|
33
34
|
"Default is to use a rotation event.", action="store_true")
|
|
34
35
|
parser.add_argument("--auto", "-Y", help="auto approve any delegation request non-interactively", action="store_true")
|
|
36
|
+
parser.add_argument("--authenticate", '-z', help="Prompt the controller for authentication codes for each witness",
|
|
37
|
+
action='store_true')
|
|
38
|
+
parser.add_argument('--code', help='<Witness AID>:<code> formatted witness auth codes. Can appear multiple times',
|
|
39
|
+
default=[], action="append", required=False)
|
|
35
40
|
|
|
36
41
|
|
|
37
42
|
def confirm(args):
|
|
@@ -47,15 +52,18 @@ def confirm(args):
|
|
|
47
52
|
alias = args.alias
|
|
48
53
|
interact = args.interact
|
|
49
54
|
auto = args.auto
|
|
55
|
+
authenticate = args.authenticate
|
|
56
|
+
codes = args.code
|
|
50
57
|
|
|
51
|
-
confirmDoer = ConfirmDoer(name=name, base=base, alias=alias, bran=bran, interact=interact, auto=auto
|
|
58
|
+
confirmDoer = ConfirmDoer(name=name, base=base, alias=alias, bran=bran, interact=interact, auto=auto,
|
|
59
|
+
authenticate=authenticate, codes=codes)
|
|
52
60
|
|
|
53
61
|
doers = [confirmDoer]
|
|
54
62
|
return doers
|
|
55
63
|
|
|
56
64
|
|
|
57
65
|
class ConfirmDoer(doing.DoDoer):
|
|
58
|
-
def __init__(self, name, base, alias, bran, interact=False, auto=False):
|
|
66
|
+
def __init__(self, name, base, alias, bran, interact=False, auto=False, authenticate=False, codes=None):
|
|
59
67
|
hby = existing.setupHby(name=name, base=base, bran=bran)
|
|
60
68
|
self.hbyDoer = habbing.HaberyDoer(habery=hby) # setup doer
|
|
61
69
|
self.witq = agenting.WitnessInquisitor(hby=hby)
|
|
@@ -63,6 +71,8 @@ class ConfirmDoer(doing.DoDoer):
|
|
|
63
71
|
self.counselor = grouping.Counselor(hby=hby)
|
|
64
72
|
self.notifier = notifying.Notifier(hby=hby)
|
|
65
73
|
self.mux = grouping.Multiplexor(hby=hby, notifier=self.notifier)
|
|
74
|
+
self.authenticate = authenticate
|
|
75
|
+
self.codes = codes if codes is not None else []
|
|
66
76
|
|
|
67
77
|
exc = exchanging.Exchanger(hby=hby, handlers=[])
|
|
68
78
|
delegating.loadHandlers(hby=hby, exc=exc, notifier=self.notifier)
|
|
@@ -173,7 +183,19 @@ class ConfirmDoer(doing.DoDoer):
|
|
|
173
183
|
else:
|
|
174
184
|
hab.rotate(data=[anchor])
|
|
175
185
|
|
|
176
|
-
|
|
186
|
+
auths = {}
|
|
187
|
+
if self.authenticate:
|
|
188
|
+
for arg in self.codes:
|
|
189
|
+
(wit, code) = arg.split(":")
|
|
190
|
+
auths[wit] = f"{code}#{helping.nowIso8601()}"
|
|
191
|
+
|
|
192
|
+
for wit in hab.kever.wits:
|
|
193
|
+
if wit in auths:
|
|
194
|
+
continue
|
|
195
|
+
code = input(f"Entire code for {wit}: ")
|
|
196
|
+
auths[wit] = f"{code}#{helping.nowIso8601()}"
|
|
197
|
+
|
|
198
|
+
witDoer = agenting.WitnessReceiptor(hby=self.hby, auths=auths)
|
|
177
199
|
self.extend(doers=[witDoer])
|
|
178
200
|
self.toRemove.append(witDoer)
|
|
179
201
|
yield self.tock
|
|
@@ -96,7 +96,7 @@ class RequestDoer(doing.DoDoer):
|
|
|
96
96
|
exn, atc = delegating.delegateRequestExn(hab.mhab, delpre=delpre, evt=bytes(evt), aids=hab.smids)
|
|
97
97
|
|
|
98
98
|
# delegate AID ICP and exn of delegation request EXN
|
|
99
|
-
srdr = serdering.SerderKERI(raw=evt)
|
|
99
|
+
srdr = serdering.SerderKERI(raw=evt)
|
|
100
100
|
del evt[:srdr.size]
|
|
101
101
|
self.postman.send(src=phab.pre, dest=delpre, topic="delegate", serder=srdr, attachment=evt)
|
|
102
102
|
self.postman.send(src=phab.pre, dest=hab.kever.delpre, topic="delegate", serder=exn, attachment=atc)
|
|
@@ -108,7 +108,7 @@ class GrantDoer(doing.DoDoer):
|
|
|
108
108
|
|
|
109
109
|
iss = self.rgy.reger.cloneTvtAt(creder.said)
|
|
110
110
|
|
|
111
|
-
iserder = serdering.SerderKERI(raw=bytes(iss))
|
|
111
|
+
iserder = serdering.SerderKERI(raw=bytes(iss))
|
|
112
112
|
seqner = coring.Seqner(sn=iserder.sn)
|
|
113
113
|
|
|
114
114
|
serder = self.hby.db.findAnchoringSealEvent(creder.sad['i'],
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
|
2
|
+
"""
|
|
3
|
+
KERI
|
|
4
|
+
keri.kli.commands module
|
|
5
|
+
|
|
6
|
+
"""
|
|
7
|
+
import argparse
|
|
8
|
+
|
|
9
|
+
from hio import help
|
|
10
|
+
from hio.base import doing
|
|
11
|
+
from hio.help import Hict
|
|
12
|
+
|
|
13
|
+
from keri import kering
|
|
14
|
+
from keri.app import connecting, habbing, forwarding
|
|
15
|
+
from keri.app.agenting import httpClient, WitnessPublisher
|
|
16
|
+
from keri.app.cli.common import existing
|
|
17
|
+
from keri.core import serdering
|
|
18
|
+
|
|
19
|
+
logger = help.ogler.getLogger()
|
|
20
|
+
|
|
21
|
+
parser = argparse.ArgumentParser(description='Add mailbox role')
|
|
22
|
+
parser.set_defaults(handler=lambda args: add(args),
|
|
23
|
+
transferable=True)
|
|
24
|
+
parser.add_argument('--name', '-n', help='keystore name and file location of KERI keystore', required=True)
|
|
25
|
+
parser.add_argument('--alias', '-a', help='human readable alias for the identifier to whom the credential was issued',
|
|
26
|
+
required=True)
|
|
27
|
+
parser.add_argument('--base', '-b', help='additional optional prefix to file location of KERI keystore',
|
|
28
|
+
required=False, default="")
|
|
29
|
+
parser.add_argument('--passcode', '-p', help='22 character encryption passcode for keystore (is not saved)',
|
|
30
|
+
dest="bran", default=None) # passcode => bran
|
|
31
|
+
parser.add_argument("--mailbox", '-w', help="the mailbox AID or alias to add", required=True)
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def add(args):
|
|
35
|
+
""" Command line handler for adding an aid to a watcher's list of AIds to watch
|
|
36
|
+
|
|
37
|
+
Parameters:
|
|
38
|
+
args(Namespace): parsed command line arguments
|
|
39
|
+
|
|
40
|
+
"""
|
|
41
|
+
|
|
42
|
+
ed = AddDoer(name=args.name,
|
|
43
|
+
alias=args.alias,
|
|
44
|
+
base=args.base,
|
|
45
|
+
bran=args.bran,
|
|
46
|
+
mailbox=args.mailbox)
|
|
47
|
+
return [ed]
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
class AddDoer(doing.DoDoer):
|
|
51
|
+
|
|
52
|
+
def __init__(self, name, alias, base, bran, mailbox):
|
|
53
|
+
self.hby = existing.setupHby(name=name, base=base, bran=bran)
|
|
54
|
+
self.hab = self.hby.habByName(alias)
|
|
55
|
+
self.org = connecting.Organizer(hby=self.hby)
|
|
56
|
+
self.witpub = WitnessPublisher(hby=self.hby)
|
|
57
|
+
|
|
58
|
+
if mailbox in self.hby.kevers:
|
|
59
|
+
mbx = mailbox
|
|
60
|
+
else:
|
|
61
|
+
mbx = self.org.find("alias", mailbox)
|
|
62
|
+
if len(mbx) != 1:
|
|
63
|
+
raise ValueError(f"invalid mailbox {mailbox}")
|
|
64
|
+
mbx = mbx[0]['id']
|
|
65
|
+
|
|
66
|
+
if not mbx:
|
|
67
|
+
raise ValueError(f"unknown mailbox {mailbox}")
|
|
68
|
+
|
|
69
|
+
self.mailbox = mbx
|
|
70
|
+
|
|
71
|
+
doers = [doing.doify(self.addDo), self.witpub]
|
|
72
|
+
|
|
73
|
+
super(AddDoer, self).__init__(doers=doers)
|
|
74
|
+
|
|
75
|
+
def addDo(self, tymth, tock=0.0):
|
|
76
|
+
""" Grant credential by creating /ipex/grant exn message
|
|
77
|
+
|
|
78
|
+
Parameters:
|
|
79
|
+
tymth (function): injected function wrapper closure returned by .tymen() of
|
|
80
|
+
Tymist instance. Calling tymth() returns associated Tymist .tyme.
|
|
81
|
+
tock (float): injected initial tock value
|
|
82
|
+
|
|
83
|
+
Returns: doifiable Doist compatible generator method
|
|
84
|
+
|
|
85
|
+
"""
|
|
86
|
+
# enter context
|
|
87
|
+
self.wind(tymth)
|
|
88
|
+
self.tock = tock
|
|
89
|
+
_ = (yield self.tock)
|
|
90
|
+
|
|
91
|
+
if isinstance(self.hab, habbing.GroupHab):
|
|
92
|
+
raise ValueError("watchers for multisig AIDs not currently supported")
|
|
93
|
+
|
|
94
|
+
kel = self.hab.replay()
|
|
95
|
+
data = dict(cid=self.hab.pre,
|
|
96
|
+
role=kering.Roles.mailbox,
|
|
97
|
+
eid=self.mailbox)
|
|
98
|
+
|
|
99
|
+
route = "/end/role/add"
|
|
100
|
+
msg = self.hab.reply(route=route, data=data)
|
|
101
|
+
self.hab.psr.parseOne(ims=(bytes(msg))) # make copy to preserve
|
|
102
|
+
|
|
103
|
+
fargs = dict([("kel", kel.decode("utf-8")),
|
|
104
|
+
("rpy", msg.decode("utf-8"))])
|
|
105
|
+
|
|
106
|
+
headers = (Hict([
|
|
107
|
+
("Content-Type", "multipart/form-data"),
|
|
108
|
+
]))
|
|
109
|
+
|
|
110
|
+
client, clientDoer = httpClient(self.hab, self.mailbox)
|
|
111
|
+
self.extend([clientDoer])
|
|
112
|
+
|
|
113
|
+
client.request(
|
|
114
|
+
method="POST",
|
|
115
|
+
path=f"{client.requester.path}/mailboxes",
|
|
116
|
+
headers=headers,
|
|
117
|
+
fargs=fargs
|
|
118
|
+
)
|
|
119
|
+
while not client.responses:
|
|
120
|
+
yield self.tock
|
|
121
|
+
|
|
122
|
+
rep = client.respond()
|
|
123
|
+
if rep.status == 200:
|
|
124
|
+
msg = self.hab.replyEndRole(cid=self.hab.pre, role=kering.Roles.mailbox)
|
|
125
|
+
self.witpub.msgs.append(dict(pre=self.hab.pre, msg=bytes(msg)))
|
|
126
|
+
|
|
127
|
+
while not self.witpub.cues:
|
|
128
|
+
yield self.tock
|
|
129
|
+
|
|
130
|
+
print(f"Mailbox {self.mailbox} added for {self.hab.name}")
|
|
131
|
+
|
|
132
|
+
else:
|
|
133
|
+
print(rep.status, rep.data)
|
|
134
|
+
|
|
135
|
+
self.remove([clientDoer, self.witpub])
|
|
@@ -25,7 +25,7 @@ parser.set_defaults(handler=lambda args: join(args))
|
|
|
25
25
|
parser.add_argument('--name', '-n', help='keystore name and file location of KERI keystore', required=True)
|
|
26
26
|
parser.add_argument('--base', '-b', help='additional optional prefix to file location of KERI keystore',
|
|
27
27
|
required=False, default="")
|
|
28
|
-
parser.add_argument('--group', '-
|
|
28
|
+
parser.add_argument('--group', '-g', help='human-readable name for the multisig group identifier prefix', required=False, default=None)
|
|
29
29
|
parser.add_argument('--passcode', '-p', help='21 character encryption passcode for keystore (is not saved)',
|
|
30
30
|
dest="bran", default=None) # passcode => bran
|
|
31
31
|
parser.add_argument("--auto", "-Y", help="auto approve any delegation request non-interactively", action="store_true")
|
|
@@ -11,8 +11,8 @@ from hio.base import doing
|
|
|
11
11
|
|
|
12
12
|
from keri.app import habbing, forwarding, grouping
|
|
13
13
|
from keri.app.cli.common import existing
|
|
14
|
-
from keri.core import coring
|
|
15
14
|
from keri.core.coring import Ilks
|
|
15
|
+
from keri.core import serdering
|
|
16
16
|
|
|
17
17
|
logger = help.ogler.getLogger()
|
|
18
18
|
|
|
@@ -86,7 +86,7 @@ class NoticeDoer(doing.DoDoer):
|
|
|
86
86
|
(smids, rmids) = hab.members()
|
|
87
87
|
serder = hab.kever.serder
|
|
88
88
|
rot = hab.makeOwnEvent(sn=hab.kever.sn)
|
|
89
|
-
eserder =
|
|
89
|
+
eserder = serdering.SerderKERI(raw=rot)
|
|
90
90
|
del rot[:eserder.size]
|
|
91
91
|
|
|
92
92
|
ilk = serder.ked['t']
|
|
@@ -81,3 +81,16 @@ def generate(tymth, tock=0.0, **opts):
|
|
|
81
81
|
url = urls[kering.Schemes.http] if kering.Schemes.http in urls else urls[kering.Schemes.https]
|
|
82
82
|
up = urlparse(url)
|
|
83
83
|
print(f"{up.scheme}://{up.hostname}:{up.port}/oobi/{hab.pre}/controller")
|
|
84
|
+
elif role in (kering.Roles.mailbox,):
|
|
85
|
+
for (_, _, eid), end in hab.db.ends.getItemIter(keys=(hab.pre, kering.Roles.mailbox, )):
|
|
86
|
+
if not (end.allowed and end.enabled is not False):
|
|
87
|
+
continue
|
|
88
|
+
|
|
89
|
+
urls = hab.fetchUrls(eid=eid, scheme=kering.Schemes.http) or hab.fetchUrls(eid=hab.pre,
|
|
90
|
+
scheme=kering.Schemes.https)
|
|
91
|
+
if not urls:
|
|
92
|
+
print(f"{alias} identifier {hab.pre} does not have any mailbox endpoints")
|
|
93
|
+
return
|
|
94
|
+
url = urls[kering.Schemes.http] if kering.Schemes.http in urls else urls[kering.Schemes.https]
|
|
95
|
+
up = urlparse(url)
|
|
96
|
+
print(f"{up.scheme}://{up.hostname}:{up.port}/oobi/{hab.pre}/mailbox/{eid}")
|
|
@@ -29,6 +29,9 @@ parser.add_argument("--receipt-endpoint", help="Attempt to connect to witness re
|
|
|
29
29
|
dest="endpoint", action='store_true')
|
|
30
30
|
parser.add_argument("--authenticate", '-z', help="Prompt the controller for authentication codes for each witness",
|
|
31
31
|
action='store_true')
|
|
32
|
+
parser.add_argument('--code', help='<Witness AID>:<code> formatted witness auth codes. Can appear multiple times',
|
|
33
|
+
default=[], action="append", required=False)
|
|
34
|
+
|
|
32
35
|
parser.add_argument("--proxy", help="alias for delegation communication proxy", default="")
|
|
33
36
|
|
|
34
37
|
rotating.addRotationArgs(parser)
|
|
@@ -63,7 +66,7 @@ def rotate(args):
|
|
|
63
66
|
cuts=opts.witsCut, adds=opts.witsAdd,
|
|
64
67
|
isith=opts.isith, nsith=opts.nsith,
|
|
65
68
|
count=opts.ncount, toad=opts.toad,
|
|
66
|
-
data=opts.data, proxy=args.proxy, authenticate=args.authenticate)
|
|
69
|
+
data=opts.data, proxy=args.proxy, authenticate=args.authenticate, codes=args.code)
|
|
67
70
|
|
|
68
71
|
doers = [rotDoer]
|
|
69
72
|
|
|
@@ -118,7 +121,8 @@ class RotateDoer(doing.DoDoer):
|
|
|
118
121
|
"""
|
|
119
122
|
|
|
120
123
|
def __init__(self, name, base, bran, alias, endpoint=False, isith=None, nsith=None, count=None,
|
|
121
|
-
toad=None, wits=None, cuts=None, adds=None, data: list = None, proxy=None, authenticate=False
|
|
124
|
+
toad=None, wits=None, cuts=None, adds=None, data: list = None, proxy=None, authenticate=False,
|
|
125
|
+
codes=None):
|
|
122
126
|
"""
|
|
123
127
|
Returns DoDoer with all registered Doers needed to perform rotation.
|
|
124
128
|
|
|
@@ -144,6 +148,7 @@ class RotateDoer(doing.DoDoer):
|
|
|
144
148
|
self.endpoint = endpoint
|
|
145
149
|
self.proxy = proxy
|
|
146
150
|
self.authenticate = authenticate
|
|
151
|
+
self.codes = codes if codes is not None else []
|
|
147
152
|
|
|
148
153
|
self.wits = wits if wits is not None else []
|
|
149
154
|
self.cuts = cuts if cuts is not None else []
|
|
@@ -193,12 +198,18 @@ class RotateDoer(doing.DoDoer):
|
|
|
193
198
|
|
|
194
199
|
auths = {}
|
|
195
200
|
if self.authenticate:
|
|
201
|
+
for arg in self.codes:
|
|
202
|
+
(wit, code) = arg.split(":")
|
|
203
|
+
auths[wit] = f"{code}#{helping.nowIso8601()}"
|
|
204
|
+
|
|
196
205
|
for wit in hab.kever.wits:
|
|
206
|
+
if wit in auths:
|
|
207
|
+
continue
|
|
197
208
|
code = input(f"Entire code for {wit}: ")
|
|
198
209
|
auths[wit] = f"{code}#{helping.nowIso8601()}"
|
|
199
210
|
|
|
200
211
|
if hab.kever.delpre:
|
|
201
|
-
self.swain.delegation(pre=hab.pre, sn=hab.kever.sn)
|
|
212
|
+
self.swain.delegation(pre=hab.pre, sn=hab.kever.sn, auths=auths)
|
|
202
213
|
print("Waiting for delegation approval...")
|
|
203
214
|
while not self.swain.complete(hab.kever.prefixer, coring.Seqner(sn=hab.kever.sn)):
|
|
204
215
|
yield self.tock
|
|
@@ -10,7 +10,7 @@ from hio import help
|
|
|
10
10
|
from hio.base import doing
|
|
11
11
|
|
|
12
12
|
from keri.app.cli.common import displaying, existing
|
|
13
|
-
from keri.core import
|
|
13
|
+
from keri.core import serdering
|
|
14
14
|
from keri.kering import ConfigurationError
|
|
15
15
|
|
|
16
16
|
logger = help.ogler.getLogger()
|
|
@@ -220,7 +220,7 @@ class CredentialIssuer(doing.DoDoer):
|
|
|
220
220
|
else:
|
|
221
221
|
anc = hab.interact(data=[rseal])
|
|
222
222
|
|
|
223
|
-
aserder = serdering.SerderKERI(raw=anc)
|
|
223
|
+
aserder = serdering.SerderKERI(raw=anc)
|
|
224
224
|
self.credentialer.issue(self.creder, iserder)
|
|
225
225
|
self.registrar.issue(self.creder, iserder, aserder)
|
|
226
226
|
|
|
@@ -132,7 +132,7 @@ class RegistryInceptor(doing.DoDoer):
|
|
|
132
132
|
else:
|
|
133
133
|
anc = hab.interact(data=[rseal])
|
|
134
134
|
|
|
135
|
-
aserder = serdering.SerderKERI(raw=bytes(anc))
|
|
135
|
+
aserder = serdering.SerderKERI(raw=bytes(anc))
|
|
136
136
|
self.registrar.incept(iserder=registry.vcp, anc=aserder)
|
|
137
137
|
|
|
138
138
|
if isinstance(hab, GroupHab):
|
|
@@ -16,7 +16,6 @@ from hio.help import Hict
|
|
|
16
16
|
from keri.app import httping, connecting
|
|
17
17
|
from keri.app.agenting import httpClient
|
|
18
18
|
from keri.app.cli.common import existing
|
|
19
|
-
from keri.app.httping import CESR_CONTENT_TYPE
|
|
20
19
|
from keri.core import coring
|
|
21
20
|
|
|
22
21
|
logger = help.ogler.getLogger()
|
|
@@ -32,6 +31,8 @@ parser.add_argument('--base', '-b', help='additional optional prefix to file loc
|
|
|
32
31
|
parser.add_argument('--passcode', '-p', help='22 character encryption passcode for keystore (is not saved)',
|
|
33
32
|
dest="bran", default=None) # passcode => bran
|
|
34
33
|
parser.add_argument("--witness", '-w', help="the witness AID or alias to authenticate against", required=True)
|
|
34
|
+
parser.add_argument("--url-only", '-u', dest="url", help="display only the URL (no QR Code).", required=False,
|
|
35
|
+
action="store_true")
|
|
35
36
|
|
|
36
37
|
|
|
37
38
|
def auth(args):
|
|
@@ -46,16 +47,18 @@ def auth(args):
|
|
|
46
47
|
alias=args.alias,
|
|
47
48
|
base=args.base,
|
|
48
49
|
bran=args.bran,
|
|
49
|
-
witness=args.witness
|
|
50
|
+
witness=args.witness,
|
|
51
|
+
urlOnly=args.url)
|
|
50
52
|
return [ed]
|
|
51
53
|
|
|
52
54
|
|
|
53
55
|
class AuthDoer(doing.DoDoer):
|
|
54
56
|
|
|
55
|
-
def __init__(self, name, alias, base, bran, witness):
|
|
57
|
+
def __init__(self, name, alias, base, bran, witness, urlOnly):
|
|
56
58
|
self.hby = existing.setupHby(name=name, base=base, bran=bran)
|
|
57
59
|
self.hab = self.hby.habByName(alias)
|
|
58
60
|
self.org = connecting.Organizer(hby=self.hby)
|
|
61
|
+
self.urlOnly = urlOnly
|
|
59
62
|
|
|
60
63
|
if witness in self.hby.kevers:
|
|
61
64
|
wit = witness
|
|
@@ -94,9 +97,17 @@ class AuthDoer(doing.DoDoer):
|
|
|
94
97
|
for msg in self.hab.db.clonePreIter(pre=self.hab.pre):
|
|
95
98
|
body.extend(msg)
|
|
96
99
|
|
|
100
|
+
fargs = dict([("kel", body.decode("utf-8"))])
|
|
101
|
+
|
|
102
|
+
if self.hab.kever.delegated:
|
|
103
|
+
delkel = bytearray()
|
|
104
|
+
for msg in self.hab.db.clonePreIter(self.hab.kever.delpre):
|
|
105
|
+
delkel.extend(msg)
|
|
106
|
+
|
|
107
|
+
fargs['delkel'] = delkel.decode("utf-8")
|
|
108
|
+
|
|
97
109
|
headers = (Hict([
|
|
98
|
-
("Content-Type", "
|
|
99
|
-
("Content-Length", len(body)),
|
|
110
|
+
("Content-Type", "multipart/form-data")
|
|
100
111
|
]))
|
|
101
112
|
|
|
102
113
|
client, clientDoer = httpClient(self.hab, self.witness)
|
|
@@ -106,7 +117,7 @@ class AuthDoer(doing.DoDoer):
|
|
|
106
117
|
method="POST",
|
|
107
118
|
path=f"{client.requester.path}/aids",
|
|
108
119
|
headers=headers,
|
|
109
|
-
|
|
120
|
+
fargs=fargs
|
|
110
121
|
)
|
|
111
122
|
while not client.responses:
|
|
112
123
|
yield self.tock
|
|
@@ -120,10 +131,12 @@ class AuthDoer(doing.DoDoer):
|
|
|
120
131
|
d = coring.Matter(qb64=self.hab.decrypt(m.raw))
|
|
121
132
|
otpurl = f"otpauth://totp/KERIpy:{self.witness}?secret={d.raw.decode('utf-8')}&issuer=KERIpy"
|
|
122
133
|
|
|
123
|
-
|
|
124
|
-
|
|
134
|
+
if not self.urlOnly:
|
|
135
|
+
qr = qrcode.QRCode()
|
|
136
|
+
qr.add_data(otpurl)
|
|
137
|
+
|
|
138
|
+
qr.print_ascii()
|
|
125
139
|
|
|
126
|
-
qr.print_ascii()
|
|
127
140
|
print(otpurl)
|
|
128
141
|
|
|
129
142
|
else:
|
|
@@ -28,4 +28,6 @@ def addInceptingArgs(parser):
|
|
|
28
28
|
help='only allow establishment events in KEL for this prefix')
|
|
29
29
|
parser.add_argument('--data', '-d', default=None, required=False, action="store",
|
|
30
30
|
help='Anchor data, \'@\' allowed',)
|
|
31
|
+
parser.add_argument('--delpre', '-di', default=None, required=False, action="store",
|
|
32
|
+
help='Delegator AID for delegated identfiers',)
|
|
31
33
|
|
|
@@ -28,7 +28,7 @@ class Anchorer(doing.DoDoer):
|
|
|
28
28
|
|
|
29
29
|
"""
|
|
30
30
|
|
|
31
|
-
def __init__(self, hby, proxy=None, **kwa):
|
|
31
|
+
def __init__(self, hby, proxy=None, auths=None, **kwa):
|
|
32
32
|
"""
|
|
33
33
|
For the current event, gather the current set of witnesses, send the event,
|
|
34
34
|
gather all receipts and send them to all other witnesses
|
|
@@ -45,11 +45,12 @@ class Anchorer(doing.DoDoer):
|
|
|
45
45
|
self.witq = agenting.WitnessInquisitor(hby=hby)
|
|
46
46
|
self.witDoer = agenting.Receiptor(hby=self.hby)
|
|
47
47
|
self.proxy = proxy
|
|
48
|
+
self.auths = auths
|
|
48
49
|
|
|
49
50
|
super(Anchorer, self).__init__(doers=[self.witq, self.witDoer, self.postman, doing.doify(self.escrowDo)],
|
|
50
51
|
**kwa)
|
|
51
52
|
|
|
52
|
-
def delegation(self, pre, sn=None, proxy=None):
|
|
53
|
+
def delegation(self, pre, sn=None, proxy=None, auths=None):
|
|
53
54
|
if pre not in self.hby.habs:
|
|
54
55
|
raise kering.ValidationError(f"{pre} is not a valid local AID for delegation")
|
|
55
56
|
|
|
@@ -63,13 +64,14 @@ class Anchorer(doing.DoDoer):
|
|
|
63
64
|
raise kering.ValidationError(f"delegator {delpre} not found, unable to process delegation")
|
|
64
65
|
|
|
65
66
|
sn = sn if sn is not None else hab.kever.sner.num
|
|
67
|
+
self.auths = auths if auths is not None else self.auths
|
|
66
68
|
|
|
67
69
|
# load the event and signatures
|
|
68
70
|
evt = hab.makeOwnEvent(sn=sn)
|
|
69
71
|
|
|
70
72
|
# Send exn message for notification purposes
|
|
71
73
|
srdr = serdering.SerderKERI(raw=evt)
|
|
72
|
-
self.witDoer.msgs.append(dict(pre=pre, sn=srdr.sn))
|
|
74
|
+
self.witDoer.msgs.append(dict(pre=pre, sn=srdr.sn, auths=self.auths))
|
|
73
75
|
self.hby.db.dpwe.pin(keys=(srdr.pre, srdr.said), val=srdr)
|
|
74
76
|
|
|
75
77
|
def complete(self, prefixer, seqner, saider=None):
|
|
@@ -275,7 +275,7 @@ def multisigInceptExn(hab, smids, rmids, icp, delegator=None):
|
|
|
275
275
|
|
|
276
276
|
"""
|
|
277
277
|
rmids = rmids if rmids is not None else smids
|
|
278
|
-
serder = serdering.SerderKERI(raw=icp)
|
|
278
|
+
serder = serdering.SerderKERI(raw=icp)
|
|
279
279
|
data = dict(
|
|
280
280
|
gid=serder.pre,
|
|
281
281
|
smids=smids,
|
|
@@ -585,7 +585,7 @@ class Multiplexor:
|
|
|
585
585
|
events so that any addition signatures can be processed.
|
|
586
586
|
|
|
587
587
|
Parameters:
|
|
588
|
-
serder (
|
|
588
|
+
serder (serdering.SerderKERI): peer-to-peer exn "/multisig" message to coordinate from other participants
|
|
589
589
|
|
|
590
590
|
Returns:
|
|
591
591
|
|
|
@@ -662,7 +662,7 @@ class Multiplexor:
|
|
|
662
662
|
ims.extend(atc)
|
|
663
663
|
|
|
664
664
|
# ... and parse
|
|
665
|
-
self.psr.parse(ims=ims)
|
|
665
|
+
self.psr.parse(ims=ims, local=True)
|
|
666
666
|
|
|
667
667
|
else:
|
|
668
668
|
# Should we prod the user with another submission if we haven't already approved it?
|