Пример #1
0
 def getReplyFor(self, request):
     result = self.secondaryStorage.getReply(
         request.identifier,
         request.reqId,
         type=request.operation[TXN_TYPE])
     if result:
         if request.operation[TXN_TYPE] == ATTRIB:
             result = self.hashAttribTxn(result)
         return Reply(result)
     else:
         return None
Пример #2
0
    def generateReply(self, ppTime: float, req: Request):
        operation = req.operation
        txnId = self.genTxnId(req.identifier, req.reqId)
        result = {TXN_ID: txnId, TXN_TIME: int(ppTime)}
        result.update(operation)
        result.update({
            f.IDENTIFIER.nm: req.identifier,
            f.REQ_ID.nm: req.reqId,
        })

        return Reply(result)
Пример #3
0
 def processGetIssuerKeyReq(self, request: Request, frm: str):
     self.transmitToClient(RequestAck(*request.key), frm)
     keys = self.graphStore.getIssuerKeys(request.operation[ORIGIN],
                                          request.operation[REF])
     result = {TXN_ID: self.genTxnId(request.identifier, request.reqId)}
     result.update(request.operation)
     result[DATA] = json.dumps(keys, sort_keys=True)
     result.update({
         f.IDENTIFIER.nm: request.identifier,
         f.REQ_ID.nm: request.reqId,
     })
     self.transmitToClient(Reply(result), frm)
Пример #4
0
 def storeTxnAndSendToClient(self, reply):
     """
     Does 4 things in following order
      1. Add reply to ledger.
      2. Send the reply to client.
      3. Add the reply to identity graph if needed.
      4. Add the reply to storage so it can be served later if the
      client requests it.
     """
     txnWithMerkleInfo = self.storeTxnInLedger(reply.result)
     self.sendReplyToClient(Reply(txnWithMerkleInfo))
     reply.result[F.seqNo.name] = txnWithMerkleInfo.get(F.seqNo.name)
     self.storeTxnInGraph(reply.result)
Пример #5
0
 def processGetClaimDefReq(self, request: Request, frm: str):
     issuerNym = request.operation[TARGET_NYM]
     name = request.operation[DATA][NAME]
     version = request.operation[DATA][VERSION]
     claimDef = self.graphStore.getClaimDef(issuerNym, name, version)
     result = {TXN_ID: self.genTxnId(request.identifier, request.reqId)}
     result.update(request.operation)
     result[DATA] = json.dumps(claimDef, sort_keys=True)
     result.update({
         f.IDENTIFIER.nm: request.identifier,
         f.REQ_ID.nm: request.reqId,
     })
     self.transmitToClient(Reply(result), frm)
Пример #6
0
 def processGetNymReq(self, request: Request, frm: str):
     self.transmitToClient(RequestAck(request.reqId), frm)
     nym = request.operation[TARGET_NYM]
     txn = self.graphStore.getAddNymTxn(nym)
     txnId = self.genTxnId(request.identifier, request.reqId)
     result = {
         f.IDENTIFIER.nm: request.identifier,
         f.REQ_ID.nm: request.reqId,
         DATA: json.dumps(txn) if txn else None,
         TXN_ID: txnId
     }
     result.update(request.operation)
     self.transmitToClient(Reply(result), frm)
Пример #7
0
 def getReplyFor(self, request):
     typ = request.operation.get(TXN_TYPE)
     if typ in IDENTITY_TXN_TYPES:
         result = self.secondaryStorage.getReply(request.identifier,
                                                 request.reqId,
                                                 type=request.operation[TXN_TYPE])
         if result:
             if request.operation[TXN_TYPE] == ATTRIB:
                 result = self.hashAttribTxn(result)
             return Reply(result)
         else:
             return None
     if typ in CONFIG_TXN_TYPES:
         return self.getReplyFromLedger(self.configLedger, request)
Пример #8
0
 def processGetNymReq(self, request: Request, frm: str):
     self.transmitToClient(RequestAck(*request.key), frm)
     nym = request.operation[TARGET_NYM]
     txn = self.graphStore.getAddNymTxn(nym)
     txnId = self.genTxnId(request.identifier, request.reqId)
     # TODO: We should have a single JSON encoder which does the
     # encoding for us, like sorting by keys, handling datetime objects.
     result = {f.IDENTIFIER.nm: request.identifier,
               f.REQ_ID.nm: request.reqId,
               DATA: json.dumps(txn, sort_keys=True) if txn else None,
               TXN_ID: txnId
               }
     result.update(request.operation)
     self.transmitToClient(Reply(result), frm)
