[Freeipa-devel] [PATCH] finish email auto-suggest

Kevin McCarthy kmccarth at redhat.com
Thu Oct 18 21:36:15 UTC 2007


Finish up the email auto-suggest.  Searching w/field specification is a
ways off, so for now I'm adding an API call.

-Kevin

-------------- next part --------------
# HG changeset patch
# User Kevin McCarthy <kmccarth at redhat.com>
# Date 1192743235 25200
# Node ID 57092d263dfeaf213adf10b04af0333efb4eb25f
# Parent  d3b8c1fad11638fd5b6e84ab2ba4ce1cbb9009ad
Finish the email autosuggest.
For now I've added a new API call.  The field-specific searching is
a ways off.

diff -r d3b8c1fad116 -r 57092d263dfe ipa-python/ipaclient.py
--- a/ipa-python/ipaclient.py	Thu Oct 18 14:17:59 2007 -0700
+++ b/ipa-python/ipaclient.py	Thu Oct 18 14:33:55 2007 -0700
@@ -98,6 +98,13 @@ class IPAClient:
         result = self.transport.get_user_by_principal(principal,sattrs)
         return user.User(result)
 
+    def get_user_by_email(self,email,sattrs=None):
+        """Get a specific user's entry. Return as a dict of values.
+           Multi-valued fields are represented as lists.
+        """
+        result = self.transport.get_user_by_email(email,sattrs)
+        return user.User(result)
+
     def get_users_by_manager(self,manager_dn,sattrs=None):
         """Gets the users the report to a particular manager.
            If sattrs is not None then only those
diff -r d3b8c1fad116 -r 57092d263dfe ipa-python/rpcclient.py
--- a/ipa-python/rpcclient.py	Thu Oct 18 14:17:59 2007 -0700
+++ b/ipa-python/rpcclient.py	Thu Oct 18 14:33:55 2007 -0700
@@ -165,7 +165,23 @@ class RPCClient:
             raise xmlrpclib.Fault(value, msg)
 
         return ipautil.unwrap_binary_data(result)
- 
+
+    def get_user_by_email(self,email,sattrs=None):
+        """Get a specific user's entry. Return as a dict of values.
+           Multi-valued fields are represented as lists.
+        """
+        server = self.setup_server()
+        if sattrs is None:
+            sattrs = "__NONE__"
+        try:
+            result = server.get_user_by_email(email, sattrs)
+        except xmlrpclib.Fault, fault:
+            raise ipaerror.gen_exception(fault.faultCode, fault.faultString)
+        except socket.error, (value, msg):
+            raise xmlrpclib.Fault(value, msg)
+
+        return ipautil.unwrap_binary_data(result)
+
     def get_users_by_manager(self,manager_dn,sattrs=None):
         """Gets the users that report to a manager.
            If sattrs is not None then only those
diff -r d3b8c1fad116 -r 57092d263dfe ipa-server/ipa-gui/ipagui/subcontrollers/user.py
--- a/ipa-server/ipa-gui/ipagui/subcontrollers/user.py	Thu Oct 18 14:17:59 2007 -0700
+++ b/ipa-server/ipa-gui/ipagui/subcontrollers/user.py	Thu Oct 18 14:33:55 2007 -0700
@@ -17,6 +17,7 @@ from ipa.entity import utf8_encode_value
 from ipa.entity import utf8_encode_values
 from ipa import ipaerror
 import ipagui.forms.user
+import ipa.config
 
 log = logging.getLogger(__name__)
 
@@ -26,6 +27,8 @@ user_edit_form = ipagui.forms.user.UserE
 user_edit_form = ipagui.forms.user.UserEditForm()
 
 user_fields = ['*', 'nsAccountLock']
+
+email_domain = ipa.config.config.default_realm.lower()
 
 class UserController(IPAController):
 
@@ -512,31 +515,16 @@ class UserController(IPAController):
         givenname = givenname.lower()
         sn = sn.lower()
 
-        # TODO - get from config
-        domain = "freeipa.org"
-
-        return "%s.%s@%s" % (givenname, sn, domain)
-
-
-        # TODO - mail is currently not indexed nor searchable.
-        #        implement when it's done
-        # email = givenname + "." + sn + domain
-        # users = client.find_users(email, ['mail'])
-        # if len(filter(lambda u: u['mail'] == email, users[1:])) == 0:
-        #     return email
-
-        # email = self.suggest_uid(givenname, sn) + domain
-        # users = client.find_users(email, ['mail'])
-        # if len(filter(lambda u: u['mail'] == email, users[1:])) == 0:
-        #     return email
-
-        # suffix = 2
-        # template = givenname + "." + sn
-        # while suffix < 20:
-        #     email = template + str(suffix) + domain
-        #     users = client.find_users(email, ['mail'])
-        #     if len(filter(lambda u: u['mail'] == email, users[1:])) == 0:
-        #         return email
-        #     suffix += 1
-
-        # return ""
+        email = "%s.%s@%s" % (givenname, sn, email_domain)
+        try:
+            client.get_user_by_email(email)
+        except ipaerror.exception_for(ipaerror.LDAP_NOT_FOUND):
+            return email
+
+        email = "%s@%s" % (self.suggest_uid(givenname, sn), email_domain)
+        try:
+            client.get_user_by_email(email)
+        except ipaerror.exception_for(ipaerror.LDAP_NOT_FOUND):
+            return email
+
+        return ""
diff -r d3b8c1fad116 -r 57092d263dfe ipa-server/xmlrpc-server/funcs.py
--- a/ipa-server/xmlrpc-server/funcs.py	Thu Oct 18 14:17:59 2007 -0700
+++ b/ipa-server/xmlrpc-server/funcs.py	Thu Oct 18 14:33:55 2007 -0700
@@ -377,7 +377,16 @@ class IPAServer:
 
         filter = "(krbPrincipalName="+self.__safe_filter(principal)+")"
         return self.__get_sub_entry(self.basedn, filter, sattrs, opts)
-    
+
+    def get_user_by_email (self, email, sattrs=None, opts=None):
+        """Get a specific user's entry. Return as a dict of values.
+           Multi-valued fields are represented as lists.
+        """
+
+        email = self.__safe_filter(email)
+        filter = "(mail=" + email + ")"
+        return self.__get_sub_entry(self.basedn, filter, sattrs, opts)
+
     def get_users_by_manager (self, manager_dn, sattrs=None, opts=None):
         """Gets the users that report to a particular manager.
         """
diff -r d3b8c1fad116 -r 57092d263dfe ipa-server/xmlrpc-server/ipaxmlrpc.py
--- a/ipa-server/xmlrpc-server/ipaxmlrpc.py	Thu Oct 18 14:17:59 2007 -0700
+++ b/ipa-server/xmlrpc-server/ipaxmlrpc.py	Thu Oct 18 14:33:55 2007 -0700
@@ -323,6 +323,7 @@ def handler(req, profiling=False):
             h.register_function(f.update_entry)
             h.register_function(f.get_user_by_uid)
             h.register_function(f.get_user_by_principal)
+            h.register_function(f.get_user_by_email)
             h.register_function(f.get_users_by_manager)
             h.register_function(f.add_user)
             h.register_function(f.get_add_schema)
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/x-pkcs7-signature
Size: 4054 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/freeipa-devel/attachments/20071018/9cdf5526/attachment.bin>


More information about the Freeipa-devel mailing list