diff options
Diffstat (limited to 'accounts/utils')
-rw-r--r-- | accounts/utils/__init__.py | 14 | ||||
-rw-r--r-- | accounts/utils/confirmation.py | 6 | ||||
-rw-r--r-- | accounts/utils/console.py | 1 | ||||
-rw-r--r-- | accounts/utils/login.py | 17 | ||||
-rw-r--r-- | accounts/utils/sessions.py | 12 |
5 files changed, 25 insertions, 25 deletions
diff --git a/accounts/utils/__init__.py b/accounts/utils/__init__.py index 8d49363..6adf317 100644 --- a/accounts/utils/__init__.py +++ b/accounts/utils/__init__.py @@ -1,12 +1,14 @@ # -*- coding: utf-8 -*- import importlib from functools import wraps -from flask import render_template, request +from flask import render_template, request, Flask from wtforms.validators import Regexp, ValidationError +from typing import Optional + # using http://flask.pocoo.org/docs/patterns/viewdecorators/ -def templated(template=None): +def templated(template: Optional[str] = None): def templated_(f): @wraps(f) def templated__(*args, **kwargs): @@ -24,12 +26,6 @@ def templated(template=None): return templated_ -def ensure_utf8(s): - if isinstance(s, str): - s = s.encode('utf8') - return s - - class NotRegexp(Regexp): """ Like wtforms.validators.Regexp, but rejects data that DOES match the regex. @@ -42,7 +38,7 @@ class NotRegexp(Regexp): raise ValidationError(self.message) -def get_backend(path, app): +def get_backend(path: str, app: Flask): module = path.rsplit(".", 1).pop() class_name = '%sBackend' % module.title() backend_class = getattr(importlib.import_module(path), class_name) diff --git a/accounts/utils/confirmation.py b/accounts/utils/confirmation.py index 79ac7dc..b75716d 100644 --- a/accounts/utils/confirmation.py +++ b/accounts/utils/confirmation.py @@ -1,14 +1,14 @@ # -*- coding: utf-8 -*- -from flask import current_app from itsdangerous import BadSignature, SignatureExpired, URLSafeTimedSerializer from werkzeug.exceptions import Forbidden +from accounts.app import accounts_app class Confirmation(URLSafeTimedSerializer): - def __init__(self, realm, key=None, **kwargs): + def __init__(self, realm: str, key=None, **kwargs): if key is None: - key = current_app.config['SECRET_KEY'] + key = accounts_app.config['SECRET_KEY'] super(Confirmation, self).__init__(key, salt=realm, **kwargs) def loads_http(self, s, max_age=None, return_timestamp=False, salt=None): diff --git a/accounts/utils/console.py b/accounts/utils/console.py index eddc25e..ef8b4fd 100644 --- a/accounts/utils/console.py +++ b/accounts/utils/console.py @@ -48,7 +48,6 @@ class TablePrinter(object): in zip(list(zip(*rows)), self.widths)] self._update_format_string() - def _update_format_string(self): sep = ' %s ' % self.separator self.format_string = '%s %s %s' % ( diff --git a/accounts/utils/login.py b/accounts/utils/login.py index bd661b2..0cd1dc4 100644 --- a/accounts/utils/login.py +++ b/accounts/utils/login.py @@ -1,10 +1,11 @@ # -*- coding: utf-8 -*- -from flask import current_app from flask_login import LoginManager, current_user from functools import wraps from werkzeug.exceptions import Forbidden from itsdangerous import base64_decode, base64_encode import json +import flask_login.login_manager +from accounts.app import accounts_app class _compact_json: @@ -19,29 +20,29 @@ class _compact_json: return json.dumps(obj, **kwargs) -def create_login_manager(): +def create_login_manager() -> flask_login.login_manager.LoginManager: login_manager = LoginManager() login_manager.login_message = 'Bitte einloggen' login_manager.login_view = 'login.login' @login_manager.user_loader - def load_user(user_id): + def load_user(user_id: str): try: username, password = parse_userid(user_id) - return current_app.user_backend.auth(username, password) - except (current_app.user_backend.NoSuchUserError, - current_app.user_backend.InvalidPasswordError): + return accounts_app.user_backend.auth(username, password) + except (accounts_app.user_backend.NoSuchUserError, + accounts_app.user_backend.InvalidPasswordError): return None return login_manager -def create_userid(username, password): +def create_userid(username: str, password: str): userid = (username, password) return base64_encode(_compact_json.dumps(userid)) -def parse_userid(value): +def parse_userid(value: str): return _compact_json.loads(base64_decode(value)) diff --git a/accounts/utils/sessions.py b/accounts/utils/sessions.py index 5d01b5d..e156f0c 100644 --- a/accounts/utils/sessions.py +++ b/accounts/utils/sessions.py @@ -3,9 +3,12 @@ from Crypto import Random from Crypto.Cipher import AES -from flask import current_app +from flask import Flask from flask.sessions import TaggedJSONSerializer, SecureCookieSessionInterface from itsdangerous import BadPayload +from accounts.app import accounts_app + +from typing import cast def _pad(value, block_size): @@ -25,7 +28,7 @@ class EncryptedSerializer(TaggedJSONSerializer): self.block_size = AES.block_size def _cipher(self, iv): - key = current_app.config['SESSION_ENCRYPTION_KEY'] + key = accounts_app.config['SESSION_ENCRYPTION_KEY'] assert len(key) == 32 return AES.new(key, AES.MODE_CBC, iv) @@ -53,11 +56,12 @@ class EncryptedSerializer(TaggedJSONSerializer): class EncryptedSessionInterface(SecureCookieSessionInterface): serializer = EncryptedSerializer() - def open_session(self, app, request): + def open_session(self, app: Flask, request): session = None try: parent = super(EncryptedSessionInterface, self) - session = parent.open_session(app, request) + session = cast(EncryptedSessionInterface, parent) \ + .open_session(app, request) except BadPayload: session = self.session_class() |