diff options
author | Alexander Sulfrian <alexander@sulfrian.net> | 2016-01-25 00:15:12 +0100 |
---|---|---|
committer | Alexander Sulfrian <alexander@sulfrian.net> | 2016-02-02 04:22:16 +0100 |
commit | 7619809115e6fdc3d7df8705abb20f228863e7c2 (patch) | |
tree | 5afaeeb9020d418143b7cea3e1e2540efcc2140e /accounts/utils | |
parent | 753c03b3477071279299ca47ce76f5fcd346d5bd (diff) | |
download | web-7619809115e6fdc3d7df8705abb20f228863e7c2.tar.gz web-7619809115e6fdc3d7df8705abb20f228863e7c2.tar.bz2 web-7619809115e6fdc3d7df8705abb20f228863e7c2.zip |
Use Flask-Login for login handling
Diffstat (limited to 'accounts/utils')
-rw-r--r-- | accounts/utils/__init__.py | 49 | ||||
-rw-r--r-- | accounts/utils/login.py | 24 |
2 files changed, 25 insertions, 48 deletions
diff --git a/accounts/utils/__init__.py b/accounts/utils/__init__.py index 4529796..06cf969 100644 --- a/accounts/utils/__init__.py +++ b/accounts/utils/__init__.py @@ -4,6 +4,7 @@ import re from functools import wraps from flask import current_app, flash, g, redirect, render_template, request, session from flask import url_for as flask_url_for +from flask.ext.login import current_user from werkzeug.exceptions import Forbidden from wtforms.validators import Regexp, ValidationError @@ -31,54 +32,6 @@ def templated(template=None): return templated__ return templated_ -def login_required(f): - @wraps(f) - def login_required_(*args, **kwargs): - if not g.user: - raise Forbidden(u'Bitte einloggen!') - return f(*args, **kwargs) - return login_required_ - -def admin_required(f): - @wraps(f) - def admin_required_(*args, **kwargs): - if not g.user: - raise Forbidden(u'Bitte einloggen!') - if g.user.uid not in current_app.config.get('ADMIN_USERS', []): - raise Forbidden(u'Du bist kein Admin.') - return f(*args, **kwargs) - return admin_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): - username = ensure_utf8(username) - password = ensure_utf8(password) - - try: - g.user = current_app.user_backend.auth(username, password) - except (current_app.user_backend.NoSuchUserError, - current_app.user_backend.InvalidPasswordError): - return False - - session['username'] = username - session['password'] = password - - return True - - -def logout_user(): - session.pop('username', None) - session.pop('password', None) - g.user = None - def ensure_utf8(s): if isinstance(s, unicode): diff --git a/accounts/utils/login.py b/accounts/utils/login.py new file mode 100644 index 0000000..9888e89 --- /dev/null +++ b/accounts/utils/login.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- +from flask.ext.login import current_user +from functools import wraps +from werkzeug.exceptions import Forbidden +from itsdangerous import base64_decode, base64_encode, compact_json + + +def create_userid(username, password): + userid = (username, password) + return base64_encode(compact_json.dumps(userid)) + + +def parse_userid(value): + return compact_json.loads(base64_decode(value)) + + +def logout_required(f): + @wraps(f) + def logout_required_(*args, **kwargs): + if current_user.is_authenticated: + raise Forbidden(u'Diese Seite ist nur für nicht eingeloggte Benutzer gedacht!') + return f(*args, **kwargs) + return logout_required_ + |