def login()

in deepracer_follow_the_leader_ws/webserver_pkg/webserver_pkg/login.py [0:0]


def login():
    """API to load login page when requested as GET request and authenticate
       with password passed as parameter when requested as POST request.

    Returns:
        flask.Response: Response object with login page or home page details.
    """
    webserver_node = webserver_publisher_node.get_webserver_node()
    webserver_node.get_logger().info(f"Called /login with {request.method}")
    if request.method == "POST":
        response = make_response(jsonify({"redirect": "/home"}), 200)
        try:
            with open(PASSWORD_PATH, "r") as file_ptr:
                pwd = file_ptr.readline()
            user_provided_pwd_hash = \
                str(compute_password_digest(request.form["password"].encode("utf-8")))
            if hmac.compare_digest(user_provided_pwd_hash, str(pwd)):
                webserver_node.get_logger().info("Password check passed")
                token = str(uuid.uuid4())
                try:
                    with open(TOKEN_PATH, "w") as token_file:
                        token_file.write(token)
                    webserver_node.get_logger().info("Token set")
                    response.set_cookie("deepracer_token",
                                        token,
                                        max_age=datetime.timedelta(hours=1),
                                        secure=True)
                    return response
                except IOError:
                    webserver_node.get_logger().error("Token path incorrect")
                    flash("Token path incorrect")
                    return "failure"
            else:
                webserver_node.get_logger().error("Incorrect password. Try again.")
                flash("Incorrect password. Try again.")
            return "failure"
        except IOError:
            webserver_node.get_logger().error("File not found")
            reset_default()
            flash("Password has been reset to default. "
                  "Please look at your the bottom of your vehicle for the default password.")
            return "failure"
    resp = make_response(render_template("login.html"), 200)
    return resp