You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@allura.apache.org by br...@apache.org on 2014/06/19 17:53:14 UTC

[6/9] git commit: [#7406] LdapUserPreferencesProvider, for display_name

[#7406] LdapUserPreferencesProvider, for display_name


Project: http://git-wip-us.apache.org/repos/asf/allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/allura/commit/41c67412
Tree: http://git-wip-us.apache.org/repos/asf/allura/tree/41c67412
Diff: http://git-wip-us.apache.org/repos/asf/allura/diff/41c67412

Branch: refs/heads/master
Commit: 41c67412521835507c02b9bc85fc571068e8ce8e
Parents: 30b43bb
Author: Dave Brondsema <db...@slashdotmedia.com>
Authored: Thu Jun 12 14:33:23 2014 +0000
Committer: Dave Brondsema <db...@slashdotmedia.com>
Committed: Thu Jun 19 15:52:50 2014 +0000

----------------------------------------------------------------------
 Allura/allura/lib/plugin.py | 39 +++++++++++++++++++++++++++++++++++++++
 Allura/development.ini      |  7 +++++++
 Allura/setup.py             |  1 +
 3 files changed, 47 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/allura/blob/41c67412/Allura/allura/lib/plugin.py
----------------------------------------------------------------------
diff --git a/Allura/allura/lib/plugin.py b/Allura/allura/lib/plugin.py
index 396da93..ffe9d29 100644
--- a/Allura/allura/lib/plugin.py
+++ b/Allura/allura/lib/plugin.py
@@ -1118,6 +1118,45 @@ class LocalUserPreferencesProvider(UserPreferencesProvider):
             setattr(user, pref_name, pref_value)
 
 
+class LdapUserPreferencesProvider(UserPreferencesProvider):
+    '''
+    Store preferences in LDAP, falling back to LocalUserPreferencesProvider
+    '''
+
+    @LazyProperty
+    def fields(self):
+        return h.config_with_prefix(config, 'user_prefs_storage.ldap.fields.')
+
+    def get_pref(self, user, pref_name):
+        from allura import model as M
+        if pref_name in self.fields and user != M.User.anonymous():
+            con = ldap_conn()
+            try:
+                rs = con.search_s(ldap_user_dn(user.username), ldap.SCOPE_BASE)
+            except ldap.NO_SUCH_OBJECT:
+                rs = []
+            else:
+                con.unbind_s()
+            if not rs:
+                log.warning('LdapUserPref: No user record found for: {}'.format(user.username))
+                return ''
+            user_dn, user_attrs = rs[0]
+            ldap_attr = self.fields[pref_name]
+            return user_attrs[ldap_attr][0]  # assume single-valued list
+        else:
+            return LocalUserPreferencesProvider().get_pref(user, pref_name)
+
+    def set_pref(self, user, pref_name, pref_value):
+        if pref_name in self.fields:
+            con = ldap_conn()
+            ldap_attr = self.fields[pref_name]
+            con.modify_s(ldap_user_dn(user.username),
+                         [(ldap.MOD_REPLACE, ldap_attr, pref_value.encode('utf-8'))])
+            con.unbind_s()
+        else:
+            return LocalUserPreferencesProvider().set_pref(user, pref_name, pref_value)
+
+
 class AdminExtension(object):
 
     """

http://git-wip-us.apache.org/repos/asf/allura/blob/41c67412/Allura/development.ini
----------------------------------------------------------------------
diff --git a/Allura/development.ini b/Allura/development.ini
index c091b32..4231737 100644
--- a/Allura/development.ini
+++ b/Allura/development.ini
@@ -102,6 +102,13 @@ auth.allow_user_messages_config = true
 # In seconds
 auth.recovery_hash_expiry_period = 600
 
+user_prefs_storage.method = local
+# user_prefs_storage.method = ldap
+# If using ldap, you can specify which fields to use for a preference.
+# Any fields not specified here will be stored locally in mongo
+user_prefs_storage.ldap.fields.display_name = cn
+
+
 # Set the locations of some static resources
 #  script_name is the path that is handled by the application
 #  url_base is the prefix that references to the static resources should have

http://git-wip-us.apache.org/repos/asf/allura/blob/41c67412/Allura/setup.py
----------------------------------------------------------------------
diff --git a/Allura/setup.py b/Allura/setup.py
index 1671283..8eabf60 100644
--- a/Allura/setup.py
+++ b/Allura/setup.py
@@ -112,6 +112,7 @@ setup(
 
     [allura.user_prefs]
     local = allura.lib.plugin:LocalUserPreferencesProvider
+    ldap = allura.lib.plugin:LdapUserPreferencesProvider
 
     [allura.project_registration]
     local = allura.lib.plugin:LocalProjectRegistrationProvider