summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--account.py2
-rw-r--r--app.py7
-rw-r--r--static/bootstrap-form.css67
-rw-r--r--templates/_macros.html17
-rw-r--r--templates/base.html6
-rw-r--r--templates/index.html10
-rw-r--r--templates/register.html13
-rw-r--r--templates/register_complete.html23
-rw-r--r--templates/settings.html15
-rw-r--r--utils.py10
10 files changed, 125 insertions, 45 deletions
diff --git a/account.py b/account.py
index 0b811a9..d4e56a6 100644
--- a/account.py
+++ b/account.py
@@ -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()
diff --git a/app.py b/app.py
index bb54487..f1f9ef1 100644
--- a/app.py
+++ b/app.py
@@ -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>
diff --git a/utils.py b/utils.py
index 15e3047..6f81da8 100644
--- a/utils.py
+++ b/utils.py
@@ -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: