import os import pkgutil import sys def _wrap_flask(f): if f is None: return from packaging.version import Version, InvalidVersion from .cs50 import _formatException try: if Version(f.__version__) < Version("1.0"): return except InvalidVersion: return if os.getenv("CS50_IDE_TYPE") == "online": from werkzeug.middleware.proxy_fix import ProxyFix _flask_init_before = f.Flask.__init__ def _flask_init_after(self, *args, **kwargs): _flask_init_before(self, *args, **kwargs) self.wsgi_app = ProxyFix( self.wsgi_app, x_proto=1 ) # For HTTPS-to-HTTP proxy f.Flask.__init__ = _flask_init_after # If Flask was imported before cs50 if "flask" in sys.modules: _wrap_flask(sys.modules["flask"]) # If Flask wasn't imported else: flask_loader = pkgutil.get_loader("flask") if flask_loader: _exec_module_before = flask_loader.exec_module def _exec_module_after(*args, **kwargs): _exec_module_before(*args, **kwargs) _wrap_flask(sys.modules["flask"]) flask_loader.exec_module = _exec_module_after