Example #1
0
def reset_password(request):
    try:
        phone_number = request.data.get('phonenumber', None)
        if phone_number != None and phone_number != "":
            if User.objects.filter(user_phone=phone_number).exists() == False:
                return_data = {"error": "1", "message": "User does not exist"}
            else:
                user_data = otp.objects.get(user__user_phone=phone_number)
                user = User.objects.get(user_phone=phone_number)
                generate_pin = string_generator.alphanumeric(6)
                user_data.password_reset_code = generate_pin
                user_data.save()
                message = f"Welcome to Agrilance, your password reset code is {generate_pin}"
                sms.sendsms(phone_number[1:], message)
                timeLimit = datetime.datetime.utcnow() + datetime.timedelta(
                    minutes=1440)  #set limit for user
                payload = {
                    "user_id": f'{user.user_id}',
                    "validated": user_data.validated,
                    "exp": timeLimit
                }
                token = jwt.encode(payload, settings.SECRET_KEY)
                return_data = {
                    "error": "0",
                    "message": "Successful, reset code sent to Phone Number",
                    "token": token.decode('UTF-8')
                }
        else:
            return_data = {"error": "2", "message": "Invalid Parameter"}
    except Exception as e:
        return_data = {"error": "3", "message": str(e)}
    return Response(return_data)
Example #2
0
def resend_otp(request):
    try:
        phone_number = request.data.get('phone_number',None)
        if phone_number != None and phone_number != "":
            if User.objects.filter(user_phone =phone_number).exists() == False:
                    return_data = {
                        "error": "1",
                        "message": "User does not exist"
                    }
            else:
                user_data = otp.objects.get(user__user_phone=phone_number)
                user = User.objects.get(user_phone=phone_number)
                #generate new otp
                code = string_generator.numeric(6)
                user_data.otp_code = code
                user_data.save()
                message = f"Welcome to WasteCoin, your verification code is {code}"
                sms.sendsms(phone_number[1:],message)
                timeLimit= datetime.datetime.utcnow() + datetime.timedelta(minutes=1440) #set limit for user
                payload = {"user_id": f'{user.user_id}',
                           "role": user.role,
                           "validated": user_data.validated,
                           "exp":timeLimit}
                token = jwt.encode(payload,settings.SECRET_KEY)
                return_data = {
                    "error": "0",
                    "message": "OTP sent to phone number",
                    "token": token.decode('UTF-8')
                }
        else:
            return_data = {
                "error": "2",
                "message": "Invalid Parameters"
            }
    except Exception as e:
        return_data = {
            "error": "3",
            "message": str(e)
        }
    return Response(return_data)
Example #3
0
def signup(request):
    try:
        firstName = request.data.get('firstname', None)
        lastName = request.data.get('lastname', None)
        phoneNumber = request.data.get('phonenumber', None)
        email = request.data.get('email', None)
        password = request.data.get('password', None)
        address = request.data.get('address', None)
        reg_field = [
            firstName, lastName, phoneNumber, email, password, address
        ]
        if not None in reg_field and not "" in reg_field:
            if User.objects.filter(
                    user_phone=phoneNumber).exists() or User.objects.filter(
                        email=email).exists():
                return_data = {"error": "1", "message": "User Exists"}
            elif validator.checkmail(email) == False or validator.checkphone(
                    phoneNumber) == False:
                return_data = {
                    "error": "1",
                    "message": "Email or Phone number is Invalid"
                }
            else:
                #generate user_id
                userRandomId = string_generator.alphanumeric(6)
                #encrypt password
                encryped_password = password_functions.generate_password_hash(
                    password)
                #Save user_data
                new_userData = User(user_id=userRandomId,
                                    firstname=firstName,
                                    lastname=lastName,
                                    email=email,
                                    user_phone=phoneNumber,
                                    user_password=encryped_password,
                                    user_address=address)
                new_userData.save()
                #Generate OTP
                code = string_generator.numeric(6)
                #Save OTP
                user_OTP = otp(user=new_userData, otp_code=code)
                user_OTP.save()

                # Get User Validation
                validated = otp.objects.get(
                    user__user_id=userRandomId).validated
                #Generate token
                timeLimit = datetime.datetime.utcnow() + datetime.timedelta(
                    minutes=1440)  #set duration for token
                payload = {
                    "user_id": f"{userRandomId}",
                    "validated": validated,
                    "exp": timeLimit
                }
                token = jwt.encode(payload, settings.SECRET_KEY)
                message = f"Welcome to Agrilance, your verification code is {code}"
                sms.sendsms(phoneNumber[1:], message)
                return_data = {
                    "error": "0",
                    "message":
                    "The registration was successful, A verification SMS has been sent",
                    "token": f"{token.decode('UTF-8')}",
                    "elapsed_time": f"{timeLimit}",
                }
        else:
            return_data = {"error": "2", "message": "Invalid Parameter"}
    except Exception as e:
        return_data = {"error": "3", "message": str(e)}
    return Response(return_data)
