prototoolagain/app/__init__.py

64 lines
1.8 KiB
Python

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_login import LoginManager
from flask_bcrypt import Bcrypt
from flask_wtf.csrf import CSRFProtect
from flask_limiter import Limiter
from flask_limiter.util import get_remote_address
csrf = CSRFProtect()
from config import Config
db = SQLAlchemy()
login_manager = LoginManager()
bcrypt = Bcrypt()
def create_app(config_class=Config):
app = Flask(__name__)
csrf.init_app(app)
app.config.from_object(config_class)
# Initialize extensions
db.init_app(app)
login_manager.init_app(app)
bcrypt.init_app(app)
limiter = Limiter(key_func=get_remote_address)
limiter.init_app(app)
# Register blueprints
from app.routes.auth import auth_bp
from app.routes.inspections import inspections_bp
from app.routes.admin import admin_bp
from app.routes.export import export_bp
app.register_blueprint(auth_bp)
app.register_blueprint(inspections_bp, url_prefix="/inspections")
app.register_blueprint(admin_bp, url_prefix="/admin")
app.register_blueprint(export_bp, url_prefix="/export")
# Create database tables if they don't exist
@app.before_request
def create_tables():
db.create_all()
# Configure audit logging
import logging
from logging.handlers import RotatingFileHandler
import os
os.makedirs("logs", exist_ok=True)
logger = logging.getLogger("audit")
logger.setLevel(logging.INFO)
handler = RotatingFileHandler(
"logs/audit.log", maxBytes=10 * 1024 * 1024, backupCount=5
)
formatter = logging.Formatter("SECURITY AUDIT: %(asctime)s - %(message)s")
handler.setFormatter(formatter)
logger.addHandler(handler)
@app.route("/")
def index():
return "Welcome"
return app