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)
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)
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)
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)