예제 #1
0
        /// <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;
        }
예제 #2
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;
        }