From e089805f312bfb9c8294418115dacac0c64c8639 Mon Sep 17 00:00:00 2001 From: Stef Date: Wed, 16 Apr 2025 09:57:05 +0200 Subject: [PATCH] Refractoring --- application/auth/forms.py | 12 +++++- .../{dash => auth}/templates/admin.html | 0 application/auth/views.py | 42 ++++++++++++++++++- application/dash/forms.py | 12 ------ application/dash/views.py | 42 +------------------ application/templates/base_template.html | 5 ++- 6 files changed, 56 insertions(+), 57 deletions(-) rename application/{dash => auth}/templates/admin.html (100%) diff --git a/application/auth/forms.py b/application/auth/forms.py index d0166ef..287a369 100644 --- a/application/auth/forms.py +++ b/application/auth/forms.py @@ -1,5 +1,5 @@ from flask_wtf import FlaskForm # type: ignore -from wtforms import StringField, SubmitField, PasswordField +from wtforms import StringField, SubmitField, PasswordField, BooleanField from wtforms.validators import DataRequired @@ -7,3 +7,13 @@ class LoginForm(FlaskForm): username = StringField("Username", validators=[DataRequired()]) password = PasswordField("Password") submit = SubmitField("Login") + + +class RegisterForm(FlaskForm): + username = StringField("Username", validators=[DataRequired()]) + password = PasswordField("Password", validators=[DataRequired()]) + confirm_password = PasswordField( + "Confirm Password", validators=[DataRequired()] + ) + is_admin = BooleanField("Admin") + submit = SubmitField("Add") diff --git a/application/dash/templates/admin.html b/application/auth/templates/admin.html similarity index 100% rename from application/dash/templates/admin.html rename to application/auth/templates/admin.html diff --git a/application/auth/views.py b/application/auth/views.py index b958524..8ac7f84 100644 --- a/application/auth/views.py +++ b/application/auth/views.py @@ -1,14 +1,52 @@ from flask import Blueprint, render_template, redirect, url_for -# from application import db +from application import db from application.auth.models import User from application.auth.forms import LoginForm from flask_login import login_required, login_user, logout_user # type: ignore -from werkzeug.security import check_password_hash +from werkzeug.security import check_password_hash, generate_password_hash +from application.decorators import admin_required +from application.auth.forms import RegisterForm auth_blueprint = Blueprint("auth", __name__, template_folder="templates") + # Routes +@auth_blueprint.route("/register", methods=["GET", "POST"]) +@admin_required +def register(): + register_form = RegisterForm() + + if register_form.validate_on_submit(): # type: ignore + username = register_form.username.data + password = register_form.password.data + confirm_password = register_form.confirm_password.data + is_admin = register_form.is_admin.data + if confirm_password != password: + return render_template( + "admin.html", + form=register_form, + feedback="Passwords don't match, please try again", + ) + if User.query.filter_by(username=username).first(): + return render_template( + "admin.html", + form=register_form, + feedback="Username is already taken", + ) + new_user = User( + username=username, # type: ignore + password=generate_password_hash(password), # type: ignore + is_admin=is_admin, + ) + db.session.add(new_user) + db.session.commit() + return render_template( + "admin.html", + form=RegisterForm(formdata=None), + feedback="User succesfully added", + ) + return render_template("admin.html", form=register_form) @auth_blueprint.route("/login", methods=["GET", "POST"]) diff --git a/application/dash/forms.py b/application/dash/forms.py index a920316..40295bf 100644 --- a/application/dash/forms.py +++ b/application/dash/forms.py @@ -1,10 +1,8 @@ from flask_wtf import FlaskForm # type: ignore from wtforms import ( StringField, - PasswordField, SubmitField, URLField, - BooleanField, ) from wtforms.validators import DataRequired @@ -13,13 +11,3 @@ class ServiceForm(FlaskForm): name = StringField("Service name:", validators=[DataRequired()]) url = URLField("Service URL:", validators=[DataRequired()]) submit = SubmitField("Add") - - -class RegisterForm(FlaskForm): - username = StringField("Username", validators=[DataRequired()]) - password = PasswordField("Password", validators=[DataRequired()]) - confirm_password = PasswordField( - "Confirm Password", validators=[DataRequired()] - ) - is_admin = BooleanField("Admin") - submit = SubmitField("Add") diff --git a/application/dash/views.py b/application/dash/views.py index 3bd06c1..be2d929 100644 --- a/application/dash/views.py +++ b/application/dash/views.py @@ -1,11 +1,8 @@ from application import db from flask import Blueprint, render_template, redirect, url_for -from application.dash.forms import RegisterForm, ServiceForm +from application.dash.forms import ServiceForm from flask_login import login_required, current_user # type: ignore from application.dash.models import Service -from application.auth.models import User -from application.decorators import admin_required -from werkzeug.security import generate_password_hash dash_blueprint = Blueprint("dash", __name__, template_folder="templates") @@ -19,43 +16,6 @@ def index(): return render_template("dashboard.html", services=services) -@dash_blueprint.route("/admin", methods=["GET", "POST"]) -@admin_required -def admin(): - register_form = RegisterForm() - - if register_form.validate_on_submit(): # type: ignore - username = register_form.username.data - password = register_form.password.data - confirm_password = register_form.confirm_password.data - is_admin = register_form.is_admin.data - if confirm_password != password: - return render_template( - "admin.html", - form=register_form, - feedback="Passwords don't match, please try again", - ) - if User.query.filter_by(username=username).first(): - return render_template( - "admin.html", - form=register_form, - feedback="Username is already taken", - ) - new_user = User( - username=username, # type: ignore - password=generate_password_hash(password), # type: ignore - is_admin=is_admin, - ) - db.session.add(new_user) - db.session.commit() - return render_template( - "admin.html", - form=RegisterForm(formdata=None), - feedback="User succesfully added", - ) - return render_template("admin.html", form=register_form) - - @dash_blueprint.route("/delete_item/", methods=["POST"]) @login_required def delete_item(service_id: int): diff --git a/application/templates/base_template.html b/application/templates/base_template.html index 6c468b9..e540697 100644 --- a/application/templates/base_template.html +++ b/application/templates/base_template.html @@ -1,5 +1,6 @@ + @@ -11,6 +12,7 @@ crossorigin="anonymous"> {% block title %}{% endblock %} +