summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexander Sulfrian <alexander@sulfrian.net>2016-01-25 01:50:44 +0100
committerAlexander Sulfrian <alexander@sulfrian.net>2016-02-02 04:22:17 +0100
commitca5e2f13aa205f71f9cb95fc0f05b2df8b03fc5b (patch)
treea5bbdfce5a2d7bdccc4439e81f72833dc6523b1f
parent0f5553f09a8297738430e4cbc50e3bff48895ad6 (diff)
downloadweb-ca5e2f13aa205f71f9cb95fc0f05b2df8b03fc5b.tar.gz
web-ca5e2f13aa205f71f9cb95fc0f05b2df8b03fc5b.tar.bz2
web-ca5e2f13aa205f71f9cb95fc0f05b2df8b03fc5b.zip
Create new login blueprint
The login and logout view are now in the login blueprint.
-rw-r--r--accounts/__init__.py5
-rw-r--r--accounts/forms.py5
-rw-r--r--accounts/templates/base.html4
-rw-r--r--accounts/templates/login/login.html (renamed from accounts/templates/login.html)16
-rw-r--r--accounts/views/default/__init__.py36
-rw-r--r--accounts/views/login/__init__.py38
-rw-r--r--accounts/views/login/forms.py8
7 files changed, 67 insertions, 45 deletions
diff --git a/accounts/__init__.py b/accounts/__init__.py
index 7d3105b..e6927b0 100644
--- a/accounts/__init__.py
+++ b/accounts/__init__.py
@@ -6,11 +6,12 @@ import account
from utils import *
from utils.sessions import EncryptedSessionInterface
from utils.login import parse_userid
-from views import default, admin
+from views import default, login, admin
app = Flask(__name__)
app.register_blueprint(default.bp)
+app.register_blueprint(login.bp)
app.register_blueprint(admin.bp, url_prefix='/admin')
app.config.from_object('accounts.default_settings')
app.config.from_envvar('SPLINE_ACCOUNT_WEB_SETTINGS', silent=True)
@@ -27,7 +28,7 @@ if app.config.get('USERNAME_BLACKLIST_FILE'):
login_manager = LoginManager()
login_manager.init_app(app)
-login_manager.login_view = 'default.login'
+login_manager.login_view = 'login.login'
@login_manager.user_loader
def load_user(user_id):
diff --git a/accounts/forms.py b/accounts/forms.py
index bcbe747..bdef0ed 100644
--- a/accounts/forms.py
+++ b/accounts/forms.py
@@ -65,11 +65,6 @@ class RegisterCompleteForm(Form):
# n.b. this form is also used in lost_password_complete
-class LoginForm(Form):
- username = TextField(u'Benutzername')
- password = PasswordField('Passwort', [validators.Required()])
-
-
class LostPasswordForm(Form):
username_or_mail = TextField(u'Benutzername oder E-Mail')
diff --git a/accounts/templates/base.html b/accounts/templates/base.html
index 084e747..dbb3d0b 100644
--- a/accounts/templates/base.html
+++ b/accounts/templates/base.html
@@ -38,10 +38,10 @@
{%- if current_user.uid in config.get('ADMIN_USERS', []) %}
<li><a href="{{ url_for('admin.index') }}">Admin</a></li>
{%- endif %}
- <li><a href="{{ url_for('default.logout') }}">Abmelden</a></li>
+ <li><a href="{{ url_for('login.logout') }}">Abmelden</a></li>
{%- else %}
<li>Nicht angemeldet</li>
- <li><a href="{{ url_for('default.login') }}">Login</a></li>
+ <li><a href="{{ url_for('login.login') }}">Login</a></li>
{%- endif %}
</ul>
</nav>
diff --git a/accounts/templates/login.html b/accounts/templates/login/login.html
index 34fb6d0..dadcb1b 100644
--- a/accounts/templates/login.html
+++ b/accounts/templates/login/login.html
@@ -5,8 +5,8 @@
<p>
Willkommen bei <strong>spline accounts</strong>.
Melde dich an,
- <a href="{{ url_for('.about') }}">informier dich</a>, oder
- <a href="{{ url_for('.register') }}">leg einen Account an</a>.
+ <a href="{{ url_for('default.about') }}">informier dich</a>, oder
+ <a href="{{ url_for('default.register') }}">leg einen Account an</a>.
</p>
<form action="{{ url_for('.login') }}" method="post" class="form-horizontal">
@@ -14,8 +14,16 @@
{{ render_field(field) }}
{% endfor %}
{{ render_submit(value='Login') }}
- <p class="form-actions"><a href="{{ url_for('.register') }}">Account erstellen</a></div>
- <p class="form-actions"><a href="{{ url_for('.lost_password') }}">Passwort oder Benutzername vergessen</a></div>
+ <p class="form-actions">
+ <a href="{{ url_for('default.register') }}">
+ Account erstellen
+ </a>
+ </p>
+ <p class="form-actions">
+ <a href="{{ url_for('default.lost_password') }}">
+ Passwort oder Benutzername vergessen
+ </a>
+ </p>
</form>
{%- endblock %}
diff --git a/accounts/views/default/__init__.py b/accounts/views/default/__init__.py
index 88105bd..edcac21 100644
--- a/accounts/views/default/__init__.py
+++ b/accounts/views/default/__init__.py
@@ -6,7 +6,7 @@ from flask import Blueprint
from flask import current_app, redirect, request, g, flash, url_for
from flask.ext.login import login_required, login_user, logout_user, current_user
-from accounts.forms import LoginForm, RegisterForm, RegisterCompleteForm, \
+from accounts.forms import RegisterForm, RegisterCompleteForm, \
LostPasswordForm, SettingsForm
from accounts.utils import *
from accounts.utils.confirmation import Confirmation
@@ -17,27 +17,6 @@ from accounts.models import Account
bp = Blueprint('default', __name__)
-@bp.route('/login', methods=['GET', 'POST'])
-@templated('login.html')
-def login():
- if current_user.is_authenticated:
- return redirect(url_for('.index'))
-
- form = LoginForm(request.form)
- if form.validate_on_submit():
- try:
- user = current_app.user_backend.auth(form.username.data,
- form.password.data)
- login_user(user)
- flash(u'Erfolgreich eingeloggt', 'success')
- return redirect(url_for('.index'))
- except (current_app.user_backend.NoSuchUserError,
- current_app.user_backend.InvalidPasswordError):
- flash(u'Ungültiger Benutzername und/oder Passwort', 'error')
-
- return {'form': form}
-
-
@bp.route('/register', methods=['GET', 'POST'])
@templated('register.html')
@logout_required
@@ -50,7 +29,7 @@ def register():
u'um diese zu überprüfen. Bitte folge den Anweisungen in der '
u'E-Mail.', 'success')
- return redirect(url_for('.login'))
+ return redirect(url_for('.index'))
return {'form': form}
@@ -69,7 +48,7 @@ def register_complete(token):
pass
else:
flash(u'Du hast den Benutzer bereits angelegt! Du kannst dich jetzt einfach einloggen:')
- return redirect(url_for('.login'))
+ return redirect(url_for('.index'))
form = RegisterCompleteForm(request.form)
if form.validate_on_submit():
@@ -120,7 +99,7 @@ def lost_password():
flash(u'Wir haben dir eine E-Mail mit einem Link zum Passwort ändern '
u'geschickt. Bitte folge den Anweisungen in der E-Mail.', 'success')
- return redirect(url_for('.login'))
+ return redirect(url_for('.index'))
return {'form': form}
@@ -229,13 +208,6 @@ def change_mail(token):
return redirect(url_for('.index'))
-@bp.route('/logout')
-def logout():
- logout_user()
- flash(u'Erfolgreich ausgeloggt.', 'success')
- return redirect(url_for('.login'))
-
-
@bp.route('/about')
@templated('about.html')
def about():
diff --git a/accounts/views/login/__init__.py b/accounts/views/login/__init__.py
new file mode 100644
index 0000000..4546b14
--- /dev/null
+++ b/accounts/views/login/__init__.py
@@ -0,0 +1,38 @@
+# -*- coding: utf-8 -*-
+from __future__ import absolute_import
+
+from flask import Blueprint
+from flask import current_app, redirect, request, g, flash, render_template, url_for
+from flask.ext.login import login_user, logout_user, current_user
+
+from .forms import LoginForm
+
+
+bp = Blueprint('login', __name__)
+
+
+@bp.route('/login', methods=['GET', 'POST'])
+def login():
+ if current_user.is_authenticated:
+ return redirect(url_for('default.index'))
+
+ form = LoginForm(request.form)
+ if form.validate_on_submit():
+ try:
+ user = current_app.user_backend.auth(form.username.data,
+ form.password.data)
+ login_user(user)
+ flash(u'Erfolgreich eingeloggt', 'success')
+ return redirect(url_for('default.index'))
+ except (current_app.user_backend.NoSuchUserError,
+ current_app.user_backend.InvalidPasswordError):
+ flash(u'Ungültiger Benutzername und/oder Passwort', 'error')
+
+ return render_template("login/login.html", form=form)
+
+
+@bp.route('/logout')
+def logout():
+ logout_user()
+ flash(u'Erfolgreich ausgeloggt.', 'success')
+ return redirect(url_for('.login'))
diff --git a/accounts/views/login/forms.py b/accounts/views/login/forms.py
new file mode 100644
index 0000000..a82fa39
--- /dev/null
+++ b/accounts/views/login/forms.py
@@ -0,0 +1,8 @@
+# -*- coding: utf-8 -*-
+from flask.ext.wtf import Form
+from wtforms import TextField, PasswordField, validators
+
+
+class LoginForm(Form):
+ username = TextField(u'Benutzername')
+ password = PasswordField('Passwort', [validators.Required()])