Cleanup gang

This commit is contained in:
2025-04-17 14:28:25 +02:00
parent 7755a150e4
commit aa90134fb4
5 changed files with 21 additions and 2 deletions

View File

@@ -3,16 +3,21 @@ from wtforms import StringField, SubmitField, PasswordField, BooleanField
from wtforms.validators import DataRequired from wtforms.validators import DataRequired
# Default Form that inherits from FlaskForm and
# contains a username, password and submit button
class defaultForm(FlaskForm): class defaultForm(FlaskForm):
username = StringField("Username", validators=[DataRequired()]) username = StringField("Username", validators=[DataRequired()])
password = PasswordField("Password", validators=[DataRequired()]) password = PasswordField("Password", validators=[DataRequired()])
submit = SubmitField("Submit") submit = SubmitField("Submit")
# LoginForm, contains exactly the same as defaultForm
class LoginForm(defaultForm): class LoginForm(defaultForm):
pass pass
# RegisterForm that inherits from the default.
# Adds a password confirmation and if the user is an admin or not.
class RegisterForm(defaultForm): class RegisterForm(defaultForm):
confirm_password = PasswordField( confirm_password = PasswordField(
"Confirm Password", validators=[DataRequired()] "Confirm Password", validators=[DataRequired()]
@@ -20,6 +25,8 @@ class RegisterForm(defaultForm):
is_admin = BooleanField("Admin") is_admin = BooleanField("Admin")
# Form to update password information.
# Needs a confirmation password and the current password
class UpdateForm(defaultForm): class UpdateForm(defaultForm):
confirm_password = PasswordField( confirm_password = PasswordField(
"Confirm Password", validators=[DataRequired()] "Confirm Password", validators=[DataRequired()]

View File

@@ -2,14 +2,18 @@ from application import db
from flask_login import UserMixin # type: ignore from flask_login import UserMixin # type: ignore
# User model
class User(db.Model, UserMixin): class User(db.Model, UserMixin):
id = db.Column(db.Integer, primary_key=True) id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(150), unique=True, nullable=False) username = db.Column(db.String(150), unique=True, nullable=False)
password = db.Column(db.String(150), nullable=False) password = db.Column(db.String(150), nullable=False)
is_admin = db.Column(db.Boolean, default=False) is_admin = db.Column(db.Boolean, default=False)
# Purely a relationship not a column,
# makes all the services accessible through User.services
services = db.relationship("Service", backref="user", lazy="joined") services = db.relationship("Service", backref="user", lazy="joined")
# Initialize user, prevents red stuff
def __init__(self, username: str, password: str, is_admin: bool = False): def __init__(self, username: str, password: str, is_admin: bool = False):
self.username = username self.username = username
self.password = password self.password = password

View File

@@ -16,8 +16,8 @@ from application.auth.forms import RegisterForm, UpdateForm
auth_blueprint = Blueprint("auth", __name__, template_folder="templates") auth_blueprint = Blueprint("auth", __name__, template_folder="templates")
# Routes # Add user
@auth_blueprint.route("/register", methods=["GET", "POST"]) @auth_blueprint.route("/register_user", methods=["GET", "POST"])
@admin_required @admin_required
def register(): def register():
register_form = RegisterForm() register_form = RegisterForm()
@@ -59,6 +59,7 @@ def register():
) )
# Update user (specifically password)
@auth_blueprint.route("/update_user", methods=["GET", "POST"]) @auth_blueprint.route("/update_user", methods=["GET", "POST"])
@login_required @login_required
def update(): def update():
@@ -89,6 +90,7 @@ def update():
return render_template("update_user.html", form=form, active_page="update") return render_template("update_user.html", form=form, active_page="update")
# Login as user or admin
@auth_blueprint.route("/login", methods=["GET", "POST"]) @auth_blueprint.route("/login", methods=["GET", "POST"])
def login(): def login():
login_form = LoginForm() login_form = LoginForm()
@@ -110,6 +112,7 @@ def login():
return render_template("login.html", form=login_form, feedback=feedback) return render_template("login.html", form=login_form, feedback=feedback)
# Logout
@auth_blueprint.route("/logout") @auth_blueprint.route("/logout")
@login_required @login_required
def logout(): def logout():

View File

@@ -4,9 +4,11 @@ from wtforms.validators import DataRequired
from flask_wtf.file import FileField, FileAllowed # type: ignore from flask_wtf.file import FileField, FileAllowed # type: ignore
# Form for service on dashboard, connected to database through ORM
class ServiceForm(FlaskForm): class ServiceForm(FlaskForm):
name = StringField("Service name:", validators=[DataRequired()]) name = StringField("Service name:", validators=[DataRequired()])
url = URLField("Service URL:", validators=[DataRequired()]) url = URLField("Service URL:", validators=[DataRequired()])
# File field that only allows jpg, jpeg or png
image = FileField( image = FileField(
"Icon:", "Icon:",
validators=[ validators=[

View File

@@ -1,14 +1,17 @@
from application import db from application import db
# Service class for dashboard
class Service(db.Model): class Service(db.Model):
id = db.Column(db.Integer, primary_key=True) id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String, nullable=False) name = db.Column(db.String, nullable=False)
url = db.Column(db.String, nullable=False) url = db.Column(db.String, nullable=False)
icon = db.Column(db.String, default="google.png") icon = db.Column(db.String, default="google.png")
# Foreign key to connect to User table
user_id = db.Column(db.Integer, db.ForeignKey("user.id"), nullable=False) user_id = db.Column(db.Integer, db.ForeignKey("user.id"), nullable=False)
# Initialize the service (prevents ugly red lines)
def __init__( def __init__(
self, name: str, url: str, user_id: int, icon: str = "google.png" self, name: str, url: str, user_id: int, icon: str = "google.png"
): ):