diff --git a/app/__init__.py b/app/__init__.py index 9a1f7df8..4649a090 100644 --- a/app/__init__.py +++ b/app/__init__.py @@ -31,25 +31,34 @@ def create_app(config_name): socketio.init_app( app, message_queue=app.config['NOPAQUE_SOCKETIO_MESSAGE_QUEUE_URI']) - with app.app_context(): - from .events import socketio as socketio_events - from .events import sqlalchemy as sqlalchemy_events - from .admin import bp as admin_blueprint - from .auth import bp as auth_blueprint - from .corpora import bp as corpora_blueprint - from .errors import bp as errors_blueprint - from .jobs import bp as jobs_blueprint - from .main import bp as main_blueprint - from .services import bp as services_blueprint - from .settings import bp as settings_blueprint + from .events import socketio as socketio_events + from .events import sqlalchemy as sqlalchemy_events + from .admin import bp as admin_blueprint app.register_blueprint(admin_blueprint, url_prefix='/admin') + + from .api import bp as api_blueprint + app.register_blueprint(api_blueprint, url_prefix='/api') + + from .auth import bp as auth_blueprint app.register_blueprint(auth_blueprint, url_prefix='/auth') + + from .corpora import bp as corpora_blueprint app.register_blueprint(corpora_blueprint, url_prefix='/corpora') + + from .errors import bp as errors_blueprint app.register_blueprint(errors_blueprint) + + from .jobs import bp as jobs_blueprint app.register_blueprint(jobs_blueprint, url_prefix='/jobs') + + from .main import bp as main_blueprint app.register_blueprint(main_blueprint) + + from .services import bp as services_blueprint app.register_blueprint(services_blueprint, url_prefix='/services') + + from .settings import bp as settings_blueprint app.register_blueprint(settings_blueprint, url_prefix='/settings') return app diff --git a/app/admin/forms.py b/app/admin/forms.py index a0f796d6..eb0ed231 100644 --- a/app/admin/forms.py +++ b/app/admin/forms.py @@ -1,4 +1,3 @@ -from flask_login import current_user from wtforms import BooleanField, SelectField from ..models import Role from ..settings.forms import EditGeneralSettingsForm @@ -8,7 +7,7 @@ class EditGeneralSettingsAdminForm(EditGeneralSettingsForm): confirmed = BooleanField('Confirmed') role = SelectField('Role', coerce=int) - def __init__(self, user=current_user, *args, **kwargs): - super().__init__(*args, user=user, **kwargs) + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) self.role.choices = [(role.id, role.name) for role in Role.query.order_by(Role.name).all()] diff --git a/app/admin/routes.py b/app/admin/routes.py index c9a04053..3d7de6fb 100644 --- a/app/admin/routes.py +++ b/app/admin/routes.py @@ -46,7 +46,7 @@ def delete_user(user_id): @admin_required def edit_user(user_id): user = User.query.get_or_404(user_id) - form = EditGeneralSettingsAdminForm(user=user) + form = EditGeneralSettingsAdminForm(user) if form.validate_on_submit(): user.setting_dark_mode = form.dark_mode.data user.email = form.email.data diff --git a/app/auth/__init__.py b/app/auth/__init__.py index 6f6ba82d..505e7e42 100644 --- a/app/auth/__init__.py +++ b/app/auth/__init__.py @@ -1,5 +1,8 @@ from flask import Blueprint +USERNAME_REGEX = '^[A-Za-zÄÖÜäöüß0-9_.]*$' + + bp = Blueprint('auth', __name__) from . import routes diff --git a/app/auth/forms.py b/app/auth/forms.py index 98dab654..8509bc44 100644 --- a/app/auth/forms.py +++ b/app/auth/forms.py @@ -1,4 +1,4 @@ -from flask import current_app +from . import USERNAME_REGEX from ..models import User from flask_wtf import FlaskForm from wtforms import (BooleanField, PasswordField, StringField, SubmitField, @@ -18,7 +18,7 @@ class RegistrationForm(FlaskForm): username = StringField( 'Username', validators=[DataRequired(), Length(1, 64), - Regexp(current_app.config['NOPAQUE_USERNAME_REGEX'], + Regexp(USERNAME_REGEX, message='Usernames must have only letters, numbers,' ' dots or underscores')] ) diff --git a/app/settings/forms.py b/app/settings/forms.py index 5c822fd9..d402fad2 100644 --- a/app/settings/forms.py +++ b/app/settings/forms.py @@ -1,9 +1,8 @@ -from flask import current_app -from flask_login import current_user from flask_wtf import FlaskForm from wtforms import (BooleanField, PasswordField, SelectField, StringField, SubmitField, ValidationError) from wtforms.validators import DataRequired, Email, EqualTo, Length, Regexp +from ..auth import USERNAME_REGEX from ..models import User @@ -18,7 +17,7 @@ class ChangePasswordForm(FlaskForm): 'Confirm new password', validators=[DataRequired()]) submit = SubmitField('Change password') - def __init__(self, user=current_user, *args, **kwargs): + def __init__(self, user, *args, **kwargs): super().__init__(*args, **kwargs) self.user = user @@ -35,13 +34,13 @@ class EditGeneralSettingsForm(FlaskForm): 'Benutzername', validators=[DataRequired(), Length(1, 64), - Regexp(current_app.config['NOPAQUE_USERNAME_REGEX'], + Regexp(USERNAME_REGEX, message='Usernames must have only letters, numbers,' ' dots or underscores')] ) submit = SubmitField('Submit') - def __init__(self, user=current_user, *args, **kwargs): + def __init__(self, user, *args, **kwargs): super().__init__(*args, **kwargs) self.user = user @@ -72,7 +71,3 @@ class EditNotificationSettingsForm(FlaskForm): ('none', 'No status update notifications')], validators=[DataRequired()]) submit = SubmitField('Save settings') - - def __init__(self, user=current_user, *args, **kwargs): - super().__init__(*args, **kwargs) - self.user = user diff --git a/app/settings/routes.py b/app/settings/routes.py index ebc3a385..9cc9960a 100644 --- a/app/settings/routes.py +++ b/app/settings/routes.py @@ -15,7 +15,7 @@ def index(): @bp.route('/change_password', methods=['GET', 'POST']) @login_required def change_password(): - form = ChangePasswordForm() + form = ChangePasswordForm(current_user._get_current_object()) if form.validate_on_submit(): current_user.password = form.new_password.data db.session.commit() @@ -28,7 +28,7 @@ def change_password(): @bp.route('/edit_general_settings', methods=['GET', 'POST']) @login_required def edit_general_settings(): - form = EditGeneralSettingsForm() + form = EditGeneralSettingsForm(current_user._get_current_object()) if form.validate_on_submit(): current_user.email = form.email.data current_user.setting_dark_mode = form.dark_mode.data diff --git a/config.py b/config.py index 3af786f9..913229cb 100644 --- a/config.py +++ b/config.py @@ -43,7 +43,6 @@ class Config: NOPAQUE_MAIL_SUBJECT_PREFIX = '[nopaque]' NOPAQUE_SOCKETIO_MESSAGE_QUEUE_URI = \ os.environ.get('NOPAQUE_SOCKETIO_MESSAGE_QUEUE_URI') - NOPAQUE_USERNAME_REGEX = '^[A-Za-zÄÖÜäöüß0-9_.]*$' @classmethod def init_app(cls, app):