Skip to content

Commit a583e89

Browse files
committed
Merge remote-tracking branch 'wot/main'
2 parents b4b9b36 + d343dd7 commit a583e89

17 files changed

+359
-290
lines changed

src/keri/app/agenting.py

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -273,7 +273,7 @@ class WitnessReceiptor(doing.DoDoer):
273273
274274
"""
275275

276-
def __init__(self, hby, msgs=None, cues=None, force=False, **kwa):
276+
def __init__(self, hby, msgs=None, cues=None, force=False, auths=None, **kwa):
277277
"""
278278
For the current event, gather the current set of witnesses, send the event,
279279
gather all receipts and send them to all other witnesses
@@ -289,6 +289,7 @@ def __init__(self, hby, msgs=None, cues=None, force=False, **kwa):
289289
self.force = force
290290
self.msgs = msgs if msgs is not None else decking.Deck()
291291
self.cues = cues if cues is not None else decking.Deck()
292+
self.auths = auths if auths is not None else dict()
292293

293294
super(WitnessReceiptor, self).__init__(doers=[doing.doify(self.receiptDo)], **kwa)
294295

@@ -332,7 +333,8 @@ def receiptDo(self, tymth=None, tock=0.0):
332333

333334
witers = []
334335
for wit in wits:
335-
witer = messenger(hab, wit)
336+
auth = self.auths[wit] if wit in self.auths else None
337+
witer = messenger(hab, wit, auth=auth)
336338
witers.append(witer)
337339
self.extend([witer])
338340

@@ -836,7 +838,7 @@ class HTTPMessenger(doing.DoDoer):
836838
837839
"""
838840

839-
def __init__(self, hab, wit, url, msgs=None, sent=None, doers=None, **kwa):
841+
def __init__(self, hab, wit, url, msgs=None, sent=None, doers=None, auth=None, **kwa):
840842
"""
841843
For the current event, gather the current set of witnesses, send the event,
842844
gather all receipts and send them to all other witnesses
@@ -851,6 +853,7 @@ def __init__(self, hab, wit, url, msgs=None, sent=None, doers=None, **kwa):
851853
self.msgs = msgs if msgs is not None else decking.Deck()
852854
self.sent = sent if sent is not None else decking.Deck()
853855
self.parser = None
856+
self.auth = auth
854857
doers = doers if doers is not None else []
855858
doers.extend([doing.doify(self.msgDo), doing.doify(self.responseDo)])
856859

@@ -881,7 +884,11 @@ def msgDo(self, tymth=None, tock=0.0):
881884
yield self.tock
882885

883886
msg = self.msgs.popleft()
884-
self.posted += httping.streamCESRRequests(client=self.client, dest=self.wit, ims=msg)
887+
headers = dict()
888+
if self.auth is not None:
889+
headers["Authorization"] = self.auth
890+
891+
self.posted += httping.streamCESRRequests(client=self.client, dest=self.wit, ims=msg, headers=headers)
885892
while self.client.requests:
886893
yield self.tock
887894

@@ -983,34 +990,36 @@ def mailbox(hab, cid):
983990
return mbx
984991

985992

986-
def messenger(hab, pre):
993+
def messenger(hab, pre, auth=None):
987994
""" Create a Messenger (tcp or http) based on available endpoints
988995
989996
Parameters:
990997
hab (Habitat): Environment to use to look up witness URLs
991998
pre (str): qb64 identifier prefix of recipient to create a messanger for
999+
auth (str): optional auth code to send with any request for messenger
9921000
9931001
Returns:
9941002
Optional(TcpWitnesser, HTTPMessenger): witnesser for ensuring full reciepts
9951003
"""
9961004
urls = hab.fetchUrls(eid=pre)
997-
return messengerFrom(hab, pre, urls)
1005+
return messengerFrom(hab, pre, urls, auth)
9981006

9991007

1000-
def messengerFrom(hab, pre, urls):
1008+
def messengerFrom(hab, pre, urls, auth=None):
10011009
""" Create a Witnesser (tcp or http) based on provided endpoints
10021010
10031011
Parameters:
10041012
hab (Habitat): Environment to use to look up witness URLs
10051013
pre (str): qb64 identifier prefix of recipient to create a messanger for
10061014
urls (dict): map of schemes to urls of available endpoints
1015+
auth (str): optional auth code to send with any request for messenger
10071016
10081017
Returns:
10091018
Optional(TcpWitnesser, HTTPMessenger): witnesser for ensuring full reciepts
10101019
"""
10111020
if kering.Schemes.http in urls or kering.Schemes.https in urls:
10121021
url = urls[kering.Schemes.http] if kering.Schemes.http in urls else urls[kering.Schemes.https]
1013-
witer = HTTPMessenger(hab=hab, wit=pre, url=url)
1022+
witer = HTTPMessenger(hab=hab, wit=pre, url=url, auth=auth)
10141023
elif kering.Schemes.tcp in urls:
10151024
url = urls[kering.Schemes.tcp]
10161025
witer = TCPMessenger(hab=hab, wit=pre, url=url)

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

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -103,21 +103,22 @@ def interactDo(self, tymth, tock=0.0, **opts):
103103
hab = self.hby.habByName(name=self.alias)
104104
hab.interact(data=self.data)
105105