Example #4
0
def user_registration(request):
    try:
        firstName = request.data.get('firstname',None)
        lastName = request.data.get('lastname',None)
        phoneNumber = request.data.get('phonenumber',None)
        email = request.data.get('email',None)
        gender = request.data.get('gender',None)
        password = request.data.get('password',None)
        address = request.data.get('address',None)
        lga = request.data.get('lga',None)
        state = request.data.get('state',None)
        country = request.data.get('country',None)
        reg_field = [firstName,lastName,phoneNumber,email,password,address,lga,state,country]
        if not None in reg_field and not "" in reg_field:
            if User.objects.filter(user_phone =phoneNumber).exists() or User.objects.filter(email =email).exists():
                return_data = {
                    "error": "1",
                    "message": "User Exists"
                }
            elif validator.checkmail(email) == False or validator.checkphone(phoneNumber)== False:
                return_data = {
                    "error": "1",
                    "message": "Email or Phone number is Invalid"
                }
            else:
                #generate user_id
                userRandomId = string_generator.alphanumeric(20)
                miner_id = string_generator.numeric(7)
                transactionid = string_generator.alphanumeric(15)
                #encrypt password
                encryped_password = password_functions.generate_password_hash(password)
                #Save user_data
                new_userData = User(user_id=userRandomId,firstname=firstName,lastname=lastName,
                                email=email,user_phone=phoneNumber,user_gender=gender,
                                user_password=encryped_password,user_address=address,
                                user_state=state,user_LGA=lga,user_country=country)
                new_userData.save()
                #Generate OTP
                code = string_generator.numeric(6)
                #Save OTP
                user_OTP =otp(user=new_userData,otp_code=code)
                user_OTP.save()
                #Generate default coins
                user_Coins = UserCoins(user=new_userData,minerID=miner_id,redeemedWasteCoin=0,minedCoins=0)
                user_Coins.save()
                #Save Transaction Details
                user_transaction = UserTrasactionHistory(user=new_userData,transaction_id=transactionid,
                                                        amount=0,coin_redeemed_amount=0,transaction="Credit")
                user_transaction.save()
                role = User.objects.get(user_id=userRandomId).role
                validated = otp.objects.get(user__user_id=userRandomId).validated
                #Generate token
                timeLimit= datetime.datetime.utcnow() + datetime.timedelta(minutes=1440) #set duration for token
                payload = {"user_id": f"{userRandomId}",
                           "role": role,
                           "validated": validated,
                           "exp":timeLimit}
                token = jwt.encode(payload,settings.SECRET_KEY)
                message = f"Welcome to WasteCoin, your verification code is {code}"
                sms.sendsms(phoneNumber[1:],message)
                return_data = {
                    "error": "0",
                    "message": "The registration was successful, A verrification SMS has been sent",
                    "token": f"{token.decode('UTF-8')}",
                    "elapsed_time": f"{timeLimit}",
                    }
        else:
            return_data = {
                "error":"2",
                "message": "Invalid Parameter"
            }
    except Exception as e:
        return_data = {
            "error": "3",
            "message": str(e)
        }
    return Response(return_data)