import os from flask import Flask from .extensions import db, migrate, login_manager, csrf from .config import Config from flask_wtf.csrf import generate_csrf def create_app(): app = Flask(__name__, static_folder="static", template_folder="templates") app.config.from_object(Config) os.makedirs(app.config.get("UPLOAD_FOLDER"), exist_ok=True) os.makedirs(os.path.join(app.config.get("UPLOAD_FOLDER"), "identity"), exist_ok=True) os.makedirs(os.path.join(app.config.get("UPLOAD_FOLDER"), "posts"), exist_ok=True) os.makedirs(os.path.join(app.config.get("UPLOAD_FOLDER"), "activities"), exist_ok=True) db.init_app(app) migrate.init_app(app, db) login_manager.init_app(app) csrf.init_app(app) with app.app_context(): db.create_all() from .models import User, UserStatus, Profile from sqlalchemy import text try: db.session.execute(text("ALTER TABLE user ADD COLUMN must_change_password BOOLEAN DEFAULT 0")) db.session.commit() except Exception: pass from .models import User, UserStatus, Profile from werkzeug.security import generate_password_hash admin = User.query.filter_by(username="Admin").first() if admin: admin.role = "admin" admin.status = UserStatus.approved admin.password_hash = generate_password_hash("lzgzsystem") admin.must_change_password = False db.session.commit() else: email = "admin@example.com" if User.query.filter_by(email=email).first(): email = "admin2@example.com" u = User(email=email, username="Admin", password_hash=generate_password_hash("lzgzsystem"), role="admin", status=UserStatus.approved, must_change_password=False) db.session.add(u) db.session.flush() db.session.add(Profile(user_id=u.id)) db.session.commit() admin2 = User.query.filter_by(username="Admin2").first() if admin2: admin2.role = "admin" admin2.status = UserStatus.approved admin2.password_hash = generate_password_hash("lzgzsystem") admin2.must_change_password = False db.session.commit() else: email2 = "admin2@example.com" if User.query.filter_by(email=email2).first(): email2 = "admin3@example.com" u2 = User(email=email2, username="Admin2", password_hash=generate_password_hash("lzgzsystem"), role="admin", status=UserStatus.approved, must_change_password=False) db.session.add(u2) db.session.flush() db.session.add(Profile(user_id=u2.id)) db.session.commit() @app.context_processor def inject_csrf(): return dict(csrf_token=generate_csrf()) from .blueprints.auth import bp as auth_bp from .blueprints.users import bp as users_bp from .blueprints.posts import bp as posts_bp from .blueprints.comments import bp as comments_bp from .blueprints.follows import bp as follows_bp from .blueprints.feed import bp as feed_bp from .blueprints.activities import bp as activities_bp from .blueprints.admin import bp as admin_bp from .blueprints.main import bp as main_bp from .blueprints.setup import bp as setup_bp app.register_blueprint(auth_bp) app.register_blueprint(main_bp) app.register_blueprint(setup_bp) app.register_blueprint(users_bp) app.register_blueprint(posts_bp) app.register_blueprint(comments_bp) app.register_blueprint(follows_bp) app.register_blueprint(feed_bp) app.register_blueprint(activities_bp) app.register_blueprint(admin_bp) from .cli import register_cli register_cli(app) return app