From a3f0c006b5fb5beab1704aad56777dcd98c42efb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonah=20Br=C3=BCchert?= Date: Thu, 28 Mar 2024 06:22:55 +0100 Subject: Add some type annotations --- accounts/views/default/__init__.py | 56 ++++++++++++++++++++------------------ 1 file changed, 30 insertions(+), 26 deletions(-) (limited to 'accounts/views/default') diff --git a/accounts/views/default/__init__.py b/accounts/views/default/__init__.py index 1854c46..0b7065d 100644 --- a/accounts/views/default/__init__.py +++ b/accounts/views/default/__init__.py @@ -3,10 +3,11 @@ from copy import deepcopy from flask import Blueprint -from flask import current_app, redirect, render_template, request, g, \ +from flask import redirect, render_template, request, \ flash, url_for -from flask_login import login_required, login_user, logout_user, current_user +from flask_login import login_required, login_user, current_user from werkzeug.exceptions import Forbidden +from werkzeug import Response from accounts.forms import RegisterForm, RegisterCompleteForm, \ LostPasswordForm, SettingsForm @@ -14,6 +15,9 @@ from accounts.utils import templated from accounts.utils.confirmation import Confirmation from accounts.utils.login import logout_required from accounts.models import Account +from accounts.app import accounts_app + +from typing import Union bp = Blueprint('default', __name__) @@ -22,11 +26,11 @@ bp = Blueprint('default', __name__) @bp.route('/register', methods=['GET', 'POST']) @templated('register.html') @logout_required -def register(): +def register() -> Union[dict, Response]: form = RegisterForm() if form.validate_on_submit(): - current_app.mail_backend.send(form.mail.data, 'mail/register.txt', - username=form.username.data) + accounts_app.mail_backend.send(form.mail.data, 'mail/register.txt', + username=form.username.data) flash('Es wurde eine E-Mail an die angegebene Adresse geschickt, ' 'um diese zu überprüfen. Bitte folge den Anweisungen in der ' @@ -40,14 +44,14 @@ def register(): @bp.route('/register/', methods=['GET', 'POST']) @templated('register_complete.html') @logout_required -def register_complete(token): +def register_complete(token: str): #TODO: check for double uids and mail username, mail = Confirmation('register').loads_http(token, max_age=3*24*60*60) try: - current_app.user_backend.get_by_uid(username) - current_app.user_backend.get_by_mail(mail) - except current_app.user_backend.NoSuchUserError: + accounts_app.user_backend.get_by_uid(username) + accounts_app.user_backend.get_by_mail(mail) + except accounts_app.user_backend.NoSuchUserError: pass else: flash('Du hast den Benutzer bereits angelegt! Du kannst dich jetzt einfach einloggen:') @@ -56,11 +60,11 @@ def register_complete(token): form = RegisterCompleteForm() if form.validate_on_submit(): user = Account(username, mail, password=form.password.data) - current_app.user_backend.register(user) + accounts_app.user_backend.register(user) login_user(user) - current_app.mail_backend.send( - current_app.config['MAIL_REGISTER_NOTIFY'], + accounts_app.mail_backend.send( + accounts_app.config['MAIL_REGISTER_NOTIFY'], 'mail/register_notify.txt', username=username, mail=mail) @@ -83,7 +87,7 @@ def lost_password(): if form.validate_on_submit(): #TODO: make the link only usable once (e.g include a hash of the old pw) # atm the only thing we do is make the link valid for only little time - current_app.mail_backend.send( + accounts_app.mail_backend.send( form.user.mail, 'mail/lost_password.txt', username=form.user.uid) flash('Wir haben dir eine E-Mail mit einem Link zum Passwort ändern ' @@ -97,14 +101,14 @@ def lost_password(): @bp.route('/lost_password/', methods=['GET', 'POST']) @templated('lost_password_complete.html') @logout_required -def lost_password_complete(token): +def lost_password_complete(token: str): (username,) = Confirmation('lost_password').loads_http(token, max_age=4*60*60) form = RegisterCompleteForm() if form.validate_on_submit(): - user = current_app.user_backend.get_by_uid(username) + user = accounts_app.user_backend.get_by_uid(username) user.change_password(form.password.data) - current_app.user_backend.update(user, as_admin=True) + accounts_app.user_backend.update(user, as_admin=True) login_user(user) flash('Passwort geändert.', 'success') @@ -120,13 +124,13 @@ def lost_password_complete(token): @bp.route('/', methods=['GET', 'POST']) @templated('index.html') @login_required -def index(): +def index() -> Union[Response, dict]: form = SettingsForm(mail=current_user.mail) if form.validate_on_submit(): changed = False if request.form.get('submit_services'): - for service in current_app.all_services: + for service in accounts_app.all_services: field = form.get_servicedelete(service.id) if field.data: current_user.reset_password(service.id) @@ -134,7 +138,7 @@ def index(): elif request.form.get('submit_main'): if form.mail.data and form.mail.data != current_user.mail: - current_app.mail_backend.send( + accounts_app.mail_backend.send( form.mail.data, 'mail/change_mail.txt', username=current_user.uid) @@ -148,21 +152,21 @@ def index(): flash('Passwort geändert', 'success') changed = True - for service in current_app.all_services: + for service in accounts_app.all_services: field = form.get_servicepassword(service.id) if field.data: changed = True current_user.change_password(field.data, None, service.id) if changed: - current_app.user_backend.update(current_user) + accounts_app.user_backend.update(current_user) login_user(current_user) return redirect(url_for('.index')) else: flash('Nichts geändert.') - services = deepcopy(current_app.all_services) + services = deepcopy(accounts_app.all_services) for s in services: s.changed = s.id in current_user.services @@ -174,19 +178,19 @@ def index(): @bp.route('/change_mail/') @login_required -def change_mail(token): +def change_mail(token: str): username, mail = Confirmation('change_mail').loads_http(token, max_age=3*24*60*60) if current_user.uid != username: raise Forbidden('Bitte logge dich als der Benutzer ein, dessen E-Mail-Adresse du ändern willst.') - results = current_app.user_backend.find_by_mail(mail) + results = accounts_app.user_backend.find_by_mail(mail) for user in results: if user.uid != current_user.uid: raise Forbidden('Diese E-Mail-Adresse wird schon von einem anderen account benutzt!') current_user.change_email(mail) - current_app.user_backend.update(current_user) + accounts_app.user_backend.update(current_user) flash('E-Mail-Adresse geändert.', 'success') return redirect(url_for('.index')) @@ -196,7 +200,7 @@ def change_mail(token): @templated('about.html') def about(): return { - 'app': current_app, + 'app': accounts_app, } -- cgit v1.2.3-1-g7c22