diff options
-rw-r--r-- | account.py | 2 | ||||
-rw-r--r-- | app.py | 7 | ||||
-rw-r--r-- | static/bootstrap-form.css | 67 | ||||
-rw-r--r-- | templates/_macros.html | 17 | ||||
-rw-r--r-- | templates/base.html | 6 | ||||
-rw-r--r-- | templates/index.html | 10 | ||||
-rw-r--r-- | templates/register.html | 13 | ||||
-rw-r--r-- | templates/register_complete.html | 23 | ||||
-rw-r--r-- | templates/settings.html | 15 | ||||
-rw-r--r-- | utils.py | 10 |
10 files changed, 125 insertions, 45 deletions
@@ -93,7 +93,7 @@ class AccountService: accounts = [] for a in data[1:]: - accounts.append(Account(a[1]['uid'],a[1]['mail'])) + accounts.append(Account(a[1]['uid'], a[1]['mail'])) self._unbind() @@ -49,7 +49,9 @@ def index(): @app.route('/register', methods=['GET', 'POST']) @templated('register.html') +@logout_required def register(): + #TODO: check for double uids form = RegisterForm(request.form) if request.method == 'POST' and form.validate(): username = form.username.data @@ -75,7 +77,9 @@ def register(): @app.route('/register/<token>', methods=['GET', 'POST']) @templated('register_complete.html') +@logout_required def register_complete(token): + #TODO: check for double uids username, mail = http_verify_confirmation('register', token.encode('ascii'), timeout=3*24*60*60) @@ -146,8 +150,8 @@ def settings(): 'services': services, } -@login_required @app.route('/settings/change_mail/<token>') +@login_required def change_mail(token): username, mail = http_verify_confirmation('change_mail', token.encode('ascii'), timeout=3*24*60*60) @@ -163,6 +167,7 @@ def change_mail(token): @app.route('/logout') def logout(): logout_user() + flash(u'Erfolgreich ausgeloggt.', 'success') return redirect(url_for('index')) diff --git a/static/bootstrap-form.css b/static/bootstrap-form.css new file mode 100644 index 0000000..8c84910 --- /dev/null +++ b/static/bootstrap-form.css @@ -0,0 +1,67 @@ +/*! + * based on + * Bootstrap v2.1.1 + * + * Copyright 2012 Twitter, Inc + * Licensed under the Apache License v2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Designed and built with all the love in the world @twitter by @mdo and @fat. + */ + + +.form-horizontal .control-label, +.form-horizontal label { + float: left; + width: 10em; + text-align: right; +} + +.form-horizontal input, +.form-horizontal textarea, +.form-horizontal select { + display: inline-block; + *display: inline; + /* IE7 inline-block hack */ + + *zoom: 1; + margin-bottom: 0; + vertical-align: middle; +} +.control-group { + margin-bottom: .4em; +} +.form-horizontal .control-group:before, +.form-horizontal .control-group:after { + display: table; + content: ""; + line-height: 0; +} +.form-horizontal .control-group:after { + clear: both; +} +.form-horizontal .control-label { + float: left; + width: 10em; + text-align: right; +} +.form-horizontal .controls { + *display: inline-block; + *padding-left: 20px; + margin-left: 11em; + *margin-left: 0; +} +.form-horizontal .controls:first-child { + *padding-left: 11em; +} +.form-horizontal .help-block { + margin-bottom: 0; +} +.form-horizontal input + .help-block, +.form-horizontal select + .help-block, +.form-horizontal textarea + .help-block { + margin-top: 10px; +} +.form-horizontal .form-actions { + padding-left: 11em; +} diff --git a/templates/_macros.html b/templates/_macros.html index 2c933be..8298040 100644 --- a/templates/_macros.html +++ b/templates/_macros.html @@ -1,16 +1,19 @@ {% macro render_field(field) %} - <dt>{{ field.label }} - <dd>{{ field(**kwargs)|safe }} - {% if field.errors|length == 1 %} +<div class="control-group"> + {{ field.label }} + <div class="controls"> + {{ field(**kwargs)|safe }} + {%- if field.errors|length == 1 %} <div class="errors"> {{ field.errors.0 }} </div> - {% elif field.errors %} + {% elif field.errors %} <ul class="errors"> {% for error in field.errors %} <li>{{ error }}</li> {% endfor %} </ul> - {% endif %} - </dd> -{% endmacro %} + {% endif %} + </div> +</div> +{%- endmacro %} diff --git a/templates/base.html b/templates/base.html index 1886d12..c3ed80b 100644 --- a/templates/base.html +++ b/templates/base.html @@ -1,4 +1,4 @@ -{%- set styles = ['layout.css'] + styles|default([]) %} +{%- set styles = ['layout.css', 'bootstrap-form.css'] + styles|default([]) %} {%- set scripts = [] + scripts|default([]) %} <!doctype html> <html> @@ -19,11 +19,13 @@ <h2>{{ title }}</h2> {% endif %} + {%- if not no_login_message %} {%- if g.user %} <p>Logged in as {{ g.user.uid }}. <a href="{{ url_for('logout') }}">Log out</a></p> {%- else %} <p>Not logged in. <a href="{{ url_for('index') }}">Log in</a></p> {%- endif %} + {%- endif %} {% with messages = get_flashed_messages(with_categories=true) %} {% if messages %} @@ -36,7 +38,5 @@ {% endwith %} {% block content %}{% endblock %} - - <pre>{{ session.__repr__() }}</pre> </body> </html> diff --git a/templates/index.html b/templates/index.html index 6147883..abcbb1d 100644 --- a/templates/index.html +++ b/templates/index.html @@ -6,13 +6,11 @@ <p>Hallo {{ session.username }}. <a href="{{ url_for('settings') }}">Einstellungen</a></p> {%- else %} <p><a href="/register">Account erstellen</a></p> -<form action="{{ url_for('index') }}" method="post"> - <dl> - {{ render_field(form.username) }} - {{ render_field(form.password) }} - </dl> +<form action="{{ url_for('index') }}" method="post" class="form-horizontal"> + {{ render_field(form.username) }} + {{ render_field(form.password) }} {{ form.csrf_token }} - <input type="submit" value="Login" /> + <div class="form-actions"><input type="submit" value="Login" /></div> </form> {%- endif %} {%- endblock %} diff --git a/templates/register.html b/templates/register.html index e04baac..cdd101d 100644 --- a/templates/register.html +++ b/templates/register.html @@ -1,14 +1,13 @@ {%- extends 'base.html' %} {%- from '_macros.html' import render_field %} {%- set title = 'Account erstellen' %} +{%- set no_login_message = true %} {%- block content %} -<form action="{{ url_for('register') }}" method="post"> - <dl> - {{ form.errors }} - {{ render_field(form.username) }} - {{ render_field(form.mail) }} - </dl> +<form action="{{ url_for('register') }}" method="post" class="form-horizontal"> + {{ form.errors }} + {{ render_field(form.username) }} + {{ render_field(form.mail) }} {{ form.csrf_token }} - <input type="submit" value="E-Mail-Adresse bestätigen" /> + <div class="form-actions"><input type="submit" value="E-Mail-Adresse bestätigen" /></div> </form> {%- endblock %} diff --git a/templates/register_complete.html b/templates/register_complete.html index f44e43a..06d2cd9 100644 --- a/templates/register_complete.html +++ b/templates/register_complete.html @@ -1,21 +1,24 @@ {%- extends 'base.html' %} {%- from '_macros.html' import render_field %} {%- set title = 'Account erstellen' %} +{%- set no_login_message = true %} {%- block content %} -<form action="{{ url_for('register_complete', token=token) }}" method="post"> +<form action="{{ url_for('register_complete', token=token) }}" method="post" class="form-horizontal"> <p> Deine E-Mail-Adresse wurde erfolgreich bestätigt. Bitte setze nun ein Passwort, um die Registrierung abzuschließen. </p> - <dl> - <dt>Benutzername</dt> - <dd><input readonly="readonly" value="{{ username }}" /></dd> - <dt>E-Mail-Adresse</dt> - <dd><input readonly="readonly" value="{{ mail }}" /></dd> - {{ render_field(form.password) }} - {{ render_field(form.password_confirm) }} - </dl> + <div class="control-group"> + <div class="control-label">Benutzername</div> + <div class="controls"><input readonly="readonly" value="{{ username }}" /></div> + </div> + <div class="control-group"> + <div class="control-label">E-Mail-Adresse</div> + <div class="controls"><input readonly="readonly" value="{{ mail }}" /></div> + </div> + {{ render_field(form.password) }} + {{ render_field(form.password_confirm) }} {{ form.csrf_token }} - <input type="submit" value="Registrieren" /> + <div class="form-actions"><input type="submit" value="Registrieren" /></div> </form> {%- endblock %} diff --git a/templates/settings.html b/templates/settings.html index 876d2f1..13d63f4 100644 --- a/templates/settings.html +++ b/templates/settings.html @@ -2,17 +2,14 @@ {%- from '_macros.html' import render_field %} {%- set title = 'Einstellungen' %} {%- block content %} -<form action="{{ url_for('settings') }}" method="post"> +<form action="{{ url_for('settings') }}" method="post" class="form-horizontal"> <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> + {{ render_field(form.old_password) }} + {{ render_field(form.mail) }} + {{ render_field(form.password) }} + {{ render_field(form.password_confirm) }} {{ form.csrf_token }} - <input type="submit" value="Speichern" /> + <div class="form-actions"><input type="submit" value="Speichern" /></div> <h2>Dienste verwalten</h2> <ul> @@ -41,10 +41,18 @@ def login_required(f): @wraps(f) def login_required_(*args, **kwargs): if not g.user: - raise Forbidden + raise Forbidden(u'Bitte einloggen!') return f(*args, **kwargs) return login_required_ +def logout_required(f): + @wraps(f) + def logout_required_(*args, **kwargs): + if g.user: + raise Forbidden(u'Diese Seite ist nur für nicht eingeloggte Benutzer gedacht!') + return f(*args, **kwargs) + return logout_required_ + def login_user(username, password): try: |