/// <summary> /// Verificar si un usuario existe en el repositorio /// </summary> /// <param name="loginName">Login del usuario</param> /// <returns></returns> public bool UserExist(string loginName) { AdamUser user = new AdamUser(); string filter = string.Format("(&(objectClass=user)(cn={0}))", loginName); this.OpenConnection(); SearchRequest srchRequest = new SearchRequest(this._usersDistinguishedName, filter, SearchScope.Subtree); SearchResponse srchResponse = (SearchResponse)this._adamConnection.SendRequest(srchRequest); this.CloseConnection(); return srchResponse.Entries.Count != 0; }
/// <summary> /// Obtiene un objeto del tipo AdamUser /// </summary> /// <param name="loginName">Login del usuario</param> /// <returns></returns> public AdamUser GetUser(string loginName) { if (!this.UserExist(loginName)) return null; AdamUser user = new AdamUser(); string filter = string.Format("(&(objectClass=Person)(cn={0}))", loginName); this.OpenConnection(); SearchRequest srchRequest = new SearchRequest(this._usersDistinguishedName, filter, SearchScope.Subtree); SearchResponse srchResponse = (SearchResponse)this._adamConnection.SendRequest(srchRequest); this.CloseConnection(); SearchResultEntry srchEntry = srchResponse.Entries[0]; user.Groups = new List<string>(); DirectoryAttribute memberOfGroups = srchResponse.Entries[0].Attributes["memberOf"]; if (memberOfGroups != null) { string[] groupsDN = (string[])memberOfGroups.GetValues(typeof(string)); foreach (string groupDN in groupsDN) { int fPos = groupDN.IndexOf("=") + 1; int lPos = groupDN.IndexOf(","); string groupName = groupDN.Substring(fPos, lPos - fPos); user.Groups.Add(groupName); } } user.DistinguishedName = srchEntry.DistinguishedName; if (srchEntry.Attributes["givenName"] != null) user.FullName = srchEntry.Attributes["givenName"].GetValues(typeof(String))[0].ToString(); else user.FullName = ""; if (srchEntry.Attributes["cn"] != null) user.LoginName = srchEntry.Attributes["cn"].GetValues(typeof(String))[0].ToString(); else user.LoginName = ""; return user; }