Switch to side-by-side view

--- a/Allura/allura/config/middleware.py
+++ b/Allura/allura/config/middleware.py
@@ -2,13 +2,19 @@
 """WSGI middleware initialization for the allura application."""
 import mimetypes
 
+import tg
 import pkg_resources
 from webob import exc
-from tg import redirect
+from tg import config
 from paste.deploy.converters import asbool
+from paste.registry import RegistryManager
+from beaker.middleware import SessionMiddleware
+from routes.middleware import RoutesMiddleware
+from pylons.middleware import StatusCodeRedirect
 
 import ew
 import ming
+from ming.orm.middleware import MingMiddleware
 
 from allura.config.app_cfg import base_config
 from allura.config.environment import load_environment
@@ -53,43 +59,55 @@
     
    
     """
+    # Run all the initialization code here
     mimetypes.init(
         [pkg_resources.resource_filename('allura', 'etc/mime.types')]
         + mimetypes.knownfiles)
     patches.apply()
+    # Configure MongoDB
+    ming.configure(**app_conf)
+
+    # Configure EW variable provider
+    ew.render.TemplateEngine.register_variable_provider(get_tg_vars)
     
     # Create base app
     base_config = ForgeConfig(root)
     load_environment = base_config.make_load_environment()
-    make_base_app = base_config.setup_tg_wsgi_app(load_environment)
-    app = make_base_app(global_conf, full_stack=True, **app_conf)
 
-    # Configure MongoDB
-    ming.configure(**app_conf)
+    # Code adapted from tg.configuration, replacing the following lines:
+    #     make_base_app = base_config.setup_tg_wsgi_app(load_environment)
+    #     app = make_base_app(global_conf, full_stack=True, **app_conf)
 
-    # Wrap your base TurboGears 2 application with custom middleware here
-    # app = MingMiddleware(app)
+    # Configure the Pylons environment
+    load_environment(global_conf, app_conf)
+
+    app = tg.TGApp()
+    app = RoutesMiddleware(app, config['routes.map'])
+    app = SessionMiddleware(app, config)
+    app = tg.error.ErrorHandler(app, global_conf, **config['pylons.errorware'])
+    if asbool(config['debug']):
+        app = StatusCodeRedirect(app, base_config.handle_status_codes)
+    else:
+        app = StatusCodeRedirect(app, base_config.handle_status_codes + [500])
     if app_conf.get('stats.sample_rate', '0.25') != '0':
         stats_config = dict(global_conf, **app_conf)
         app = StatsMiddleware(app, stats_config)
-
+    if not app_conf.get('disable_csrf_protection'):
+        app = CSRFMiddleware(app, '_session_id')
+    app = credentials_middleware(app)
     if asbool(app_conf.get('auth.method', 'local')=='sfx'):
         app = SSLMiddleware(app, app_conf.get('no_redirect.pattern'))
-
     app = ew.WidgetMiddleware(
         app,
         compress=not asbool(global_conf['debug']),
         # compress=True,
         script_name=app_conf.get('ew.script_name', '/_ew_resources/'),
         url_base=app_conf.get('ew.url_base', '/_ew_resources/'))
-    ew.render.TemplateEngine.register_variable_provider(get_tg_vars)
-
+    if asbool(app_conf.get('auth.method', 'local')=='sfx'):
+        app = set_scheme_middleware(app)
     app = StaticFilesMiddleware(app, app_conf.get('static.script_name'))
-    app = set_scheme_middleware(app)
-    app = credentials_middleware(app)
-    if not app_conf.get('disable_csrf_protection'):
-        app = CSRFMiddleware(app, '_session_id')
-
+    app = MingMiddleware(app)
+    app = RegistryManager(app, streaming=True)
     return app
     
 def set_scheme_middleware(app):
@@ -101,8 +119,9 @@
 
 def credentials_middleware(app):
     def CredentialsMiddleware(environ, start_response):
-        from allura.lib import security
-        environ['allura.credentials'] = security.Credentials()
+        import allura.lib.security
+        registry = environ['paste.registry']
+        registry.register(allura.credentials, allura.lib.security.Credentials())
         return app(environ, start_response)
     return CredentialsMiddleware