def verify_email(self, username, code): r = Redis().r email = self.db["users"].find_one({"username": username})["email"]["address"] verify_data = r.hgetall(email) wrong_count = int(verify_data["wrong"]) MAX = 10 if wrong_count >= MAX: self.db["users"].update_one({"username": username}, {"$set": {"status": {"disable": True, "reason": "verify email crack"}}} ) return {"status": False, "status_code": HTTPStatus.FORBIDDEN, "message": "Account locked. Please stay away"} correct_code = verify_data["code"] if correct_code == code: r.expire(email, 0) r.expire(f"timeout-{email}", 0) self.db["users"].update_one({"username": username}, {"$set": {"email.verified": True}} ) return {"status": True, "status_code": HTTPStatus.CREATED, "message": "success"} else: r.hset(email, "wrong", wrong_count + 1) return {"status": False, "status_code": HTTPStatus.FORBIDDEN, "message": f"verification code is incorrect. You have {MAX - wrong_count} attempts remaining"}