diff options
author | Marian Sigler <m@qjym.de> | 2012-09-21 01:00:39 +0200 |
---|---|---|
committer | Marian Sigler <m@qjym.de> | 2012-09-21 01:00:39 +0200 |
commit | 6280e6f19e5aea3c2fff7e95e053c1ba63f5c22f (patch) | |
tree | b601699a7c56c86829ac9a4f2ef88d95c3c797b0 | |
parent | 597db4fa95aab501de422f410c46a91bc6c6bbbd (diff) | |
download | web-6280e6f19e5aea3c2fff7e95e053c1ba63f5c22f.tar.gz web-6280e6f19e5aea3c2fff7e95e053c1ba63f5c22f.tar.bz2 web-6280e6f19e5aea3c2fff7e95e053c1ba63f5c22f.zip |
start with settings page
-rw-r--r-- | app.py | 12 | ||||
-rw-r--r-- | forms.py | 10 | ||||
-rw-r--r-- | templates/settings.html | 28 | ||||
-rw-r--r-- | utils.py | 27 |
4 files changed, 62 insertions, 15 deletions
@@ -6,7 +6,7 @@ flaskext_compat.activate() import os from flask import Flask, request, redirect, url_for, flash, session from utils import templated, login_required, encrypt_password, decrypt_password, login_user, logout_user -from forms import RegisterForm, LoginForm +from forms import RegisterForm, LoginForm, SettingsForm app = Flask(__name__) @@ -42,11 +42,17 @@ def register(): return {'form': form} -@app.route('/settings') + +@app.route('/settings', methods=['GET', 'POST']) @templated('settings.html') @login_required def settings(): - return {} + form = SettingsForm(request.form, mail='mail aus ldap #TODO') + if request.method == 'POST' and form.validate(): + flash(u'Gespeichert. Nicht.') + return redirect(url_for('index')) + + return {'form': form} @app.route('/logout') @@ -2,10 +2,10 @@ from flask.ext.wtf import Form, validators, TextField, PasswordField username = TextField('Benutzername', [validators.Length(min=4, max=20)]) +mail = TextField('E-Mail-Adresse', [validators.Email(), validators.Length(min=6, max=50)]) class RegisterForm(Form): username = username - mail = TextField('E-Mail-Adresse', [validators.Length(min=6, max=50)]) password = PasswordField('Passwort', [validators.Required(), validators.EqualTo('password_confirm', message=u'Passwörter stimmen nicht überein')]) password_confirm = PasswordField(u'Passwort bestätigen') @@ -14,3 +14,11 @@ class RegisterForm(Form): class LoginForm(Form): username = username password = PasswordField('Passwort', [validators.Required()]) + + +class SettingsForm(Form): + old_password = PasswordField('Passwort', [validators.Required()]) + password = PasswordField('Neues Passwort', [validators.Required(), + validators.EqualTo('password_confirm', message=u'Passwörter stimmen nicht überein')]) + password_confirm = PasswordField(u'Passwort bestätigen') + mail = mail diff --git a/templates/settings.html b/templates/settings.html new file mode 100644 index 0000000..addd137 --- /dev/null +++ b/templates/settings.html @@ -0,0 +1,28 @@ +{%- extends 'base.html' %} +{%- from '_macros.html' import render_field %} +{%- set title = 'Account erstellen' %} +{%- block content %} +<form action="" method="post"> + <h2>Globale Einstellungen ändern</h2> + <p> + <dl> + {{ render_field(form.old_password) }} + {{ render_field(form.mail) }} + {{ render_field(form.password) }} + {{ render_field(form.password_confirm) }} + </dl> + {{ form.csrf_token }} + <input type="submit" value="Speichern" /> + + <h2>Dienste verwalten</h2> + <ul> + {%- for service in services %} + <li> + <strong>{{ service.name }}</strong> + {%- if service.own_password %} + ändern, löschen + {%- else %} + setzen + {%- endif %} +</form> +{%- endblock %} @@ -1,15 +1,17 @@ # -*- coding: utf-8 -*- from functools import wraps -from flask import request, render_template, session +from flask import flash, request, redirect, render_template, session, url_for from random import randint from Crypto.Cipher import AES +from werkzeug.exceptions import Forbidden -# from http://flask.pocoo.org/docs/patterns/viewdecorators/#templating-decorator + +# using http://flask.pocoo.org/docs/patterns/viewdecorators/ def templated(template=None): - def decorator(f): + def templated_(f): @wraps(f) - def decorated_function(*args, **kwargs): + def templated__(*args, **kwargs): template_name = template if template_name is None: template_name = request.endpoint \ @@ -20,8 +22,16 @@ def templated(template=None): elif not isinstance(ctx, dict): return ctx return render_template(template_name, **ctx) - return decorated_function - return decorator + return templated__ + return templated_ + +def login_required(f): + @wraps(f) + def login_required_(*args, **kwargs): + if 'username' not in session: + raise Forbidden + return f(*args, **kwargs) + return login_required_ def login_user(username, password): @@ -64,10 +74,5 @@ def decrypt_password(ciphertext): return encryptor.decrypt(ciphertext[16:]).rstrip('\0') -def login_required(func): - #TODO - return func - - # circular import from app import app |