Example #1
0
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')
Example #2
0
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'))
Example #3
0
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")
Example #4
0
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')