def sendToMerchantFromCustomer(self, request, context): data = request.messageData d = data.split(",") hash_op = d[0] key = d[1] SendStr = self.merchantMOHelper.RandomSelector() with grpc.insecure_channel(self.customer_address) as channel: try: grpc.channel_ready_future(channel).result(timeout=1) except grpc.FutureTimeoutError: print("Connection timeout. Unable to connect to port ", self.customer_address) return None stub = digitalCashService_pb2_grpc.digitalCashServiceStub(channel) response = stub.sendToCustomerFromMerchant( digitalCashService_pb2.Message(messageData=SendStr)) message = response.messageData mess = message.split(',') hash_ip = self.merchantMOHelper.decrpyt_amount(mess[0]) verify = self.merchantMOHelper.Verify(hash_ip, key, hash_op) message = "MO_deposit-*-*- " + message if verify == True: with grpc.insecure_channel(self.bank_address) as channel: try: grpc.channel_ready_future(channel).result(timeout=1) except grpc.FutureTimeoutError: print("Connection timeout. Unable to connect to port ", self.bank_address) return None bankStub = digitalCashService_pb2_grpc.digitalCashServiceStub( channel) responseFromBank = bankStub.sendToBankFromMerchant( digitalCashService_pb2.Message(messageData=message)) if (responseFromBank.messageData == "credit_merchant"): print( "***INFORMATION*** :: Your account has been successfully credited!!" ) return digitalCashService_pb2.ack( success=True, message="Successfully credited the Merchant.") else: print( "***CRITICAL WARNING*** :: MO is already used, fraudulent transaction has been detected!!" ) return digitalCashService_pb2.ack( success=False, message="Fraud has been detected") return digitalCashService_pb2.ack(success=False, message="Fraud has been detected")
def sendMoneyOrderToMerchant(merchant_ip_address, stub, digitalCashServer): with open('Unused_MO.txt', 'r') as fh: line = fh.readlines() if not line: print("No MOs to send, please select Mode = 1 next") return Request = line[0] line = line[1:] with open('Unused_MO.txt', 'w') as fh: for l in line: fh.write(l) with open('Used_MO.txt', 'a') as fh: fh.write(Request) fh.write("\n") d = Request.split(" ") digitalCashServer.MO_Pairs_data = d moneyOrderHelper = MoneyOrderHelper(numberOfMoneyOrders, numberOfSecretPairs, pub_key) Message = moneyOrderHelper.decrpyt_amount(d[1]) key = random.randint(0, 1234) #key = "\x00"+os.urandom(4)+"\x00" key = str(key) #print (BitVector(intVal = int(Message), size = 1024).get_bitvector_in_ascii()) hash_val = moneyOrderHelper.generate_signature( key, Message) #BitCommit (Message, key) Hash_and_key = hash_val + ',' + key with grpc.insecure_channel(merchant_ip_address) as channel: try: grpc.channel_ready_future(channel).result(timeout=1) except grpc.FutureTimeoutError: print("<--- Connection timeout. Unable to connect to port. --->") return None else: print("** Connected to merchant server. **") stub = digitalCashService_pb2_grpc.digitalCashServiceStub(channel) response = stub.sendToMerchantFromCustomer( digitalCashService_pb2.Message(messageData=Hash_and_key)) print(response.message)
def run_client(serverAddress): with grpc.insecure_channel(serverAddress) as channel: try: grpc.channel_ready_future(channel).result(timeout=1) except grpc.FutureTimeoutError: print("Connection timeout. Unable to connect to port ") #exit() else: print("Connected") stub = digitalCashService_pb2_grpc.digitalCashServiceStub(channel) response = stub.ping(digitalCashService_pb2.pingMessage(message="Trying to ping you!!")) print(response.message)
def run_server(bank_ip_address, merchant_ip_address, customer_port): # Declare the gRPC server with 10 max_workers server = grpc.server(futures.ThreadPoolExecutor(max_workers=10)) digitalCashServer = DigitalCashServer() # # Add FileService to the server. digitalCashService_pb2_grpc.add_digitalCashServiceServicer_to_server( digitalCashServer, server) # # Start the server on server_port. server.add_insecure_port('[::]:{}'.format(customer_port)) server.start() print("******* Customer server has been started on port {} *******".format( customer_port)) with grpc.insecure_channel(bank_ip_address) as channel: try: grpc.channel_ready_future(channel).result(timeout=1) except grpc.FutureTimeoutError: print("<--- Connection timeout. Unable to connect to port. --->") #exit() else: print("** Connected to customer server. **") stub = digitalCashService_pb2_grpc.digitalCashServiceStub(channel) response = stub.ping( digitalCashService_pb2.pingMessage(message="Trying to ping you!!")) handleUserInputs(merchant_ip_address, stub, digitalCashServer) # Keep the server running for '_ONE_DAY_IN_SECONDS' seconds. try: while True: time.sleep(_ONE_DAY_IN_SECONDS) except KeyboardInterrupt: server.stop(0)
def sendToMerchantFromCustomer(self, request, context): print( "----------------------Inside sendToMerchantFromCustomer-----------------" ) data = request.messageData d = data.split(",") hash_op = d[0] key = d[1] #hash output and key recieved print(data) SendStr = self.merchantMOHelper.RandomSelector() print(SendStr) with grpc.insecure_channel(self.customer_address) as channel: try: grpc.channel_ready_future(channel).result(timeout=1) except grpc.FutureTimeoutError: print("Connection timeout. Unable to connect to port ") return None else: print("Connected") stub = digitalCashService_pb2_grpc.digitalCashServiceStub(channel) response = stub.sendToCustomerFromMerchant( digitalCashService_pb2.Message(messageData=SendStr)) message = response.messageData mess = message.split(',') hash_ip = self.merchantMOHelper.decrpyt_amount(mess[0]) print(hash_ip) verify = self.merchantMOHelper.Verify(hash_ip, key, hash_op) print("Verification Status: " + str(verify)) message = "MO_deposit-*-*- " + message if verify == True: with grpc.insecure_channel(self.bank_address) as channel: try: grpc.channel_ready_future(channel).result(timeout=1) except grpc.FutureTimeoutError: print("Connection timeout. Unable to connect to port ") return None else: print("Connected") bankStub = digitalCashService_pb2_grpc.digitalCashServiceStub( channel) print( "Sending the message to bank----------------------------------" ) responseFromBank = bankStub.sendToBankFromMerchant( digitalCashService_pb2.Message(messageData=message)) print("Received from Bank: " + responseFromBank.messageData) if (responseFromBank.messageData == "credit_merchant"): return digitalCashService_pb2.ack( success=True, messageData="Successfully credited the Merchant.") else: return digitalCashService_pb2.ack( success=False, messageData="Fraud has been detected") return digitalCashService_pb2.Message( success=False, messageData="Fraud has been detected")