- Security and csrf added to eveai_ops. Otherwise the initialize_data.py script cannot initialize the Super User...
98 lines
2.8 KiB
Python
98 lines
2.8 KiB
Python
import logging
|
|
import os
|
|
from flask import Flask
|
|
from flask_security import SQLAlchemyUserDatastore
|
|
from werkzeug.middleware.proxy_fix import ProxyFix
|
|
import logging.config
|
|
|
|
from common.extensions import db, migrate, security, csrf
|
|
from config.logging_config import configure_logging
|
|
from config.config import get_config
|
|
import common.models.user
|
|
import common.models.interaction
|
|
import common.models.entitlements
|
|
import common.models.document
|
|
|
|
from common.models.user import User, Role
|
|
|
|
def create_app(config_file=None):
|
|
app = Flask(__name__, static_url_path='/static')
|
|
|
|
# Ensure all necessary headers are handled
|
|
app.wsgi_app = ProxyFix(app.wsgi_app, x_for=1, x_proto=1, x_host=1, x_port=1)
|
|
|
|
environment = os.getenv('FLASK_ENV', 'development')
|
|
|
|
match environment:
|
|
case 'development':
|
|
app.config.from_object(get_config('dev'))
|
|
case 'staging':
|
|
app.config.from_object(get_config('staging'))
|
|
case 'production':
|
|
app.config.from_object(get_config('prod'))
|
|
case _:
|
|
app.config.from_object(get_config('dev'))
|
|
|
|
app.config['SESSION_KEY_PREFIX'] = 'eveai_ops_'
|
|
|
|
try:
|
|
os.makedirs(app.instance_path)
|
|
except OSError:
|
|
pass
|
|
|
|
# Configureer logging op basis van de omgeving (K8s of traditioneel)
|
|
try:
|
|
configure_logging()
|
|
logger = logging.getLogger(__name__)
|
|
# Test dat logging werkt
|
|
logger.debug("Logging test in eveai_ops")
|
|
except Exception as e:
|
|
print(f"Critical Error Initialising Error: {str(e)}")
|
|
import traceback
|
|
traceback.print_exc()
|
|
|
|
logger.info("eveai_ops starting up")
|
|
|
|
# Register extensions
|
|
|
|
register_extensions(app)
|
|
|
|
# Setup Flask-Security-Too
|
|
user_datastore = SQLAlchemyUserDatastore(db, User, Role)
|
|
security.init_app(app, user_datastore)
|
|
|
|
# Register Blueprints
|
|
register_blueprints(app)
|
|
|
|
# Register Cache Handlers
|
|
register_cache_handlers(app)
|
|
|
|
# Debugging settings
|
|
if app.config['DEBUG'] is True:
|
|
app.logger.setLevel(logging.DEBUG)
|
|
security_logger = logging.getLogger('flask_security')
|
|
security_logger.setLevel(logging.DEBUG)
|
|
sqlalchemy_logger = logging.getLogger('sqlalchemy.engine')
|
|
sqlalchemy_logger.setLevel(logging.DEBUG)
|
|
# log_request_middleware(app) # Add this when debugging nginx or another proxy
|
|
|
|
app.logger.info(f"EveAI Ops Server Started Successfully (PID: {os.getpid()})")
|
|
app.logger.info("-------------------------------------------------------------------------------------------------")
|
|
return app
|
|
|
|
|
|
def register_extensions(app):
|
|
db.init_app(app)
|
|
migrate.init_app(app, db)
|
|
csrf.init_app(app)
|
|
|
|
|
|
def register_blueprints(app):
|
|
# minimal health blueprint
|
|
from .healthz import healthz_bp
|
|
app.register_blueprint(healthz_bp)
|
|
|
|
|
|
def register_cache_handlers(app):
|
|
pass
|