# -*- coding: utf-8 -*- import flaskext_compat flaskext_compat.activate() import account import os from flask import flash, Flask, g, redirect, request, session, url_for from utils import templated, login_required, encrypt_password, decrypt_password, login_user, logout_user from forms import RegisterForm, LoginForm, SettingsForm app = Flask(__name__) app.config.from_object('default_settings') if 'SPLINE_ACCOUNT_WEB_SETTINGS' in os.environ: app.config.from_envvar('SPLINE_ACCOUNT_WEB_SETTINGS') @app.before_request def ldap_connect(): g.ldap = account.AccountService(account.LDAP_HOST, account.LDAP_BASE_DN, account.LDAP_ADMIN_USER, account.LDAP_ADMIN_PASS, account.SERVICES) if 'username' in session and 'password' in session: try: g.user = g.ldap.auth(session['username'], decrypt_password(session['password'])) except ldap.INVALID_CREDENTIALS: # we had crap in the session, delete it logout_user() @app.route('/', methods=['GET', 'POST']) @templated('index.html') def index(): form = LoginForm(request.form) if request.method == 'POST' and form.validate(): if login_user(form.username.data, form.password.data): flash(u'Erfolgreich eingeloggt (als %s)' % session['username']) return redirect(url_for('settings')) else: flash(u'Ungültiger Benutzername und/oder Passwort', 'error') return {'form': form} @app.route('/register', methods=['GET', 'POST']) @templated('register.html') def register(): form = RegisterForm(request.form) if request.method == 'POST' and form.validate(): username = form.username.data mail = form.mail.data password = form.password.data return '

501 Not Implemented

' return {'form': form} @app.route('/settings', methods=['GET', 'POST']) @templated('settings.html') @login_required def settings(): form = SettingsForm(request.form, mail=g.user.mail) if request.method == 'POST' and form.validate(): flash(u'Gespeichert. Nicht.') return redirect(url_for('index')) return {'form': form} @app.route('/logout') def logout(): logout_user() return redirect(url_for('index')) @app.route('/debug') def debug(): raise Exception() if __name__ == '__main__': app.run(debug=True) # wir brauchen: # registrieren # login # passwort ändern (master-passwort, einzelne) # email ändern # später: # account löschen # openid-provider (ggf mehr Details: Realname, Zeitzone, ...)