summaryrefslogtreecommitdiffstats
path: root/accounts/utils
diff options
context:
space:
mode:
authorJonah BrĂ¼chert <jbb@kaidan.im>2024-03-28 06:22:55 +0100
committerJonah BrĂ¼chert <jbb@kaidan.im>2024-03-28 16:57:21 +0100
commita3f0c006b5fb5beab1704aad56777dcd98c42efb (patch)
tree2a2acb62303c25a299aea4030eff55bca7e28650 /accounts/utils
parentd5977387f3e6716cc7594dc872539ccd7f130524 (diff)
downloadweb-a3f0c006b5fb5beab1704aad56777dcd98c42efb.tar.gz
web-a3f0c006b5fb5beab1704aad56777dcd98c42efb.tar.bz2
web-a3f0c006b5fb5beab1704aad56777dcd98c42efb.zip
Add some type annotations
Diffstat (limited to 'accounts/utils')
-rw-r--r--accounts/utils/__init__.py14
-rw-r--r--accounts/utils/confirmation.py6
-rw-r--r--accounts/utils/console.py1
-rw-r--r--accounts/utils/login.py17
-rw-r--r--accounts/utils/sessions.py12
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()