def otp_generate(client_id,param,ph_no):
	param = str(param)
	client = {}
	request_id = construct_request_id(client_id,param)
	request = {
		"requestId": request_id,
		"requestedAt": current_datetime(),
		"locked": False,
		"tries": 0,
		"param": param 
	}
	flag = 0
	otpreq = OtpRequest(client_id,param)
	otpreq.create()
	ct = ClientTracking.get_data(request_id)
	try:
		if ct:
			flag = 1
			tries = get_int(ct[b'tries'])
			tries += 1
			ct[b'tries'] = tries
			requestedAt = get_datetime(ct[b'requestedAt'])
			duration = datetime.utcnow() - requestedAt
			if ct[b'locked'].decode("utf-8") == "True":
				if duration.seconds >= MAXIMUM_REQUEST_INTERVAL:
					ClientTracking.unlock(request_id)
				else:
					raise Exception("Client locked")
			if tries >= MAXIMUM_RETRIES and duration.seconds <= MAXIMUM_REQUEST_INTERVAL :
				ClientTracking.setLock(request_id)
				raise Exception('Maximum tries exceeded')
			elif tries <= MAXIMUM_RETRIES and duration.seconds >= MAXIMUM_REQUEST_INTERVAL:
				ct[b'requestedAt'] = current_datetime()
				ct[b'tries'] = 0
				Password.delete(request_id)
		new_otp = Password(request_id)
		password = new_otp.create()
		Password.set_expire_time(request_id,PASSWORD_EXPIRY_TIME)
		if flag == 0:
			new_request = ClientTracking(request_id,request)
			new_request.insert()
		else:
			new_request = ClientTracking(request_id,ct)
			new_request.update()
		msg = "Password expires in "+str(PASSWORD_EXPIRY_TIME)+" seconds"
		mail_id = '*****@*****.**'
		send_sms.apply_async(args=(ph_no,password,msg,))
		send_email.apply_async(args=(mail_id,password,msg,))
		return "message sent"
	except Exception as e:
		return(e.args[0])
Esempio n. 2
0
def otp_generate(client_id, param, ph_no):
    param = str(param)
    client = {}
    request_id = construct_request_id(client_id, param)
    request = {"requestId": request_id, "requestedAt": current_datetime(), "locked": False, "tries": 0, "param": param}
    flag = 0
    otpreq = OtpRequest(client_id, param)
    otpreq.create()
    ct = ClientTracking.get_data(request_id)
    try:
        if ct:
            flag = 1
            tries = get_int(ct[b"tries"])
            tries += 1
            ct[b"tries"] = tries
            requestedAt = get_datetime(ct[b"requestedAt"])
            duration = datetime.utcnow() - requestedAt
            if ct[b"locked"].decode("utf-8") == "True":
                if duration.seconds >= MAXIMUM_REQUEST_INTERVAL:
                    ClientTracking.unlock(request_id)
                else:
                    raise Exception("Client locked")
            if tries >= MAXIMUM_RETRIES and duration.seconds <= MAXIMUM_REQUEST_INTERVAL:
                ClientTracking.setLock(request_id)
                raise Exception("Maximum tries exceeded")
            elif tries <= MAXIMUM_RETRIES and duration.seconds >= MAXIMUM_REQUEST_INTERVAL:
                ct[b"requestedAt"] = current_datetime()
                ct[b"tries"] = 0
                Password.delete(request_id)
        new_otp = Password(request_id)
        password = new_otp.create()
        Password.set_expire_time(request_id, PASSWORD_EXPIRY_TIME)
        if flag == 0:
            new_request = ClientTracking(request_id, request)
            new_request.insert()
        else:
            new_request = ClientTracking(request_id, ct)
            new_request.update()
        msg = "Password expires in " + str(PASSWORD_EXPIRY_TIME) + " seconds"
        mail_id = "*****@*****.**"
        send_sms.apply_async(args=(ph_no, password, msg))
        send_email.apply_async(args=(mail_id, password, msg))
        return "message sent"
    except Exception as e:
        return e.args[0]
Esempio n. 3
0
def otp_validate(pwd, id, param):
    param = str(param)
    log = ""
    status = ""
    validateAt = current_datetime()
    flag = 0
    otp_List = {}
    request_id = construct_request_id(id, param)
    otp_List = Password.get_data(request_id)
    try:
        if not otp_List:
            log = "Time limit exceeded"
            status = 'failure'
            create_validate(id, param, status, log)
            raise Exception(log)
        else:
            retries = get_int(otp_List[b'retries'])
            retries += 1
            otp_List[b'retries'] = retries
            ttl = Password.get_expire_time(request_id)
            passwd = Password(request_id, otp_List)
            passwd.update()
            Password.set_expire_time(request_id, ttl)
            if retries >= MAXIMUM_RETRIES:
                ClientTracking.setLock(request_id)
                log = 'Maximum retries exceeded'
                status = 'failure'
                Password.delete(request_id)
                create_validate(id, param, status, log)
                raise Exception(log)
            if pwd == otp_List[b'password'].decode("utf-8"):
                flag = 1
                status = 'success'
                create_validate(id, param, status, log)
                Password.delete(request_id)
                ClientTracking.delete(request_id)
                return 'success'
            else:
                log = 'Password incorrect'
                status = 'failure'
                create_validate(id, param, status, log)
                return log
    except Exception as e:
        return (e.args[0])