mirror of
https://github.com/StefBuwalda/cal_counter.git
synced 2025-10-30 03:10:00 +00:00
Added a route to serve /favicon.ico using send_from_directory and included the favicon.ico file in the static directory. This improves browser tab display and branding.
100 lines
2.4 KiB
Python
100 lines
2.4 KiB
Python
from flask import (
|
|
render_template,
|
|
redirect,
|
|
url_for,
|
|
request,
|
|
send_from_directory,
|
|
)
|
|
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("/favicon.ico")
|
|
def favicon():
|
|
return send_from_directory("static", "favicon.ico")
|
|
|
|
|
|
@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"))
|
|
|
|
|
|
# Run
|
|
if __name__ == "__main__":
|
|
# If there are no users, create admin account
|
|
with app.app_context():
|
|
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,
|
|
)
|