106-
if self.endpoint or self.authenticate:
106+
auths = {}
107+
if self.authenticate:
108+
for wit in hab.kever.wits:
109+
code = input(f"Entire code for {wit}: ")
110+
auths[wit] = f"{code}#{helping.nowIso8601()}"
111+
112+
if self.endpoint:
107113
receiptor = agenting.Receiptor(hby=self.hby)
108114
self.extend([receiptor])
109115

110-
auths = {}
111-
if self.authenticate:
112-
for wit in hab.kever.wits:
113-
code = input(f"Entire code for {wit}: ")
114-
auths[wit] = f"{code}#{helping.nowIso8601()}"
115116
yield from receiptor.receipt(hab.pre, sn=hab.kever.sn, auths=auths)
116117
self.remove([receiptor])
117118

118119
else:
119120

120-
witDoer = agenting.WitnessReceiptor(hby=self.hby)
121+
witDoer = agenting.WitnessReceiptor(hby=self.hby, auths=auths)
121122
self.extend(doers=[witDoer])
122123

123124
if hab.kever.wits:

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

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -191,26 +191,27 @@ def rotateDo(self, tymth, tock=0.0):
191191
cuts=list(self.cuts), adds=list(self.adds),
192192
data=self.data)
193193

194+
auths = {}
195+
if self.authenticate:
196+
for wit in hab.kever.wits:
197+
code = input(f"Entire code for {wit}: ")
198+
auths[wit] = f"{code}#{helping.nowIso8601()}"
199+
194200
if hab.kever.delpre:
195201
self.swain.delegation(pre=hab.pre, sn=hab.kever.sn, proxy=self.hby.habByName(self.proxy))
196202
print("Waiting for delegation approval...")
197203
while not self.swain.complete(hab.kever.prefixer, coring.Seqner(sn=hab.kever.sn)):
198204
yield self.tock
199205

200206
elif hab.kever.wits:
201-
if self.endpoint or self.authenticate:
202-
auths = {}
203-
if self.authenticate:
204-
for wit in hab.kever.wits:
205-
code = input(f"Entire code for {wit}: ")
206-
auths[wit] = f"{code}#{helping.nowIso8601()}"
207+
if self.endpoint:
207208
yield from receiptor.receipt(hab.pre, sn=hab.kever.sn, auths=auths)
208209
else:
209210
for wit in self.adds:
210211
self.mbx.addPoller(hab, witness=wit)
211212

212213
print("Waiting for witness receipts...")
213-
witDoer = agenting.WitnessReceiptor(hby=self.hby)
214+
witDoer = agenting.WitnessReceiptor(hby=self.hby, auths=auths)
214215
self.extend(doers=[witDoer])
215216
yield self.tock
216217

src/keri/app/cli/commands/witness/start.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@
5555

5656
def launch(args):
5757
help.ogler.level = logging.getLevelName(args.loglevel)
58-
if(args.logfile != None):
58+
if args.logfile is not None:
5959
help.ogler.headDirPath = args.logfile
6060
help.ogler.reopen(name=args.name, temp=False, clear=True)
6161
logger = help.ogler.getLogger()

src/keri/app/cli/commands/witness/submit.py

Lines changed: 39 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010

1111
from keri.app import habbing, agenting, indirecting
1212
from keri.app.cli.common import existing, displaying
13+
from keri.help import helping
1314

1415
logger = help.ogler.getLogger()
1516

@@ -30,6 +31,10 @@
3031
parser.add_argument('--force', action="store_true", required=False,
3132
help='True means to send witnesses all receipts even if we have a full compliment of receipts for '
3233
'the current event')
34+
parser.add_argument("--receipt-endpoint", help="Attempt to connect to witness receipt endpoint for witness receipts.",
35+
dest="endpoint", action='store_true')
36+
parser.add_argument("--authenticate", '-z', help="Prompt the controller for authentication codes for each witness",
37+
action='store_true')
3338

3439

3540
def handler(args):
@@ -46,31 +51,33 @@ def handler(args):
4651
alias = args.alias
4752
force = args.force
4853

49-
icpDoer = InceptDoer(name=name, base=base, alias=alias, bran=bran, force=force)
54+
subDoer = SubmitDoer(name=name, base=base, alias=alias, bran=bran, force=force, authenticate=args.authenticate,
55+
endpoint=args.endpoint)
5056

