diff --git a/rhodecode/apps/_base/navigation.py b/rhodecode/apps/_base/navigation.py --- a/rhodecode/apps/_base/navigation.py +++ b/rhodecode/apps/_base/navigation.py @@ -117,10 +117,11 @@ class NavigationRegistry(object): self._registered_entries[entry.key] = entry def get_navlist(self, request): - navlist = [NavListEntry(i.key, i.get_localized_name(request), - i.generate_url(request), i.active_list) - for i in self._registered_entries.values()] - return navlist + nav_list = [ + NavListEntry(i.key, i.get_localized_name(request), + i.generate_url(request), i.active_list) + for i in self._registered_entries.values()] + return nav_list def navigation_registry(request, registry=None): @@ -143,5 +144,5 @@ def includeme(config): # Create admin navigation registry and add it to the pyramid registry. settings = config.get_settings() labs_active = str2bool(settings.get('labs_settings_active', False)) - navigation_registry = NavigationRegistry(labs_active=labs_active) - config.registry.registerUtility(navigation_registry) \ No newline at end of file + navigation_registry_instance = NavigationRegistry(labs_active=labs_active) + config.registry.registerUtility(navigation_registry_instance) diff --git a/rhodecode/authentication/__init__.py b/rhodecode/authentication/__init__.py --- a/rhodecode/authentication/__init__.py +++ b/rhodecode/authentication/__init__.py @@ -18,11 +18,9 @@ # RhodeCode Enterprise Edition, including its added features, Support services, # and proprietary license terms, please see https://rhodecode.com/licenses/ -import os import logging import importlib -from pkg_resources import iter_entry_points from pyramid.authentication import SessionAuthenticationPolicy from rhodecode.authentication.registry import AuthenticationPluginRegistry @@ -31,39 +29,12 @@ from rhodecode.authentication.routes imp from rhodecode.apps._base import ADMIN_PREFIX from rhodecode.model.settings import SettingsModel - log = logging.getLogger(__name__) -# Plugin ID prefixes to distinct between normal and legacy plugins. -plugin_prefix = 'egg:' legacy_plugin_prefix = 'py:' plugin_default_auth_ttl = 30 -# TODO: Currently this is only used to discover the authentication plugins. -# Later on this may be used in a generic way to look up and include all kinds -# of supported enterprise plugins. Therefore this has to be moved and -# refactored to a real 'plugin look up' machinery. -# TODO: When refactoring this think about splitting it up into distinct -# discover, load and include phases. -def _discover_plugins(config, entry_point='enterprise.plugins1'): - log.debug('authentication: running plugin discovery for entrypoint %s', - entry_point) - - for ep in iter_entry_points(entry_point): - plugin_id = '{}{}#{}'.format( - plugin_prefix, ep.dist.project_name, ep.name) - log.debug('Plugin discovered: "%s"', plugin_id) - try: - module = ep.load() - plugin = module(plugin_id=plugin_id) - config.include(plugin.includeme) - except Exception as e: - log.exception( - 'Exception while loading authentication plugin ' - '"{}": {}'.format(plugin_id, e.message)) - - def _import_legacy_plugin(plugin_id): module_name = plugin_id.split(legacy_plugin_prefix, 1)[-1] module = importlib.import_module(module_name) @@ -127,11 +98,14 @@ def includeme(config): route_name='auth_home', context=AuthnRootResource) - for key in ['RC_CMD_SETUP_RC', 'RC_CMD_UPGRADE_DB', 'RC_CMD_SSH_WRAPPER']: - if os.environ.get(key): - # skip this heavy step below on certain CLI commands - return + # 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_plugins(config) _discover_legacy_plugins(config) diff --git a/rhodecode/authentication/plugins/auth_crowd.py b/rhodecode/authentication/plugins/auth_crowd.py --- a/rhodecode/authentication/plugins/auth_crowd.py +++ b/rhodecode/authentication/plugins/auth_crowd.py @@ -287,3 +287,8 @@ class RhodeCodeAuthPlugin(RhodeCodeExter log.debug("Final crowd user object: \n%s", formatted_json(user_attrs)) log.info('user `%s` authenticated correctly', user_attrs['username']) return user_attrs + + +def includeme(config): + plugin_id = 'egg:rhodecode-enterprise-ce#{}'.format('crowd') + plugin_factory(plugin_id).includeme(config) diff --git a/rhodecode/authentication/plugins/auth_headers.py b/rhodecode/authentication/plugins/auth_headers.py --- a/rhodecode/authentication/plugins/auth_headers.py +++ b/rhodecode/authentication/plugins/auth_headers.py @@ -223,3 +223,8 @@ class RhodeCodeAuthPlugin(RhodeCodeExter log.info('user `%s` authenticated correctly', user_attrs['username']) return user_attrs + + +def includeme(config): + plugin_id = 'egg:rhodecode-enterprise-ce#{}'.format('headers') + plugin_factory(plugin_id).includeme(config) diff --git a/rhodecode/authentication/plugins/auth_jasig_cas.py b/rhodecode/authentication/plugins/auth_jasig_cas.py --- a/rhodecode/authentication/plugins/auth_jasig_cas.py +++ b/rhodecode/authentication/plugins/auth_jasig_cas.py @@ -165,3 +165,8 @@ class RhodeCodeAuthPlugin(RhodeCodeExter log.info('user `%s` authenticated correctly', user_attrs['username']) return user_attrs + + +def includeme(config): + plugin_id = 'egg:rhodecode-enterprise-ce#{}'.format('jasig_cas') + plugin_factory(plugin_id).includeme(config) diff --git a/rhodecode/authentication/plugins/auth_ldap.py b/rhodecode/authentication/plugins/auth_ldap.py --- a/rhodecode/authentication/plugins/auth_ldap.py +++ b/rhodecode/authentication/plugins/auth_ldap.py @@ -526,3 +526,8 @@ class RhodeCodeAuthPlugin(RhodeCodeExter except (Exception,): log.exception("Other exception") return None + + +def includeme(config): + plugin_id = 'egg:rhodecode-enterprise-ce#{}'.format('ldap') + plugin_factory(plugin_id).includeme(config) diff --git a/rhodecode/authentication/plugins/auth_pam.py b/rhodecode/authentication/plugins/auth_pam.py --- a/rhodecode/authentication/plugins/auth_pam.py +++ b/rhodecode/authentication/plugins/auth_pam.py @@ -163,3 +163,8 @@ class RhodeCodeAuthPlugin(RhodeCodeExter log.debug("pamuser: %s", user_attrs) log.info('user `%s` authenticated correctly', user_attrs['username']) return user_attrs + + +def includeme(config): + plugin_id = 'egg:rhodecode-enterprise-ce#{}'.format('pam') + plugin_factory(plugin_id).includeme(config) diff --git a/rhodecode/authentication/plugins/auth_rhodecode.py b/rhodecode/authentication/plugins/auth_rhodecode.py --- a/rhodecode/authentication/plugins/auth_rhodecode.py +++ b/rhodecode/authentication/plugins/auth_rhodecode.py @@ -141,3 +141,8 @@ class RhodeCodeAuthPlugin(RhodeCodeAuthP 'user `%s` failed to authenticate via %s, reason: account not ' 'active.', username, self.name) return None + + +def includeme(config): + plugin_id = 'egg:rhodecode-enterprise-ce#{}'.format('rhodecode') + plugin_factory(plugin_id).includeme(config) diff --git a/rhodecode/authentication/plugins/auth_token.py b/rhodecode/authentication/plugins/auth_token.py --- a/rhodecode/authentication/plugins/auth_token.py +++ b/rhodecode/authentication/plugins/auth_token.py @@ -149,3 +149,8 @@ class RhodeCodeAuthPlugin(RhodeCodeAuthP 'user `%s` failed to authenticate via %s, reason: account not ' 'active.', username, self.name) return None + + +def includeme(config): + plugin_id = 'egg:rhodecode-enterprise-ce#{}'.format('token') + plugin_factory(plugin_id).includeme(config) diff --git a/rhodecode/config/middleware.py b/rhodecode/config/middleware.py --- a/rhodecode/config/middleware.py +++ b/rhodecode/config/middleware.py @@ -108,7 +108,8 @@ def make_pyramid_app(global_config, **se # creating the app uses a connection - return it after we are done meta.Session.remove() total_time = time.time() - start_time - log.info('Pyramid app %s created and configured in %.2fs', pyramid_app, total_time) + log.info('Pyramid app `%s` created and configured in %.2fs', + pyramid_app.func_name, total_time) return pyramid_app @@ -237,13 +238,13 @@ def includeme(config): config.include('pyramid_beaker') config.include('rhodecode.lib.rc_cache') - config.include('rhodecode.authentication') - config.include('rhodecode.integrations') - config.include('rhodecode.apps._base.navigation') config.include('rhodecode.apps._base.subscribers') config.include('rhodecode.tweens') + config.include('rhodecode.integrations') + config.include('rhodecode.authentication') + # apps config.include('rhodecode.apps._base') config.include('rhodecode.apps.ops') @@ -266,7 +267,6 @@ def includeme(config): config.include('rhodecode.api') config.add_route('rhodecode_support', 'https://rhodecode.com/help/', static=True) - config.add_translation_dirs('rhodecode:i18n/') settings['default_locale_name'] = settings.get('lang', 'en') diff --git a/rhodecode/integrations/registry.py b/rhodecode/integrations/registry.py --- a/rhodecode/integrations/registry.py +++ b/rhodecode/integrations/registry.py @@ -32,6 +32,6 @@ class IntegrationTypeRegistry(collection if key in self: log.debug( 'Overriding existing integration type %s (%s) with %s', - self[key], key, IntegrationType) + self[key].__class__, key, IntegrationType) self[key] = IntegrationType diff --git a/setup.py b/setup.py --- a/setup.py +++ b/setup.py @@ -148,15 +148,6 @@ setup( }, paster_plugins=['PasteScript'], entry_points={ - 'enterprise.plugins1': [ - 'crowd=rhodecode.authentication.plugins.auth_crowd:plugin_factory', - 'headers=rhodecode.authentication.plugins.auth_headers:plugin_factory', - 'jasig_cas=rhodecode.authentication.plugins.auth_jasig_cas:plugin_factory', - 'ldap=rhodecode.authentication.plugins.auth_ldap:plugin_factory', - 'pam=rhodecode.authentication.plugins.auth_pam:plugin_factory', - 'rhodecode=rhodecode.authentication.plugins.auth_rhodecode:plugin_factory', - 'token=rhodecode.authentication.plugins.auth_token:plugin_factory', - ], 'paste.app_factory': [ 'main=rhodecode.config.middleware:make_pyramid_app', ],