Пример #9
0
 def processGetIssuerKeyReq(self, request: Request, frm: str):
     self.transmitToClient(RequestAck(request.reqId), frm)
     keys = self.graphStore.getIssuerKeys(request.operation[ORIGIN],
                                          request.operation[REFERENCE])
     # attrNames = request.operation[RAW]
     # nym = request.operation[TARGET_NYM]
     # attrs = self.graphStore.getRawAttrs(nym, attrNames)
     result = {TXN_ID: self.genTxnId(request.identifier, request.reqId)}
     result.update(request.operation)
     result[DATA] = json.dumps(keys)
     result.update({
         f.IDENTIFIER.nm: request.identifier,
         f.REQ_ID.nm: request.reqId,
     })
     self.transmitToClient(Reply(result), frm)
Пример #10
0
 def processGetAttrsReq(self, request: Request, frm: str):
     self.transmitToClient(RequestAck(*request.key), frm)
     attrName = request.operation[RAW]
     nym = request.operation[TARGET_NYM]
     attrWithSeqNo = self.graphStore.getRawAttrs(nym, attrName)
     result = {TXN_ID: self.genTxnId(request.identifier, request.reqId)}
     if attrWithSeqNo:
         attr = {attrName: attrWithSeqNo[attrName][0]}
         result[DATA] = json.dumps(attr, sort_keys=True)
         result[F.seqNo.name] = attrWithSeqNo[attrName][1]
     result.update(request.operation)
     result.update({
         f.IDENTIFIER.nm: request.identifier,
         f.REQ_ID.nm: request.reqId,
     })
     self.transmitToClient(Reply(result), frm)
Пример #11
0
 def storeTxnAndSendToClient(self, reply):
     """
     Does 4 things in following order
      1. Add reply to ledger.
      2. Send the reply to client.
      3. Add the reply to identity graph if needed.
      4. Add the reply to storage so it can be served later if the
      client requests it.
     """
     result = reply.result
     txnWithMerkleInfo = self.storeTxnInLedger(result)
     if result[TXN_TYPE] == NODE_UPGRADE:
         logger.info('{} processed {}'.format(self, NODE_UPGRADE))
         # Returning since NODE_UPGRADE is not sent to client and neither
         # goes in graph
         return
     self.sendReplyToClient(Reply(txnWithMerkleInfo),
                            (result[f.IDENTIFIER.nm], result[f.REQ_ID.nm]))
     reply.result[F.seqNo.name] = txnWithMerkleInfo.get(F.seqNo.name)
     self.storeTxnInGraph(reply.result)
Пример #12
0
 def processGetTxnReq(self, request: Request, frm: str):
     nym = request.operation[TARGET_NYM]
     origin = request.identifier
     if nym != origin:
         # TODO not sure this is correct; why does it matter?
         msg = "You can only receive transactions for yourself"
         self.transmitToClient(RequestNack(*request.key, msg), frm)
     else:
         self.transmitToClient(RequestAck(*request.key), frm)
         data = request.operation.get(DATA)
         addNymTxn = self.graphStore.getAddNymTxn(origin)
         txnIds = [addNymTxn[TXN_ID], ] + self.graphStore. \
             getAddAttributeTxnIds(origin)
         # If sending transactions to a user then should send user's
         # sponsor creation transaction also
         if addNymTxn.get(ROLE) == USER:
             sponsorNymTxn = self.graphStore.getAddNymTxn(
                 addNymTxn.get(f.IDENTIFIER.nm))
             txnIds = [
                 sponsorNymTxn[TXN_ID],
             ] + txnIds
         # TODO: Remove this log statement
         logger.debug("{} getting replies for {}".format(self, txnIds))
         result = self.secondaryStorage.getReplies(*txnIds, seqNo=data)
         txns = sorted(list(result.values()), key=itemgetter(F.seqNo.name))
         lastTxn = str(txns[-1][F.seqNo.name]) if len(txns) > 0 else data
         result = {TXN_ID: self.genTxnId(request.identifier, request.reqId)}
         result.update(request.operation)
         # TODO: We should have a single JSON encoder which does the
         # encoding for us, like sorting by keys, handling datetime objects.
         result[DATA] = json.dumps({
             LAST_TXN: lastTxn,
             TXNS: txns
         },
                                   default=dateTimeEncoding,
                                   sort_keys=True)
         result.update({
             f.IDENTIFIER.nm: request.identifier,
             f.REQ_ID.nm: request.reqId,
         })
         self.transmitToClient(Reply(result), frm)
Пример #13
0
 def getReplyFor(self, request):
     txn = self.ledger.get(identifier=request.identifier,
                           reqId=request.reqId)
     if txn:
         txn.update(self.ledger.merkleInfo(txn.get(F.seqNo.name)))
         return Reply(txn)
Пример #14
0
 def getReplyFor(self, request):
     result = self.secondaryStorage.getReply(
         request.identifier,
         request.reqId,
         type=request.operation[TXN_TYPE])
     return Reply(result) if result else None