Module: check_mk
Branch: master
Commit: ff3cbdd3062d2df101ac5fcf823520e67d7e5caa
URL:
http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=ff3cbdd3062d2d…
Author: Lars Michelsen <lm(a)mathias-kettner.de>
Date: Fri Jun 26 08:20:26 2015 +0200
Intermediate step in cleanups
---
web/htdocs/userdb.py | 59 +++++++++++++++++++++++-----------------
web/htdocs/wato.py | 3 +-
web/plugins/userdb/htpasswd.py | 6 ++--
web/plugins/userdb/ldap.py | 8 ++----
4 files changed, 40 insertions(+), 36 deletions(-)
diff --git a/web/htdocs/userdb.py b/web/htdocs/userdb.py
index e391864..8d8647d 100644
--- a/web/htdocs/userdb.py
+++ b/web/htdocs/userdb.py
@@ -60,7 +60,7 @@ def load_plugins():
# declare & initialize global vars
user_attributes = {}
- multisite_user_connectors = []
+ multisite_user_connectors = {}
load_web_plugins("userdb", globals())
builtin_user_attribute_names = user_attributes.keys()
@@ -68,7 +68,7 @@ def load_plugins():
# Connectors have the option to perform migration of configuration options
# while the initial loading is performed
- for connector in multisite_user_connectors:
+ for connector in multisite_user_connectors.values():
connector.get('migrate_config', lambda: None)()
# This must be set after plugin loading to make broken plugins raise
@@ -77,28 +77,37 @@ def load_plugins():
loaded_with_language = current_language
-def list_user_connectors():
- return [ (c['id'], c['title']) for c in multisite_user_connectors ]
-
-def enabled_connectors():
- connectors = []
- for connector in multisite_user_connectors:
- if connector.get('is_active', lambda: False)():
- connectors.append(connector)
+# Returns a list of two part tuples where the first element is the unique
+# connection id and the second element the connector specification dict
+def active_connections():
+ connections = []
+ for connector_id, connector in multisite_user_connectors.items():
+ if connector_id == 'htpasswd':
+ # htpasswd connector is enabled by default and always executed first
+ connections.insert(0, ('htpasswd', connector))
+ else:
+ for connection in get_connection_config():
+ connections.append((connection['id'], connector))
return connectors
-def get_connector_id(connector_id):
- if connector_id is None:
- connector_id = 'htpasswd'
- return connector_id
+
+def cleanup_connection_id(connection_id):
+ if connection_id is None:
+ connection_id = 'htpasswd'
+
+ # Old Check_MK used a static "ldap" connector id for all LDAP users.
+ # Since Check_MK now supports multiple LDAP connections, the ID has
+ # been changed to "default"
+ if connection_id == 'ldap':
+ connection_id = 'default'
+
+ return connection_id
+
# Returns the connector dictionary of the given id
-def get_connector(connector_id):
- connector_id = get_connector_id(connector_id)
- for connector in enabled_connectors():
- if connector['id'] == connector_id:
- return connector
- return {}
+def get_connector(connection_id):
+ return dict(active_connections()).get(cleanup_connection_id(connection_id), {})
+
# Returns a list of locked attributes
def locked_attributes(connector_id):
@@ -757,7 +766,7 @@ def save_connection_config():
# This hook is called to validate the login credentials provided by a user
def hook_login(username, password):
- for connector in enabled_connectors():
+ for connection_id, connector in active_connections():
handler = connector.get('login', None)
if not handler:
continue
@@ -796,9 +805,9 @@ def hook_login(username, password):
# c) Before activating the changes in WATO
def hook_sync(connector_id = None, add_to_changelog = False, only_username = None,
raise_exc = False):
if connector_id:
- connectors = [ get_connector(connector_id) ]
+ connectors = [ (connector_id, get_connector(connector_id)) ]
else:
- connectors = enabled_connectors()
+ connectors = active_connections()
no_errors = True
for connector in connectors:
@@ -835,7 +844,7 @@ def hook_sync(connector_id = None, add_to_changelog = False,
only_username = Non
# Hook function can be registered here to be executed during saving of the
# new user construct
def hook_save(users):
- for connector in enabled_connectors():
+ for connection_id, connector in active_connections():
handler = connector.get('save', None)
if not handler:
continue
@@ -876,7 +885,7 @@ def hook_page():
if 'page' not in config.userdb_automatic_sync:
return
- for connector in enabled_connectors():
+ for connection_id, connector in active_connections():
handler = connector.get('page', None)
if not handler:
continue
diff --git a/web/htdocs/wato.py b/web/htdocs/wato.py
index f3729f6..abe2034 100644
--- a/web/htdocs/wato.py
+++ b/web/htdocs/wato.py
@@ -12338,7 +12338,8 @@ def mode_users(phase):
table.cell(_("Connector"), connector['short_title'])
locked_attributes = userdb.locked_attributes(user.get('connector'))
else:
- table.cell(_("Connector"), "%s (disabled)" %
userdb.get_connector_id(user.get('connector')), css="error")
+ table.cell(_("Connector"), "%s (disabled)" %
+ userdb.cleanup_connection_id(user.get('connector')),
css="error")
locked_attributes = []
# Authentication
diff --git a/web/plugins/userdb/htpasswd.py b/web/plugins/userdb/htpasswd.py
index 4d39c97..7c5c9bb 100644
--- a/web/plugins/userdb/htpasswd.py
+++ b/web/plugins/userdb/htpasswd.py
@@ -130,14 +130,12 @@ def htpasswd_save(users):
if rename_file:
os.rename(filename, filename[:-4])
-multisite_user_connectors.append({
- 'id' : 'htpasswd',
+multisite_user_connectors['htpasswd'] = {
'title' : _('Apache Local Password File (htpasswd)'),
'short_title' : _('htpasswd'),
# Register hook functions
- 'is_active' : lambda: True,
'login' : htpasswd_login,
'save' : htpasswd_save,
# Not registering: sync, locked_attributes, page
-})
+}
diff --git a/web/plugins/userdb/ldap.py b/web/plugins/userdb/ldap.py
index 05d2ca8..0f535c3 100644
--- a/web/plugins/userdb/ldap.py
+++ b/web/plugins/userdb/ldap.py
@@ -1002,9 +1002,6 @@ ldap_attribute_plugins['groups_to_roles'] = {
# | Hook functions used in this connector |
# '----------------------------------------------------------------------'
-def ldap_is_active():
- return bool([ c for c in connection_config if c['type'] == 'ldap' and
not c.get('disabled') ])
-
# This function only validates credentials, no locked checking or similar
def ldap_login(username, password):
ldap_connect()
@@ -1284,12 +1281,11 @@ def ldap_migrate_config():
save_connection_config()
-multisite_user_connectors.append({
+multisite_user_connectors['ldap'] = {
'id' : 'ldap',
'title' : _('LDAP (Active Directory, OpenLDAP)'),
'short_title' : _('LDAP'),
- 'is_active' : ldap_is_active,
'migrate_config' : ldap_migrate_config,
'login' : ldap_login,
'sync' : ldap_sync,
@@ -1302,4 +1298,4 @@ multisite_user_connectors.append({
'locked_attributes' : ldap_locked_attributes,
'multisite_attributes' : ldap_multisite_attributes,
'non_contact_attributes' : ldap_multisite_attributes,
-})
+}