import os import secrets from pathlib import Path from flask import Flask, send_from_directory, url_for 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 from api import api_bp from groups import groups_bp login_manager = LoginManager() 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 def create_app(): 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") 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) app.register_blueprint(api_bp) app.register_blueprint(groups_bp) 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 my_app.run(debug=True, host='127.0.0.1', port=5001)