Finish the email autosuggest.

For now I've added a new API call.  The field-specific searching is
a ways off.
This commit is contained in:
Kevin McCarthy 2007-10-18 14:33:55 -07:00
parent f018c2123c
commit 5e651a6496
5 changed files with 49 additions and 28 deletions

View File

@ -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

View File

@ -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

View File

@ -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"
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
return "%s.%s@%s" % (givenname, sn, domain)
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
# 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 ""
return ""

View File

@ -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.
"""

View File

@ -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)