626 lines
		
	
	
		
			22 KiB
		
	
	
	
		
			C#
		
	
	
	
			
		
		
	
	
			626 lines
		
	
	
		
			22 KiB
		
	
	
	
		
			C#
		
	
	
	
using System;
 | 
						|
using System.Collections.Generic;
 | 
						|
using System.Collections.ObjectModel;
 | 
						|
using System.DirectoryServices;
 | 
						|
using System.DirectoryServices.Protocols;
 | 
						|
using System.Linq;
 | 
						|
using System.Net;
 | 
						|
using System.Security.Cryptography.X509Certificates;
 | 
						|
using System.Text;
 | 
						|
 | 
						|
namespace FineUIPro.Web
 | 
						|
{
 | 
						|
 | 
						|
    public sealed class LdapAuthentication
 | 
						|
    {
 | 
						|
        private bool _allowAnyCertificates;
 | 
						|
 | 
						|
        private string _domain;
 | 
						|
 | 
						|
        private string _path;
 | 
						|
 | 
						|
        private string _userNameProxyUser;
 | 
						|
 | 
						|
        private string _passwordProxyUser;
 | 
						|
 | 
						|
        private AuthenticationTypes _authenticationType;
 | 
						|
 | 
						|
        public static readonly string LdapUriString = "LDAP";
 | 
						|
 | 
						|
        public static readonly int LdapPort = 389;
 | 
						|
 | 
						|
        public static readonly int LdapPortSsl = 636;
 | 
						|
 | 
						|
        private X509Certificate _locallyVerificationCertificate;
 | 
						|
 | 
						|
        private string _locallyVerificationCertificateSerialNumber;
 | 
						|
 | 
						|
        private bool _useSecureSocketLayer;
 | 
						|
 | 
						|
        private bool _verifyCertificateLocally;
 | 
						|
 | 
						|
        private LdapDirectoryIdentifier _directoryIdentifier;
 | 
						|
 | 
						|
        public bool AllowAnyCertificates
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                return _allowAnyCertificates;
 | 
						|
            }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                _allowAnyCertificates = value;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        public string Domain
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                return _domain;
 | 
						|
            }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                _domain = value;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        public string Path
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                return _path;
 | 
						|
            }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                _path = value;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        public string UserNameProxyUser
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                return _userNameProxyUser;
 | 
						|
            }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                _userNameProxyUser = value;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        public string PasswordProxyUser
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                return _passwordProxyUser;
 | 
						|
            }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                _passwordProxyUser = value;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        public AuthenticationTypes AuthenticationType
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                return _authenticationType;
 | 
						|
            }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                _authenticationType = value;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        public X509Certificate LocallyVerificationCertificate
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                return _locallyVerificationCertificate;
 | 
						|
            }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                _locallyVerificationCertificate = value;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        public string LocallyVerificationCertificateSerialNumber
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                return _locallyVerificationCertificateSerialNumber;
 | 
						|
            }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                _locallyVerificationCertificateSerialNumber = value;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        public bool UseSecureSocketLayer
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                return _useSecureSocketLayer;
 | 
						|
            }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                lock (this)
 | 
						|
                {
 | 
						|
                    _useSecureSocketLayer = value;
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        public bool VerifyCertificateLocally
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                return _verifyCertificateLocally;
 | 
						|
            }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                lock (this)
 | 
						|
                {
 | 
						|
                    _verifyCertificateLocally = value;
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        public LdapDirectoryIdentifier DirectoryIdentifier
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                if (_directoryIdentifier == null)
 | 
						|
                {
 | 
						|
                    lock (this)
 | 
						|
                    {
 | 
						|
                        SetDirectoryIdentifier();
 | 
						|
                    }
 | 
						|
                }
 | 
						|
                return _directoryIdentifier;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        public LdapAuthentication()
 | 
						|
        {
 | 
						|
            _authenticationType = AuthenticationTypes.FastBind;
 | 
						|
        }
 | 
						|
 | 
						|
        private void SetDirectoryIdentifier()
 | 
						|
        {
 | 
						|
            int num = 0;
 | 
						|
            _directoryIdentifier = new LdapDirectoryIdentifier(portNumber: (!UseSecureSocketLayer) ? LdapPort : LdapPortSsl, server: _domain);
 | 
						|
        }
 | 
						|
 | 
						|
        public DirectoryEntry GetDirectoryEntryOfProxyUser()
 | 
						|
        {
 | 
						|
            string text = $"{LdapUriString}://{_domain}/{_path}";
 | 
						|
            using (DirectoryEntry result = new DirectoryEntry(text, _userNameProxyUser, _passwordProxyUser, _authenticationType))
 | 
						|
            {
 | 
						|
                try
 | 
						|
                {
 | 
						|
                    return result;
 | 
						|
                }
 | 
						|
                catch (Exception innerException)
 | 
						|
                {
 | 
						|
                    throw new Exception(text, innerException);
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        private bool OnLdapConnectionVerifyServerCertificate(LdapConnection connection, X509Certificate serverCertificate)
 | 
						|
        {
 | 
						|
            if (AllowAnyCertificates)
 | 
						|
            {
 | 
						|
                return true;
 | 
						|
            }
 | 
						|
            if (!VerifyCertificateLocally)
 | 
						|
            {
 | 
						|
                return true;
 | 
						|
            }
 | 
						|
            if (LocallyVerificationCertificate != null)
 | 
						|
            {
 | 
						|
                if (LocallyVerificationCertificate.Equals(serverCertificate))
 | 
						|
                {
 | 
						|
                    return true;
 | 
						|
                }
 | 
						|
                return false;
 | 
						|
            }
 | 
						|
            if (!string.IsNullOrEmpty(LocallyVerificationCertificateSerialNumber))
 | 
						|
            {
 | 
						|
                if (serverCertificate.GetSerialNumberString() == LocallyVerificationCertificateSerialNumber)
 | 
						|
                {
 | 
						|
                    return true;
 | 
						|
                }
 | 
						|
                return false;
 | 
						|
            }
 | 
						|
            X509Store x509Store = new X509Store("My");
 | 
						|
            x509Store.Open(OpenFlags.ReadOnly);
 | 
						|
            X509Certificate2Enumerator enumerator = x509Store.Certificates.GetEnumerator();
 | 
						|
            while (enumerator.MoveNext())
 | 
						|
            {
 | 
						|
                X509Certificate2 current = enumerator.Current;
 | 
						|
                if (current.SerialNumber == serverCertificate.GetSerialNumberString())
 | 
						|
                {
 | 
						|
                    return true;
 | 
						|
                }
 | 
						|
            }
 | 
						|
            return false;
 | 
						|
        }
 | 
						|
 | 
						|
        public bool CheckPassword(string userName, string password)
 | 
						|
        {
 | 
						|
            Collection<string> groupMemberships = null;
 | 
						|
            LdapUser ldapUserInfo = null;
 | 
						|
            return CheckPassword(userName, password, readGroupMemberships: false, out groupMemberships, readLdapUserInfo: false, out ldapUserInfo);
 | 
						|
        }
 | 
						|
 | 
						|
        public bool CheckPassword(string userName, string password, out Collection<string> groupMemberships)
 | 
						|
        {
 | 
						|
            LdapUser ldapUserInfo = null;
 | 
						|
            return CheckPassword(userName, password, readGroupMemberships: true, out groupMemberships, readLdapUserInfo: false, out ldapUserInfo);
 | 
						|
        }
 | 
						|
 | 
						|
        public bool CheckPassword(string userName, string password, out LdapUser ldapUserInfo)
 | 
						|
        {
 | 
						|
            Collection<string> groupMemberships = null;
 | 
						|
            return CheckPassword(userName, password, readGroupMemberships: false, out groupMemberships, readLdapUserInfo: true, out ldapUserInfo);
 | 
						|
        }
 | 
						|
 | 
						|
        public bool CheckPassword(string userName, string password, out Collection<string> groupMemberships, out LdapUser ldapUserInfo)
 | 
						|
        {
 | 
						|
            return CheckPassword(userName, password, readGroupMemberships: true, out groupMemberships, readLdapUserInfo: true, out ldapUserInfo);
 | 
						|
        }
 | 
						|
 | 
						|
        private bool CheckPassword(string userName, string password, bool readGroupMemberships, out Collection<string> groupMemberships, bool readLdapUserInfo, out LdapUser ldapUserInfo)
 | 
						|
        {
 | 
						|
            if (string.IsNullOrEmpty(userName))
 | 
						|
            {
 | 
						|
                throw new ArgumentNullException("userName");
 | 
						|
            }
 | 
						|
            if (string.IsNullOrEmpty(password))
 | 
						|
            {
 | 
						|
                throw new ArgumentNullException("password");
 | 
						|
            }
 | 
						|
            if (password.Length >= 128)
 | 
						|
            {
 | 
						|
                throw new Exception();
 | 
						|
            }
 | 
						|
            groupMemberships = null;
 | 
						|
            ldapUserInfo = null;
 | 
						|
            List<string> list = new List<string>();
 | 
						|
            DirectoryEntry directoryEntryOfProxyUser = GetDirectoryEntryOfProxyUser();
 | 
						|
            if (directoryEntryOfProxyUser == null)
 | 
						|
            {
 | 
						|
                throw new Exception();
 | 
						|
            }
 | 
						|
            lock (this)
 | 
						|
            {
 | 
						|
 | 
						|
                BLL.ErrLogInfo.WriteLog("lock锁这里");
 | 
						|
                using (LdapConnection ldapConnection = new LdapConnection(DirectoryIdentifier))
 | 
						|
                {
 | 
						|
                    try
 | 
						|
                    {
 | 
						|
 | 
						|
                        BLL.ErrLogInfo.WriteLog("ldap验证");
 | 
						|
 | 
						|
                        ldapConnection.SessionOptions.SecureSocketLayer = UseSecureSocketLayer;
 | 
						|
                        if (UseSecureSocketLayer && (AllowAnyCertificates || VerifyCertificateLocally))
 | 
						|
                        {
 | 
						|
                            LdapSessionOptions sessionOptions = ldapConnection.SessionOptions;
 | 
						|
                            sessionOptions.VerifyServerCertificate = (VerifyServerCertificateCallback)Delegate.Combine(sessionOptions.VerifyServerCertificate, new VerifyServerCertificateCallback(OnLdapConnectionVerifyServerCertificate));
 | 
						|
                        }
 | 
						|
                        ldapConnection.Credential = new NetworkCredential(UserNameProxyUser, PasswordProxyUser);
 | 
						|
                        ldapConnection.AuthType = AuthType.Basic;
 | 
						|
                        ldapConnection.SessionOptions.ProtocolVersion = 3;
 | 
						|
                        ldapConnection.Bind();
 | 
						|
                    }
 | 
						|
                    catch (DirectoryServicesCOMException innerException)
 | 
						|
                    {
 | 
						|
                
 | 
						|
                        BLL.ErrLogInfo.WriteLog($"ldap验证失败:{innerException.Message}");
 | 
						|
                        throw new Exception("Proxyuser_NotFound", innerException);
 | 
						|
                    }
 | 
						|
                    catch (Exception ex)
 | 
						|
                    {
 | 
						|
                        BLL.ErrLogInfo.WriteLog($"捕获异常信息:{ex.Message}");
 | 
						|
                        throw ex;
 | 
						|
                    }
 | 
						|
                    finally
 | 
						|
                    {
 | 
						|
                        if (UseSecureSocketLayer && (AllowAnyCertificates || VerifyCertificateLocally))
 | 
						|
                        {
 | 
						|
                            LdapSessionOptions sessionOptions2 = ldapConnection.SessionOptions;
 | 
						|
                            sessionOptions2.VerifyServerCertificate = (VerifyServerCertificateCallback)Delegate.Remove(sessionOptions2.VerifyServerCertificate, new VerifyServerCertificateCallback(OnLdapConnectionVerifyServerCertificate));
 | 
						|
                        }
 | 
						|
                    }
 | 
						|
                    string ldapFilter = $" (cn={userName})";
 | 
						|
                    if (readGroupMemberships)
 | 
						|
                    {
 | 
						|
                        list.Add("groupmembership");
 | 
						|
                    }
 | 
						|
                    if (readLdapUserInfo)
 | 
						|
                    {
 | 
						|
                        BLL.ErrLogInfo.WriteLog($"readLdapUserInfo信息:{readLdapUserInfo}");
 | 
						|
                        GetUserAttrs(list);
 | 
						|
                    }
 | 
						|
                    SearchRequest request = new SearchRequest(_path, ldapFilter, System.DirectoryServices.Protocols.SearchScope.Subtree, list.ToArray());
 | 
						|
                    SearchResponse searchResponse = (SearchResponse)ldapConnection.SendRequest(request);
 | 
						|
                    if (searchResponse == null || searchResponse.Entries == null || searchResponse.Entries.Count < 1)
 | 
						|
                    {
 | 
						|
                        throw new Exception();
 | 
						|
                    }
 | 
						|
                    BLL.ErrLogInfo.WriteLog($"searchResponse不等于空");
 | 
						|
                    SearchResultEntry searchResultEntry = searchResponse.Entries[0];
 | 
						|
                    string distinguishedName = searchResultEntry.DistinguishedName;
 | 
						|
                    BLL.ErrLogInfo.WriteLog($"distinguishedName={distinguishedName}");
 | 
						|
                    if (readGroupMemberships)
 | 
						|
                    {
 | 
						|
                        groupMemberships = ReadGroupMembershipsInternal(searchResultEntry);
 | 
						|
                    }
 | 
						|
                    if (readLdapUserInfo)
 | 
						|
                    {
 | 
						|
                        ldapUserInfo = GetUserInfoFromDirectoryEntry(searchResultEntry);
 | 
						|
                    }
 | 
						|
                    ldapConnection.Credential = new NetworkCredential(distinguishedName, password);
 | 
						|
                    try
 | 
						|
                    {
 | 
						|
                        ldapConnection.Bind();
 | 
						|
                    }
 | 
						|
                    catch (LdapException innerException2)
 | 
						|
                    {
 | 
						|
                        BLL.ErrLogInfo.WriteLog($"ldap错误={innerException2.Message}");
 | 
						|
                        throw new Exception("LdapAuthentication_WrongPassword", innerException2);
 | 
						|
                    }
 | 
						|
                    return true;
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        private static void GetUserAttrs(List<string> attrs)
 | 
						|
        {
 | 
						|
            attrs.Add("basfANRED");
 | 
						|
            attrs.Add("basfBuilding");
 | 
						|
            attrs.Add("basfCCCompany");
 | 
						|
            attrs.Add("basfCCPN");
 | 
						|
            attrs.Add("basfCompanyID");
 | 
						|
            attrs.Add("basfContractStatus");
 | 
						|
            attrs.Add("basfCostCenter");
 | 
						|
            attrs.Add("basfEPSapGroup");
 | 
						|
            attrs.Add("basfEPSapUserID");
 | 
						|
            attrs.Add("basfCCPN");
 | 
						|
            attrs.Add("basfGCDID");
 | 
						|
            attrs.Add("basfIDtype");
 | 
						|
            attrs.Add("basfPersg");
 | 
						|
            attrs.Add("basfPersonID");
 | 
						|
            attrs.Add("basfRegion");
 | 
						|
            attrs.Add("basfRPID");
 | 
						|
            attrs.Add("basfSBNR");
 | 
						|
            attrs.Add("basfSex");
 | 
						|
            attrs.Add("basfSIAMID");
 | 
						|
            attrs.Add("dn");
 | 
						|
            attrs.Add("cn");
 | 
						|
            attrs.Add("uid");
 | 
						|
            attrs.Add("co");
 | 
						|
            attrs.Add("employeeStatus");
 | 
						|
            attrs.Add("facsimileTelephoneNumber");
 | 
						|
            attrs.Add("fullName");
 | 
						|
            attrs.Add("givenName");
 | 
						|
            attrs.Add("GroupMembership");
 | 
						|
            attrs.Add("InternetEmailAddress");
 | 
						|
            attrs.Add("l");
 | 
						|
            attrs.Add("mobile");
 | 
						|
            attrs.Add("o");
 | 
						|
            attrs.Add("ou");
 | 
						|
            attrs.Add("postalCode");
 | 
						|
            attrs.Add("roomNumber");
 | 
						|
            attrs.Add("s");
 | 
						|
            attrs.Add("sa");
 | 
						|
            attrs.Add("surname");
 | 
						|
            attrs.Add("telephoneNumber");
 | 
						|
            attrs.Add("title");
 | 
						|
            attrs.Add("mail");
 | 
						|
            attrs.Add("sn");
 | 
						|
            attrs.Add("employeeNumber");
 | 
						|
            attrs.Add("basfUDMSID");
 | 
						|
            attrs.Add("postalAddress");
 | 
						|
            attrs.Add("c");
 | 
						|
        }
 | 
						|
 | 
						|
        private static LdapUser GetUserInfoFromDirectoryEntry(SearchResultEntry entry)
 | 
						|
        {
 | 
						|
            LdapUser ldapUser = new LdapUser();
 | 
						|
            if (entry.Attributes.Contains("cn"))
 | 
						|
            {
 | 
						|
                ldapUser.UserName = (string)entry.Attributes["cn"].GetValues(typeof(string))[0];
 | 
						|
            }
 | 
						|
            if (entry.Attributes.Contains("mail"))
 | 
						|
            {
 | 
						|
                ldapUser.EmailAddress = (string)entry.Attributes["mail"].GetValues(typeof(string))[0];
 | 
						|
            }
 | 
						|
            if (entry.Attributes.Contains("givenName"))
 | 
						|
            {
 | 
						|
                ldapUser.FirstName = (string)entry.Attributes["givenName"].GetValues(typeof(string))[0];
 | 
						|
            }
 | 
						|
            if (entry.Attributes.Contains("sn"))
 | 
						|
            {
 | 
						|
                ldapUser.LastName = (string)entry.Attributes["sn"].GetValues(typeof(string))[0];
 | 
						|
            }
 | 
						|
            if (entry.Attributes.Contains("fullName"))
 | 
						|
            {
 | 
						|
                ldapUser.FullName = (string)entry.Attributes["fullName"].GetValues(typeof(string))[0];
 | 
						|
            }
 | 
						|
            if (entry.Attributes.Contains("o"))
 | 
						|
            {
 | 
						|
                ldapUser.Company = (string)entry.Attributes["o"].GetValues(typeof(string))[0];
 | 
						|
            }
 | 
						|
            if (entry.Attributes.Contains("ou"))
 | 
						|
            {
 | 
						|
                ldapUser.OrgCode = (string)entry.Attributes["ou"].GetValues(typeof(string))[0];
 | 
						|
            }
 | 
						|
            if (entry.Attributes.Contains("telephoneNumber"))
 | 
						|
            {
 | 
						|
                ldapUser.Phone = (string)entry.Attributes["telephoneNumber"].GetValues(typeof(string))[0];
 | 
						|
            }
 | 
						|
            if (entry.Attributes.Contains("basfGCDID"))
 | 
						|
            {
 | 
						|
                ldapUser.GcdId = (string)entry.Attributes["basfGCDID"].GetValues(typeof(string))[0];
 | 
						|
            }
 | 
						|
            if (entry.Attributes.Contains("basfPersonID"))
 | 
						|
            {
 | 
						|
                ldapUser.PersonId = (string)entry.Attributes["basfPersonID"].GetValues(typeof(string))[0];
 | 
						|
            }
 | 
						|
            if (entry.Attributes.Contains("employeeNumber"))
 | 
						|
            {
 | 
						|
                ldapUser.PersonalNr = (string)entry.Attributes["employeeNumber"].GetValues(typeof(string))[0];
 | 
						|
            }
 | 
						|
            if (entry.Attributes.Contains("basfCCPN"))
 | 
						|
            {
 | 
						|
                ldapUser.Ccpn = (string)entry.Attributes["basfCCPN"].GetValues(typeof(string))[0];
 | 
						|
            }
 | 
						|
            if (entry.Attributes.Contains("basfUDMSID"))
 | 
						|
            {
 | 
						|
                ldapUser.UdmsId = (string)entry.Attributes["basfUDMSID"].GetValues(typeof(string))[0];
 | 
						|
            }
 | 
						|
            if (entry.Attributes.Contains("postalAddress"))
 | 
						|
            {
 | 
						|
                ldapUser.Street = (string)entry.Attributes["postalAddress"].GetValues(typeof(string))[0];
 | 
						|
            }
 | 
						|
            if (entry.Attributes.Contains("l"))
 | 
						|
            {
 | 
						|
                ldapUser.City = (string)entry.Attributes["l"].GetValues(typeof(string))[0];
 | 
						|
            }
 | 
						|
            if (entry.Attributes.Contains("postalCode"))
 | 
						|
            {
 | 
						|
                ldapUser.ZipCode = (string)entry.Attributes["postalCode"].GetValues(typeof(string))[0];
 | 
						|
            }
 | 
						|
            if (entry.Attributes.Contains("c"))
 | 
						|
            {
 | 
						|
                ldapUser.Country = (string)entry.Attributes["c"].GetValues(typeof(string))[0];
 | 
						|
            }
 | 
						|
            if (entry.Attributes.Contains("facsimileTelephoneNumber"))
 | 
						|
            {
 | 
						|
                ldapUser.Fax = (string)entry.Attributes["facsimileTelephoneNumber"].GetValues(typeof(string))[0];
 | 
						|
            }
 | 
						|
            if (entry.Attributes.Contains("mobile"))
 | 
						|
            {
 | 
						|
                ldapUser.MobilePhone = (string)entry.Attributes["mobile"].GetValues(typeof(string))[0];
 | 
						|
            }
 | 
						|
            if (entry.Attributes.Contains("basfcompanyid"))
 | 
						|
            {
 | 
						|
                ldapUser.CompanyId = (string)entry.Attributes["basfcompanyid"].GetValues(typeof(string))[0];
 | 
						|
            }
 | 
						|
            if (entry.Attributes.Contains("basfidtype"))
 | 
						|
            {
 | 
						|
                ldapUser.BasfIdType = (string)entry.Attributes["basfidtype"].GetValues(typeof(string))[0];
 | 
						|
            }
 | 
						|
            return ldapUser;
 | 
						|
        }
 | 
						|
 | 
						|
        private static Collection<string> ReadGroupMembershipsInternal(SearchResultEntry entry)
 | 
						|
        {
 | 
						|
            Collection<string> collection = new Collection<string>();
 | 
						|
            object[] values = entry.Attributes["groupmembership"].GetValues(typeof(string));
 | 
						|
            for (int i = 0; i < values.Length; i++)
 | 
						|
            {
 | 
						|
                string item = (string)values[i];
 | 
						|
                collection.Add(item);
 | 
						|
            }
 | 
						|
            return collection;
 | 
						|
        }
 | 
						|
 | 
						|
        private static LdapUser GetUserInfoFromSearchResult(DirectoryEntry entry)
 | 
						|
        {
 | 
						|
            LdapUser ldapUser = new LdapUser();
 | 
						|
            if (entry.Properties.Contains("cn"))
 | 
						|
            {
 | 
						|
                ldapUser.UserName = entry.Properties["cn"].Value.ToString();
 | 
						|
            }
 | 
						|
            if (entry.Properties.Contains("mail"))
 | 
						|
            {
 | 
						|
                ldapUser.EmailAddress = entry.Properties["mail"].Value.ToString();
 | 
						|
            }
 | 
						|
            if (entry.Properties.Contains("givenName"))
 | 
						|
            {
 | 
						|
                ldapUser.FirstName = entry.Properties["givenName"].Value.ToString();
 | 
						|
            }
 | 
						|
            if (entry.Properties.Contains("sn"))
 | 
						|
            {
 | 
						|
                ldapUser.LastName = entry.Properties["sn"].Value.ToString();
 | 
						|
            }
 | 
						|
            if (entry.Properties.Contains("fullName"))
 | 
						|
            {
 | 
						|
                ldapUser.FullName = entry.Properties["fullName"].Value.ToString();
 | 
						|
            }
 | 
						|
            if (entry.Properties.Contains("o"))
 | 
						|
            {
 | 
						|
                ldapUser.Company = entry.Properties["o"].Value.ToString();
 | 
						|
            }
 | 
						|
            if (entry.Properties.Contains("ou"))
 | 
						|
            {
 | 
						|
                ldapUser.OrgCode = entry.Properties["ou"].Value.ToString();
 | 
						|
            }
 | 
						|
            if (entry.Properties.Contains("telephoneNumber"))
 | 
						|
            {
 | 
						|
                ldapUser.Phone = entry.Properties["telephoneNumber"].Value.ToString();
 | 
						|
            }
 | 
						|
            if (entry.Properties.Contains("basfGCDID"))
 | 
						|
            {
 | 
						|
                ldapUser.GcdId = entry.Properties["basfGCDID"].Value.ToString();
 | 
						|
            }
 | 
						|
            if (entry.Properties.Contains("basfPersonID"))
 | 
						|
            {
 | 
						|
                ldapUser.PersonId = entry.Properties["basfPersonID"].Value.ToString();
 | 
						|
            }
 | 
						|
            if (entry.Properties.Contains("employeeNumber"))
 | 
						|
            {
 | 
						|
                ldapUser.PersonalNr = entry.Properties["employeeNumber"].Value.ToString();
 | 
						|
            }
 | 
						|
            if (entry.Properties.Contains("basfCCPN"))
 | 
						|
            {
 | 
						|
                ldapUser.Ccpn = entry.Properties["basfCCPN"].Value.ToString();
 | 
						|
            }
 | 
						|
            if (entry.Properties.Contains("basfUDMSID"))
 | 
						|
            {
 | 
						|
                ldapUser.UdmsId = entry.Properties["basfUDMSID"].Value.ToString();
 | 
						|
            }
 | 
						|
            if (entry.Properties.Contains("postalAddress"))
 | 
						|
            {
 | 
						|
                ldapUser.Street = entry.Properties["postalAddress"].Value.ToString();
 | 
						|
            }
 | 
						|
            if (entry.Properties.Contains("l"))
 | 
						|
            {
 | 
						|
                ldapUser.City = entry.Properties["l"].Value.ToString();
 | 
						|
            }
 | 
						|
            if (entry.Properties.Contains("postalCode"))
 | 
						|
            {
 | 
						|
                ldapUser.ZipCode = entry.Properties["postalCode"].Value.ToString();
 | 
						|
            }
 | 
						|
            if (entry.Properties.Contains("c"))
 | 
						|
            {
 | 
						|
                ldapUser.Country = entry.Properties["c"].Value.ToString();
 | 
						|
            }
 | 
						|
            if (entry.Properties.Contains("facsimileTelephoneNumber"))
 | 
						|
            {
 | 
						|
                ldapUser.Fax = entry.Properties["facsimileTelephoneNumber"].Value.ToString();
 | 
						|
            }
 | 
						|
            if (entry.Properties.Contains("mobile"))
 | 
						|
            {
 | 
						|
                ldapUser.MobilePhone = entry.Properties["mobile"].Value.ToString();
 | 
						|
            }
 | 
						|
            if (entry.Properties.Contains("basfcompanyid"))
 | 
						|
            {
 | 
						|
                ldapUser.CompanyId = entry.Properties["basfcompanyid"].Value.ToString();
 | 
						|
            }
 | 
						|
            if (entry.Properties.Contains("basfidtype"))
 | 
						|
            {
 | 
						|
                ldapUser.BasfIdType = entry.Properties["basfidtype"].Value.ToString();
 | 
						|
            }
 | 
						|
            return ldapUser;
 | 
						|
        }
 | 
						|
 | 
						|
    }
 | 
						|
}
 |