51-
doers = [icpDoer]
57+
doers = [subDoer]
5258
return doers
5359

5460

55-
class InceptDoer(doing.DoDoer):
61+
class SubmitDoer(doing.DoDoer):
5662
""" DoDoer for creating a new identifier prefix and Hab with an alias.
5763
"""
5864

59-
def __init__(self, name, base, alias, bran, force):
65+
def __init__(self, name, base, alias, bran, force, endpoint=False, authenticate=False):
6066

6167
hby = existing.setupHby(name=name, base=base, bran=bran)
6268
self.hbyDoer = habbing.HaberyDoer(habery=hby) # setup doer
6369
self.mbx = indirecting.MailboxDirector(hby=hby, topics=['/receipt', "/replay", "/reply"])
6470
self.alias = alias
6571
self.hby = hby
6672
self.force = force
73+
self.endpoint = endpoint
74+
self.authenticate = authenticate
6775

68-
self.witDoer = None
69-
doers = [self.hbyDoer, self.mbx, doing.doify(self.inceptDo)]
76+
doers = [self.hbyDoer, self.mbx, doing.doify(self.submitDo)]
7077

71-
super(InceptDoer, self).__init__(doers=doers)
78+
super(SubmitDoer, self).__init__(doers=doers)
7279

73-
def inceptDo(self, tymth, tock=0.0):
80+
def submitDo(self, tymth, tock=0.0):
7481
"""
7582
Parameters:
7683
tymth (function): injected function wrapper closure returned by .tymen() of
@@ -85,18 +92,34 @@ def inceptDo(self, tymth, tock=0.0):
8592
_ = (yield self.tock)
8693

8794
hab = self.hby.habByName(name=self.alias)
88-
self.witDoer = agenting.WitnessReceiptor(hby=self.hby, force=self.force)
89-
self.extend([self.witDoer])
95+
auths = {}
96+
if self.authenticate:
97+
for wit in hab.kever.wits:
98+
code = input(f"Entire code for {wit}: ")
99+
auths[wit] = f"{code}#{helping.nowIso8601()}"
90100

91-
if hab.kever.wits:
92-
print("Waiting for witness receipts...")
93-
self.witDoer.msgs.append(dict(pre=hab.pre))
94-
while not self.witDoer.cues:
95-
_ = yield self.tock
101+
if self.endpoint:
102+
receiptor = agenting.Receiptor(hby=self.hby)
103+
self.extend([receiptor])
104+
105+
yield from receiptor.receipt(hab.pre, sn=hab.kever.sn, auths=auths)
106+
self.remove([receiptor])
107+
108+
else:
109+
witDoer = agenting.WitnessReceiptor(hby=self.hby, force=self.force, auths=auths)
110+
self.extend([witDoer])
111+
112+
if hab.kever.wits:
113+
print("Waiting for witness receipts...")
114+
witDoer.msgs.append(dict(pre=hab.pre))
115+
while not witDoer.cues:
116+
_ = yield self.tock
117+
118+
self.remove([witDoer])
96119

97120
displaying.printIdentifier(self.hby, hab.pre)
98121

99-
toRemove = [self.hbyDoer, self.witDoer, self.mbx]
122+
toRemove = [self.hbyDoer, self.mbx]
100123
self.remove(toRemove)
101124

102125
return

src/keri/app/delegating.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
from . import agenting, forwarding
1313
from .habbing import GroupHab
1414
from .. import kering
15-
from ..core import coring, eventing, serdering
15+
from ..core import coring, serdering
1616
from ..db import dbing
1717
from ..peer import exchanging
1818

@@ -162,7 +162,7 @@ def processUnanchoredEscrow(self):
162162
self.witDoer.msgs.append(dict(pre=pre, sn=serder.sn))
163163

164164
# Move to escrow waiting for witness receipts
165-
print(f"Waiting for fully signed witness receipts for {serder.sn}")
165+
logger.info(f"Waiting for fully signed witness receipts for {serder.sn}")
166166
self.hby.db.dpwe.pin(keys=(pre, said), val=serder)
167167
self.hby.db.dune.rem(keys=(pre, said))
168168

@@ -188,7 +188,7 @@ def processPartialWitnessEscrow(self):
188188
witnessed = True
189189
if not witnessed:
190190
continue
191-
print(f"Witness receipts complete, {pre} confirmed.")
191+
logger.info(f"Witness receipts complete, {pre} confirmed.")
192192
self.hby.db.dpwe.rem(keys=(pre, said))
193193
self.hby.db.cdel.put(keys=(pre, seqner.qb64), val=coring.Saider(qb64=serder.said))
194194

src/keri/app/grouping.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ def start(self, ghab, prefixer, seqner, saider):
5151
serder = serdering.SerderKERI(raw=evt)
5252
del evt[:serder.size]
5353

54-
print(f"Waiting for other signatures for {serder.pre}:{seqner.sn}...")
54+
logger.info(f"Waiting for other signatures for {serder.pre}:{seqner.sn}...")
5555
return self.hby.db.gpse.add(keys=(prefixer.qb64,), val=(seqner, saider))
5656

5757
def complete(self, prefixer, seqner, saider=None):
@@ -133,7 +133,7 @@ def processPartialSignedEscrow(self):
133133
if kever.delegated and kever.ilk in (coring.Ilks.dip, coring.Ilks.drt):
134134
# We are a delegated identifier, must wait for delegator approval for dip and drt
135135
if witered: # We are elected to perform delegation and witnessing messaging
136-
print(f"We are the witnesser, sending {pre} to delegator")
136+
logger.info(f"We are the witnesser, sending {pre} to delegator")
137137
self.swain.delegation(pre=pre, sn=seqner.sn)
138138
else:
139139
anchor = dict(i=pre, s=seqner.snh, d=saider.qb64)
@@ -142,15 +142,15 @@ def processPartialSignedEscrow(self):
142142
else:
143143
self.witq.query(src=ghab.mhab.pre, pre=kever.delpre, anchor=anchor)
144144

145-
print("Waiting for delegation approval...")
145+
logger.info("Waiting for delegation approval...")
146146
self.hby.db.gdee.add(keys=(pre,), val=(seqner, saider))
147147
else: # Non-delegation, move on to witnessing
148148
if witered: # We are elected witnesser, send off event to witnesses
149-
print(f"We are the fully signed witnesser {seqner.sn}, sending to witnesses")
149+
logger.info(f"We are the fully signed witnesser {seqner.sn}, sending to witnesses")
150150
self.witDoer.msgs.append(dict(pre=pre, sn=seqner.sn))
151151

152152
# Move to escrow waiting for witness receipts
153-
print(f"Waiting for fully signed witness receipts for {seqner.sn}")
153+
logger.info(f"Waiting for fully signed witness receipts for {seqner.sn}")
154154
self.hby.db.gpwe.add(keys=(pre,), val=(seqner, saider))
155155

156156
def processDelegateEscrow(self):
@@ -170,7 +170,7 @@ def processDelegateEscrow(self):
170170
if witer: # We are elected witnesser, We've already done out part in Boatswain, we are done.
171171
if self.swain.complete(prefixer=kever.prefixer, seqner=coring.Seqner(sn=kever.sn)):
172172
self.hby.db.gdee.rem(keys=(pre,))
173-
print(f"Delegation approval for {pre} received.")
173+
logger.info(f"Delegation approval for {pre} received.")
174174

175175
self.hby.db.cgms.put(keys=(pre, seqner.qb64), val=saider)
176176

@@ -181,10 +181,10 @@ def processDelegateEscrow(self):
181181
dgkey = dbing.dgKey(pre, saider.qb64b)
182182
self.hby.db.setAes(dgkey, couple) # authorizer event seal (delegator/issuer)
183183
self.hby.db.gdee.rem(keys=(pre,))
184-
print(f"Delegation approval for {pre} received.")
184+
logger.info(f"Delegation approval for {pre} received.")
185185

186186
# Move to escrow waiting for witness receipts
187-
print(f"Waiting for witness receipts for {pre}")
187+
logger.info(f"Waiting for witness receipts for {pre}")
188188
self.hby.db.gdee.rem(keys=(pre,))
189189
self.hby.db.gpwe.add(keys=(pre,), val=(seqner, saider))
190190

@@ -212,7 +212,7 @@ def processPartialWitnessEscrow(self):
212212
witnessed = True
213213
if not witnessed:
214214
continue
215-
print(f"Witness receipts complete, {pre} confirmed.")
215+
logger.info(f"Witness receipts complete, {pre} confirmed.")
216216
self.hby.db.gpwe.rem(keys=(pre,))
217217
self.hby.db.cgms.put(keys=(pre, seqner.qb64), val=saider)
218218
elif not witer:

src/keri/app/habbing.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2084,8 +2084,9 @@ def processCuesIter(self, cues):
20842084
cuedSerder = cue["serder"] # Serder of received event for other pre
20852085
cuedKed = cuedSerder.ked
20862086
cuedPrefixer = coring.Prefixer(qb64=cuedKed["i"])
2087-
logger.info("%s got cue: kin=%s\n%s\n\n", self.pre, cueKin,
2088-
json.dumps(cuedKed, indent=1))
2087+
logger.info("%s got cue: kin=%s%s", self.pre, cueKin,
2088+
cuedSerder.said)
2089+
logger.debug(f"event=\n{cuedSerder.pretty()}\n")
20892090

20902091
if cuedKed["t"] == coring.Ilks.icp:
20912092
dgkey = dbing.dgKey(self.pre, self.iserder.said)

0 commit comments

Comments
 (0)