app: disconect auth plugin loading from authentication registry.

- introduce load_all flag used in skip application load time for certain actions
This commit is contained in:
Marcin Kuzminski 2018-11-26 00:15:05 +01:00
parent f33e0ddc9f
commit e8ec810de8
4 changed files with 49 additions and 31 deletions

View file

@ -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)

View file

@ -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/')

View file

@ -77,6 +77,8 @@ class StubVCSController(simplevcs.SimpleVCS):
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)

View file

@ -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 = {