mirror of
https://github.com/StefBuwalda/cal_counter.git
synced 2025-10-30 03:10:00 +00:00
Adds logic to automatically create an admin account with default credentials if the user table is empty when the app starts. This ensures there is always an admin user available for initial setup.
94 lines
2.3 KiB
Python
94 lines
2.3 KiB
Python
from flask import render_template, redirect, url_for, request
|
|
from flask_login import (
|
|
login_required,
|
|
logout_user,
|
|
login_user,
|
|
current_user,
|
|
)
|
|
from forms import LoginForm
|
|
from models import User
|
|
from application import db, app, login_manager
|
|
from application.admin.routes import admin_bp
|
|
from application.user.routes import user_bp
|
|
from application.add_meal.routes import bp as add_meal_bp
|
|
from typing import Optional
|
|
|
|
# Config
|
|
app.config["SECRET_KEY"] = "Stef123"
|
|
|
|
login_manager.login_view = "login" # type: ignore
|
|
|
|
|
|
@login_manager.user_loader # type: ignore
|
|
def load_user(user_id: int):
|
|
return db.session.get(User, user_id)
|
|
|
|
|
|
# Register blueprints
|
|
app.register_blueprint(admin_bp)
|
|
app.register_blueprint(user_bp)
|
|
app.register_blueprint(add_meal_bp)
|
|
|
|
|
|
# Routes
|
|
def default_return(next_page: Optional[str] = None):
|
|
return redirect(url_for("user.daily_log"))
|
|
if next_page:
|
|
return redirect(next_page)
|
|
if current_user.is_admin:
|
|
return redirect(url_for("admin.food_items"))
|
|
return redirect(url_for("dashboard"))
|
|
|
|
|
|
@app.route("/")
|
|
@login_required
|
|
def index():
|
|
return redirect(url_for("login"))
|
|
|
|
|
|
@app.route("/login", methods=["GET", "POST"])
|
|
def login():
|
|
if current_user.is_authenticated:
|
|
return default_return()
|
|
|
|
form = LoginForm()
|
|
if form.validate_on_submit():
|
|
user = User.query.filter_by(username=form.username.data).first()
|
|
if user and user.check_password(password=form.password.data):
|
|
# User found and password correct
|
|
next_page = request.args.get("next") # Get next page if given
|
|
login_user(user) # Log in the user
|
|
return default_return(next_page=next_page)
|
|
else:
|
|
pass
|
|
# invalid user
|
|
return render_template("login.html", form=form)
|
|
|
|
|
|
@app.route("/logout")
|
|
@login_required
|
|
def logout():
|
|
logout_user()
|
|
return redirect(url_for("index"))
|
|
|
|
|
|
@app.route("/scan")
|
|
@login_required
|
|
def scan():
|
|
return render_template("scan.html")
|
|
|
|
|
|
# Run
|
|
if __name__ == "__main__":
|
|
# If there are no users, create admin account
|
|
if User.query.count() == 0:
|
|
admin = User(username="admin", password="admin", is_admin=True)
|
|
db.session.add(admin)
|
|
db.session.commit()
|
|
|
|
app.run(
|
|
host="0.0.0.0",
|
|
port=80,
|
|
debug=True,
|
|
)
|