85 lines
2.2 KiB
Python
85 lines
2.2 KiB
Python
from json import load
|
|
from os import environ
|
|
|
|
from flask import Flask, flash, redirect, request, session, url_for
|
|
from ldap3.core.exceptions import LDAPException
|
|
|
|
from .helpers.ldap import login_required, try_auth, get_user, template, update_user
|
|
|
|
app = Flask(__name__)
|
|
app.secret_key = environ.get("FLASK_SECRET_KEY", default="test")
|
|
|
|
with open(environ["APP_CONFIG"]) as f:
|
|
APP_CONFIG = load(f)
|
|
|
|
|
|
@app.route("/")
|
|
def slash():
|
|
return redirect(url_for("login"))
|
|
|
|
|
|
@app.route("/login", methods=["GET", "POST"])
|
|
def login():
|
|
session["is_logged_in"] = False
|
|
|
|
if request.method == "POST":
|
|
if try_auth(
|
|
request.form["username"],
|
|
request.form["password"],
|
|
):
|
|
session["is_logged_in"] = True
|
|
session["username"] = request.form["username"]
|
|
session["password"] = request.form["password"]
|
|
|
|
flash("logged in")
|
|
|
|
return redirect(url_for("selfservice"))
|
|
else:
|
|
flash("username or password is wrong")
|
|
|
|
return template(None, "login.html")
|
|
|
|
|
|
@app.route("/logout")
|
|
def logout():
|
|
session["is_logged_in"] = False
|
|
session["username"] = ""
|
|
session["password"] = ""
|
|
|
|
flash("logged out")
|
|
|
|
return redirect(url_for("login"))
|
|
|
|
|
|
@app.route("/selfservice", methods=["GET", "POST"])
|
|
@login_required
|
|
def selfservice(ldap):
|
|
if request.method == "POST":
|
|
try:
|
|
update_user(
|
|
ldap,
|
|
session["username"],
|
|
{
|
|
"givenName": request.form["givenName"],
|
|
"sn": request.form["sn"],
|
|
"cn": "{} {}".format(
|
|
request.form["givenName"],
|
|
request.form["sn"],
|
|
),
|
|
"mail": request.form["mail"]
|
|
},
|
|
)
|
|
flash("data updated")
|
|
return redirect(url_for("selfservice"))
|
|
except LDAPException as e:
|
|
app.logger.error(
|
|
"Updating {} failed: {}\n{}".format(
|
|
APP_CONFIG["template"]["user_dn"].format(session["username"]),
|
|
repr(e),
|
|
repr(request.form),
|
|
),
|
|
)
|
|
flash(e)
|
|
|
|
return template(ldap, "selfservice.html")
|