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