def generateOtp(request,loggedInUserProfile,groupSearched): ########Generation of otp and saving it in database loggedInUser=wallet.objects.filter(username=loggedInUserProfile.username.username) loggedInUser=loggedInUser[0] TOTPinput=str(datetime.now()) TOTPinput=base64.b32encode(TOTPinput.encode()) TOTPinput=TOTPinput.decode() totp=TOTP(TOTPinput) totp.interval=180 otp=totp.now() loggedInUser.otp=codecs.encode(pickle.dumps(totp),"base64").decode() ########################################################## print("generate otp") print(otp) requestToBeSaved = [] requestToBeSaved.append(requestTypes[0]) requestToBeSaved.append(loggedInUser.username.username) requestToBeSaved.append(groupSearched.groupName) loggedInUser.request=json.dumps(requestToBeSaved) #####Sending email email_subject = 'Continue Payment' message = render_to_string('send_otp.html', { 'otp':otp, }) to_email = loggedInUser.username.email print(to_email) email = EmailMessage(email_subject, message, to=[to_email]) email.send() ################### loggedInUser.save() return render(request,'groupOtp.html')
def GroupvalidateOtp(request): print(request.user.username) loggedInUser=wallet.objects.filter(username=request.user.username) if(len(loggedInUser)==0): return HttpResponse("invalid response") loggedInUser=loggedInUser[0] print(loggedInUser.otp) # print(loggedInUser.otp.decode) ######################################retrieve sent otp from database totp=pickle.loads(codecs.decode(loggedInUser.otp.encode(),"base64")) ########################################################################## try: otp=int(request.POST.get("otp")) except: return HttpResponse("invalid otp") print("validate otp") print(totp.now()) print("entered otp " + str(otp)) print(totp.verify(str(otp))) print(totp.verify(str(otp))) boolean=totp.verify(str(otp)) print(boolean) # print(type(totp.verify(str(otp)))) if(boolean): print("verification done") ##########After verifying otp generate new otp so that old one cannot be used again TOTPinput = str(datetime.now()) TOTPinput = base64.b32encode(TOTPinput.encode()) TOTPinput = TOTPinput.decode() totp = TOTP(TOTPinput) totp.interval=180 loggedInUser.otp = codecs.encode(pickle.dumps(totp), "base64").decode() loggedInUser.save() ################################################################ ######retrive sent request from database requestToBeDone=json.loads(loggedInUser.request) print(str(requestToBeDone),"something new") #### request to done in format (0)request type, (1)logged in user ,(2)amount,(3)requested user (4) time if(len(requestToBeDone)==0): return HttpResponse("OTP already used") if(requestToBeDone[0]==requestTypes[0]):####add money request groupSearched=GROUP.objects.filter(groupName=requestToBeDone[2]) if(len(groupSearched)==0): return HttpResponse("group does not exist anymore") groupSearched=groupSearched[0] amountToBeDeducted=float(groupSearched.joiningFees) currentAmount=float(loggedInUser.amount) if(currentAmount<amountToBeDeducted): return HttpResponse("Insufficient balance") newAmount = str(currentAmount - amountToBeDeducted) loggedInUser.amount = newAmount loggedInUser.request = "[]" loggedInUser.save() loggedInUser.save() loggedInUser=user.objects.filter(username=request.user.username) loggedInUser=loggedInUser[0] loggedInUserGroups=json.loads(loggedInUser.userGroups) loggedInUserGroups.append(groupSearched.groupName) loggedInUser.userGroups=json.dumps(loggedInUserGroups) loggedInUser.save() groupSearchedMembers=json.loads(groupSearched.members) groupSearchedMembers.append(loggedInUser.username.username) groupSearched.members=json.dumps(groupSearchedMembers) groupSearched.save() ##########If otp is wrong make the current otp invalid TOTPinput = str(datetime.now()) TOTPinput = base64.b32encode(TOTPinput.encode()) TOTPinput = TOTPinput.decode() totp = TOTP(TOTPinput) totp.interval = 180 loggedInUser.otp = codecs.encode(pickle.dumps(totp), "base64").decode() loggedInUser.save() ################################################################ return redirect(reverse('home'))
def validateOtp(request): print(request.user.username) loggedInUser = wallet.objects.filter(username=request.user.username) if (len(loggedInUser) == 0): return HttpResponse("invalid response") loggedInUser = loggedInUser[0] print(loggedInUser.otp) # print(loggedInUser.otp.decode) ######################################retrieve sent otp from database totp = pickle.loads(codecs.decode(loggedInUser.otp.encode(), "base64")) ########################################################################## try: otp = int(request.POST.get("otp")) except: return HttpResponse("invalid otp") print("validate otp") print(totp.now()) print("entered otp " + str(otp)) print(totp.verify(str(otp))) print(totp.verify(str(otp))) boolean = totp.verify(str(otp)) print(boolean) print(type(totp.verify(str(otp)))) if (totp.verify(str(otp))): print("verification done") ##########After verifying otp generate new otp so that old one cannot be used again TOTPinput = str(datetime.now()) TOTPinput = base64.b32encode(TOTPinput.encode()) TOTPinput = TOTPinput.decode() totp = TOTP(TOTPinput) totp.interval = 180 loggedInUser.otp = codecs.encode(pickle.dumps(totp), "base64").decode() loggedInUser.save() ################################################################ ######retrive sent request from database requestToBeDone = json.loads(loggedInUser.request) print(requestToBeDone) #### request to done in format (0)request type, (1)logged in user ,(2)amount,(3)requested user (4) time if (len(requestToBeDone) == 0): return HttpResponse("OTP already used") if (requestToBeDone[0] == requestTypes[0]): ####add money request print("add money enter") page = addMoney(requestToBeDone) return page elif (requestToBeDone[0] == requestTypes[1] ): #### accept money request print("accept money enter") page = acceptMoneyRequest(requestToBeDone) return page elif (requestToBeDone[0] == requestTypes[2]): ####sendMoney print("send money enter") page = sendMoney(requestToBeDone) return page elif (requestToBeDone[0] == requestTypes[3]): ######for deduct money ###request format (0) request type (1) logged in user (2) userCategory print("deduct money enter") page = deductMoney(requestToBeDone) return page #################################### ##########If otp is wrong make the current otp invalid TOTPinput = str(datetime.now()) TOTPinput = base64.b32encode(TOTPinput.encode()) TOTPinput = TOTPinput.decode() totp = TOTP(TOTPinput) totp.interval = 180 loggedInUser.otp = codecs.encode(pickle.dumps(totp), "base64").decode() loggedInUser.save() ################################################################ return HttpResponse("invalid OTP")
def generateOtp(request): loggedInUser = wallet.objects.filter(username=request.user.username) if (len(loggedInUser) == 0): return HttpResponse("invalid user") loggedInUser = loggedInUser[0] if (loggedInUser.transactionLimit == 0): return HttpResponse("Transaction limit for the month exhausted") ########Generation of otp and saving it in database TOTPinput = str(datetime.now()) TOTPinput = base64.b32encode(TOTPinput.encode()) TOTPinput = TOTPinput.decode() totp = TOTP(TOTPinput) totp.interval = 180 otp = totp.now() loggedInUser.otp = codecs.encode(pickle.dumps(totp), "base64").decode() ########################################################## print("generate otp") print(otp) #####################################################################3Saving request in database ##########structure of request: function ,logged in user ,amount, requested user requestToBeSaved = [] print(dir(request)) print(request.path) print(request.path_info) if (requestTypes[0] in request.path_info): #####for add money requestToBeSaved.append(requestTypes[0]) requestToBeSaved.append(request.user.username) requestToBeSaved.append(request.POST.get("amountToBeAdded")) elif (requestTypes[1] in request.path_info): ####for accept money request requestToBeSaved.append(requestTypes[1]) requestToBeSaved.append(request.user.username) requestToBeSaved.append(request.POST.get("acceptRequestAmount")) requestToBeSaved.append(request.POST.get("acceptRequestUsername")) requestToBeSaved.append(request.POST.get("acceptRequestTime")) elif (requestTypes[2] in request.path_info): ####for send Money requestToBeSaved.append(requestTypes[2]) requestToBeSaved.append(request.user.username) requestToBeSaved.append(request.POST.get("amountToBeSend")) requestToBeSaved.append(request.POST.get("sendUsername")) elif (requestTypes[3] in request.path_info): ####only for money deductions requestToBeSaved.append(requestTypes[3]) requestToBeSaved.append(request.user.username) requestToBeSaved.append(request.POST.get("category")) loggedInUser.request = json.dumps(requestToBeSaved) ################################################################################################ #####Sending email email_subject = 'Continue Payment' message = render_to_string('send_otp.html', { 'otp': otp, }) to_email = loggedInUser.username.email print(to_email) email = EmailMessage(email_subject, message, to=[to_email]) email.send() ################### loggedInUser.save() return render(request, 'OTP input.html')