summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKevin McCarthy <kmccarth@redhat.com>2007-10-18 14:33:55 -0700
committerKevin McCarthy <kmccarth@redhat.com>2007-10-18 14:33:55 -0700
commit5e651a6496848f5ee3f6415ef3b56ca140c88556 (patch)
tree3a8f78b27aa28d2125275d42fa07110fa34ad42a
parentf018c2123c2b0018af5d41ec007ac8ddf0f04d31 (diff)
downloadfreeipa-5e651a6496848f5ee3f6415ef3b56ca140c88556.tar.gz
freeipa-5e651a6496848f5ee3f6415ef3b56ca140c88556.tar.xz
freeipa-5e651a6496848f5ee3f6415ef3b56ca140c88556.zip
Finish the email autosuggest.
For now I've added a new API call. The field-specific searching is a ways off.
-rw-r--r--ipa-python/ipaclient.py7
-rw-r--r--ipa-python/rpcclient.py18
-rw-r--r--ipa-server/ipa-gui/ipagui/subcontrollers/user.py40
-rw-r--r--ipa-server/xmlrpc-server/funcs.py11
-rw-r--r--ipa-server/xmlrpc-server/ipaxmlrpc.py1
5 files changed, 49 insertions, 28 deletions
diff --git a/ipa-python/ipaclient.py b/ipa-python/ipaclient.py
index 63cd425f..7131be48 100644
--- a/ipa-python/ipaclient.py
+++ b/ipa-python/ipaclient.py
@@ -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 --git a/ipa-python/rpcclient.py b/ipa-python/rpcclient.py
index df3d0138..53fb690b 100644
--- a/ipa-python/rpcclient.py
+++ b/ipa-python/rpcclient.py
@@ -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 --git a/ipa-server/ipa-gui/ipagui/subcontrollers/user.py b/ipa-server/ipa-gui/ipagui/subcontrollers/user.py
index 5552bee7..5b804fd6 100644
--- a/ipa-server/ipa-gui/ipagui/subcontrollers/user.py
+++ b/ipa-server/ipa-gui/ipagui/subcontrollers/user.py
@@ -17,6 +17,7 @@ import ipa.user
from ipa.entity import utf8_encode_values
from ipa import ipaerror
import ipagui.forms.user
+import ipa.config
log = logging.getLogger(__name__)
@@ -27,6 +28,8 @@ user_edit_form = ipagui.forms.user.UserEditForm()
user_fields = ['*', 'nsAccountLock']
+email_domain = ipa.config.config.default_realm.lower()
+
class UserController(IPAController):
@expose()
@@ -518,31 +521,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
+ 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
- # 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
+ 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 ""
+ return ""
diff --git a/ipa-server/xmlrpc-server/funcs.py b/ipa-server/xmlrpc-server/funcs.py
index 8ba0efdd..4b2cfc9f 100644
--- a/ipa-server/xmlrpc-server/funcs.py
+++ b/ipa-server/xmlrpc-server/funcs.py
@@ -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 --git a/ipa-server/xmlrpc-server/ipaxmlrpc.py b/ipa-server/xmlrpc-server/ipaxmlrpc.py
index e9da9586..2785c680 100644
--- a/ipa-server/xmlrpc-server/ipaxmlrpc.py
+++ b/ipa-server/xmlrpc-server/ipaxmlrpc.py
@@ -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)