2026-05-14 21:16:51 +02:00
|
|
|
import os
|
|
|
|
|
import secrets
|
|
|
|
|
from pathlib import Path
|
2026-01-03 13:16:43 +01:00
|
|
|
from flask import Flask, send_from_directory, url_for
|
2026-01-01 21:07:34 +01:00
|
|
|
from flask_login import LoginManager
|
|
|
|
|
from models import db
|
|
|
|
|
from models import User
|
|
|
|
|
from auth import auth_bp
|
|
|
|
|
from admin import admin_bp
|
|
|
|
|
from lists import lists_bp
|
|
|
|
|
from items import items_bp
|
2026-01-18 08:22:41 +01:00
|
|
|
from api import api_bp
|
2026-05-14 20:51:01 +02:00
|
|
|
from groups import groups_bp
|
2026-01-01 21:07:34 +01:00
|
|
|
|
|
|
|
|
login_manager = LoginManager()
|
|
|
|
|
|
2026-05-14 21:16:51 +02:00
|
|
|
def load_secret(app, env_name, filename):
|
|
|
|
|
secret = os.environ.get(env_name)
|
|
|
|
|
if secret:
|
|
|
|
|
return secret
|
|
|
|
|
|
|
|
|
|
instance_path = Path(app.instance_path)
|
|
|
|
|
instance_path.mkdir(parents=True, exist_ok=True)
|
|
|
|
|
secret_path = instance_path / filename
|
|
|
|
|
|
|
|
|
|
if secret_path.exists():
|
|
|
|
|
return secret_path.read_text(encoding="utf-8").strip()
|
|
|
|
|
|
|
|
|
|
secret = secrets.token_urlsafe(48)
|
|
|
|
|
secret_path.write_text(secret, encoding="utf-8")
|
|
|
|
|
secret_path.chmod(0o600)
|
|
|
|
|
return secret
|
|
|
|
|
|
2026-01-01 21:07:34 +01:00
|
|
|
def create_app():
|
2026-05-14 21:16:51 +02:00
|
|
|
app = Flask(__name__, instance_relative_config=True)
|
|
|
|
|
app.config["SECRET_KEY"] = load_secret(app, "LAPP_SECRET_KEY", "secret_key")
|
|
|
|
|
app.config["APPLICATION_KEY"] = load_secret(app, "LAPP_APPLICATION_KEY", "application_key")
|
|
|
|
|
app.config["SQLALCHEMY_DATABASE_URI"] = os.environ.get("LAPP_DATABASE_URI", "sqlite:///app.db")
|
2026-01-01 21:07:34 +01:00
|
|
|
|
|
|
|
|
db.init_app(app)
|
|
|
|
|
login_manager.init_app(app)
|
|
|
|
|
login_manager.login_view = "auth.login"
|
|
|
|
|
|
|
|
|
|
app.register_blueprint(auth_bp)
|
|
|
|
|
app.register_blueprint(admin_bp)
|
|
|
|
|
app.register_blueprint(lists_bp)
|
|
|
|
|
app.register_blueprint(items_bp)
|
2026-01-18 08:22:41 +01:00
|
|
|
app.register_blueprint(api_bp)
|
2026-05-14 20:51:01 +02:00
|
|
|
app.register_blueprint(groups_bp)
|
2026-01-01 21:07:34 +01:00
|
|
|
|
|
|
|
|
with app.app_context():
|
|
|
|
|
db.create_all()
|
|
|
|
|
|
|
|
|
|
@login_manager.user_loader
|
|
|
|
|
def load_user(user_id):
|
|
|
|
|
# Return User.query.get(int(user_id))
|
|
|
|
|
return db.get_or_404(User, int(user_id))
|
|
|
|
|
|
|
|
|
|
return app
|
|
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
|
|
my_app = create_app()
|
|
|
|
|
# if needed - initialize data
|
2026-01-18 08:22:41 +01:00
|
|
|
my_app.run(debug=True, host='127.0.0.1', port=5001)
|