def addNewClient(role, looper, creatorClient: Client, creatorWallet: Wallet, name: str): wallet = Wallet(name) wallet.addIdentifier() idr = wallet.defaultId op = { TXN_TYPE: NYM, ROLE: role, TARGET_NYM: idr, ALIAS: name, VERKEY: wallet.getVerkey(idr) } req = creatorWallet.signOp(op) creatorClient.submitReqs(req) nodeCount = len(creatorClient.nodeReg) looper.run( eventually(checkSufficientRepliesRecvd, creatorClient.inBox, req.reqId, 1, retryWait=1, timeout=3 * nodeCount)) return wallet
def genTestClient(nodes=None, nodeReg=None, tmpdir=None, testClientClass=TestClient, identifier: Identifier = None, verkey: str = None, bootstrapKeys=True, ha=None, usePoolLedger=False, name=None, sighex=None) -> (TestClient, Wallet): if not usePoolLedger: nReg = nodeReg if nodeReg: assert isinstance(nodeReg, dict) elif hasattr(nodes, "nodeReg"): nReg = nodes.nodeReg.extractCliNodeReg() else: error("need access to nodeReg") for k, v in nReg.items(): assert type(k) == str assert (type(v) == HA or type(v[0]) == HA) else: logger.debug("TestClient using pool ledger") nReg = None ha = genHa() if not ha else ha name = name or "testClient{}".format(ha.port) tc = testClientClass(name, nodeReg=nReg, ha=ha, basedirpath=tmpdir, sighex=sighex) if not usePoolLedger and nodes: for node in nodes: stack = node.clientstack # TODO: Remove this if condition once raet is removed if isinstance(stack, ZStack): initRemoteKeys(tc.name, stack.name, tmpdir, stack.verhex, override=True) w = None # type: Wallet if bootstrapKeys and nodes: if not identifier or not verkey: # no identifier or verkey were provided, so creating a wallet w = Wallet("test") w.addIdentifier() identifier = w.defaultId verkey = w.getVerkey() bootstrapClientKeys(identifier, verkey, nodes) return tc, w
def new_client_request(role, name, creatorWallet): wallet = Wallet(name) wallet.addIdentifier() idr = wallet.defaultId op = { TXN_TYPE: NYM, TARGET_NYM: idr, ALIAS: name, VERKEY: wallet.getVerkey(idr) } if role: op[ROLE] = role return creatorWallet.signOp(op), wallet
def sendAddNewClient(role, name, creatorClient, creatorWallet): wallet = Wallet(name) wallet.addIdentifier() idr = wallet.defaultId op = { TXN_TYPE: NYM, TARGET_NYM: idr, ALIAS: name, VERKEY: wallet.getVerkey(idr) } if role: op[ROLE] = role req = creatorWallet.signOp(op) creatorClient.submitReqs(req) return req, wallet
def setupClients(count: int, looper: Looper, nodes: Sequence[TestNode] = None, nodeReg=None, tmpdir=None): wallets = {} clients = {} for i in range(count): name = "test-wallet-{}".format(i) wallet = Wallet(name) idr, _ = wallet.addIdentifier() verkey = wallet.getVerkey(idr) client, _ = setupClient(looper, nodes, nodeReg, tmpdir, identifier=idr, verkey=verkey) clients[client.name] = client wallets[client.name] = wallet return clients, wallets
def addNewClient(role, looper, creatorClient: Client, creatorWallet: Wallet, name: str): wallet = Wallet(name) wallet.addIdentifier() idr = wallet.defaultId op = { TXN_TYPE: NYM, ROLE: role, TARGET_NYM: idr, ALIAS: name, VERKEY: wallet.getVerkey(idr) } req = creatorWallet.signOp(op) creatorClient.submitReqs(req) nodeCount = len(creatorClient.nodeReg) looper.run(eventually(checkSufficientRepliesRecvd, creatorClient.inBox, req.reqId, 1, retryWait=1, timeout=3 * nodeCount)) return wallet
""" client_addr = ("127.0.0.1", 8000) """ Create a client. """ clientName = "my_client_id" client = Client(name=clientName, ha=client_addr, nodeReg=cliNodeReg, basedirpath=tmpdir) looper.add(client) """ A client signs its requests. By default, a simple yet secure signing mechanism is created for a client. """ idAndKey = wallet.defaultId, wallet.getVerkey() """ A client's signature verification key must be bootstrapped out of band into the consensus pool. For demonstration, we'll add it directly to each node. """ for node in alpha, beta, gamma, delta: node.clientAuthNr.addIdr(*idAndKey) """ We give the client a little time to connect """ looper.runFor(3) """ Create a simple message. """ msg = {'life_answer': 42}
""" Create a client. """ clientName = "my_client_id" client = Client(name=clientName, ha=client_addr, nodeReg=cliNodeReg, basedirpath=tmpdir) looper.add(client) """ A client signs its requests. By default, a simple yet secure signing mechanism is created for a client. """ idAndKey = wallet.defaultId, wallet.getVerkey() """ A client's signature verification key must be bootstrapped out of band into the consensus pool. For demonstration, we'll add it directly to each node. """ for node in alpha, beta, gamma, delta: node.clientAuthNr.addClient(*idAndKey) """ We give the client a little time to connect """ looper.runFor(3) """