ldap-frontend/ldap_frontend/__init__.py
2021-12-21 08:30:36 +01:00

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