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