diff --git a/rhodecode/authentication/__init__.py b/rhodecode/authentication/__init__.py --- a/rhodecode/authentication/__init__.py +++ b/rhodecode/authentication/__init__.py @@ -41,7 +41,7 @@ def _import_legacy_plugin(plugin_id): return module.plugin_factory(plugin_id=plugin_id) -def _discover_legacy_plugins(config, prefix=legacy_plugin_prefix): +def discover_legacy_plugins(config, prefix=legacy_plugin_prefix): """ Function that imports the legacy plugins stored in the 'auth_plugins' setting in database which are using the specified prefix. Normally 'py:' is @@ -97,15 +97,3 @@ def includeme(config): request_method='POST', route_name='auth_home', context=AuthnRootResource) - - # load CE authentication plugins - config.include('rhodecode.authentication.plugins.auth_crowd') - config.include('rhodecode.authentication.plugins.auth_headers') - config.include('rhodecode.authentication.plugins.auth_jasig_cas') - config.include('rhodecode.authentication.plugins.auth_ldap') - config.include('rhodecode.authentication.plugins.auth_pam') - config.include('rhodecode.authentication.plugins.auth_rhodecode') - config.include('rhodecode.authentication.plugins.auth_token') - - # Auto discover authentication plugins and include their configuration. - _discover_legacy_plugins(config) diff --git a/rhodecode/config/middleware.py b/rhodecode/config/middleware.py --- a/rhodecode/config/middleware.py +++ b/rhodecode/config/middleware.py @@ -64,6 +64,14 @@ def is_http_error(response): return response.status_code > 499 +def should_load_all(): + """ + Returns if all application components should be loaded. In some cases it's + desired to skip apps loading for faster shell script execution + """ + return True + + def make_pyramid_app(global_config, **settings): """ Constructs the WSGI application based on Pyramid. @@ -233,6 +241,8 @@ def includeme(config): if asbool(settings.get('appenlight', 'false')): config.include('appenlight_client.ext.pyramid_tween') + load_all = should_load_all() + # Includes which are required. The application would fail without them. config.include('pyramid_mako') config.include('pyramid_beaker') @@ -245,26 +255,42 @@ def includeme(config): config.include('rhodecode.integrations') config.include('rhodecode.authentication') + if load_all: + from rhodecode.authentication import discover_legacy_plugins + # load CE authentication plugins + config.include('rhodecode.authentication.plugins.auth_crowd') + config.include('rhodecode.authentication.plugins.auth_headers') + config.include('rhodecode.authentication.plugins.auth_jasig_cas') + config.include('rhodecode.authentication.plugins.auth_ldap') + config.include('rhodecode.authentication.plugins.auth_pam') + config.include('rhodecode.authentication.plugins.auth_rhodecode') + config.include('rhodecode.authentication.plugins.auth_token') + + # Auto discover authentication plugins and include their configuration. + discover_legacy_plugins(config) + # apps config.include('rhodecode.apps._base') - config.include('rhodecode.apps.ops') - config.include('rhodecode.apps.admin') - config.include('rhodecode.apps.channelstream') - config.include('rhodecode.apps.login') - config.include('rhodecode.apps.home') - config.include('rhodecode.apps.journal') - config.include('rhodecode.apps.repository') - config.include('rhodecode.apps.repo_group') - config.include('rhodecode.apps.user_group') - config.include('rhodecode.apps.search') - config.include('rhodecode.apps.user_profile') - config.include('rhodecode.apps.user_group_profile') - config.include('rhodecode.apps.my_account') - config.include('rhodecode.apps.svn_support') - config.include('rhodecode.apps.ssh_support') - config.include('rhodecode.apps.gist') - config.include('rhodecode.apps.debug_style') - config.include('rhodecode.api') + + if load_all: + config.include('rhodecode.apps.ops') + config.include('rhodecode.apps.admin') + config.include('rhodecode.apps.channelstream') + config.include('rhodecode.apps.login') + config.include('rhodecode.apps.home') + config.include('rhodecode.apps.journal') + config.include('rhodecode.apps.repository') + config.include('rhodecode.apps.repo_group') + config.include('rhodecode.apps.user_group') + config.include('rhodecode.apps.search') + config.include('rhodecode.apps.user_profile') + config.include('rhodecode.apps.user_group_profile') + config.include('rhodecode.apps.my_account') + config.include('rhodecode.apps.svn_support') + config.include('rhodecode.apps.ssh_support') + config.include('rhodecode.apps.gist') + config.include('rhodecode.apps.debug_style') + config.include('rhodecode.api') config.add_route('rhodecode_support', 'https://rhodecode.com/help/', static=True) config.add_translation_dirs('rhodecode:i18n/') diff --git a/rhodecode/tests/lib/middleware/test_simplevcs.py b/rhodecode/tests/lib/middleware/test_simplevcs.py --- a/rhodecode/tests/lib/middleware/test_simplevcs.py +++ b/rhodecode/tests/lib/middleware/test_simplevcs.py @@ -77,6 +77,8 @@ class StubVCSController(simplevcs.Simple def vcscontroller(baseapp, config_stub, request_stub): config_stub.testing_securitypolicy() config_stub.include('rhodecode.authentication') + config_stub.include('rhodecode.authentication.plugins.auth_rhodecode') + config_stub.include('rhodecode.authentication.plugins.auth_token') controller = StubVCSController( baseapp.config.get_settings(), request_stub.registry) diff --git a/rhodecode/tests/other/test_validators.py b/rhodecode/tests/other/test_validators.py --- a/rhodecode/tests/other/test_validators.py +++ b/rhodecode/tests/other/test_validators.py @@ -193,6 +193,8 @@ def test_ValidPasswordsMatch(localizer): def test_ValidAuth(localizer, config_stub): config_stub.testing_securitypolicy() config_stub.include('rhodecode.authentication') + config_stub.include('rhodecode.authentication.plugins.auth_rhodecode') + config_stub.include('rhodecode.authentication.plugins.auth_token') validator = v.ValidAuth(localizer) valid_creds = {