Source code for dtale.auth
from flask import redirect, render_template, request, session, url_for
from functools import wraps
import dtale.global_state as global_state
[docs]def setup_auth(app):
if not global_state.get_auth_settings()["active"]:
return
@app.route("/login", methods=["GET", "POST"])
def login():
if request.method == "POST":
username, password = (request.form.get(p) for p in ["username", "password"])
if not authenticate(username, password):
return render_template(
"dtale/login.html", error="Invalid credentials!", page="login"
)
session["logged_in"] = True
session["username"] = request.form["username"]
return redirect(session.get("next") or "/")
return render_template("dtale/login.html", page="login")
@app.route("/logout")
def logout():
session.clear()
return redirect(url_for("login"))
[docs]def authenticate(username, password):
auth_settings = global_state.get_auth_settings()
if username == auth_settings["username"] and password == auth_settings["password"]:
return True
return False
[docs]def requires_auth(f):
@wraps(f)
def decorated(*args, **kwargs):
if not global_state.get_auth_settings()["active"]:
return f(*args, **kwargs)
if request.path in ["/login", "/logout"]:
return f(*args, **kwargs)
if request.path.startswith("/dtale/static"):
return f(*args, **kwargs)
if not session.get("logged_in") or not session.get("username"):
session["next"] = request.url
return redirect(url_for("login"))
return f(*args, **kwargs)
return decorated