コード例 #1
0
        private static string GetLdapAccessableEmail(string email)
        {
            try
            {
                if (string.IsNullOrEmpty(email))
                {
                    return(null);
                }

                var login = LdapLogin.ParseLogin(email);

                if (string.IsNullOrEmpty(login.Domain))
                {
                    return(email);
                }

                var dotIndex = login.Domain.LastIndexOf(".", StringComparison.Ordinal);

                var accessableEmail = dotIndex > -1 ? string.Format("{0}@{1}", login.Username, login.Domain.Remove(dotIndex)) : email;

                return(accessableEmail);
            }
            catch (Exception)
            {
                return(null);
            }
        }
コード例 #2
0
        public static bool IsLoginAccepted(LdapLogin ldapLogin, UserInfo ldapUser, string ldapDomain)
        {
            if (ldapLogin == null ||
                string.IsNullOrEmpty(ldapLogin.ToString()) ||
                string.IsNullOrEmpty(ldapDomain) ||
                ldapUser == null ||
                ldapUser.Equals(Constants.LostUser) ||
                string.IsNullOrEmpty(ldapUser.Email) ||
                string.IsNullOrEmpty(ldapUser.UserName))
            {
                return(false);
            }

            var hasDomain = !string.IsNullOrEmpty(ldapLogin.Domain);

            if (!hasDomain)
            {
                return(ldapLogin.Username.Equals(ldapUser.UserName, StringComparison.InvariantCultureIgnoreCase));
            }

            var fullLogin = ldapLogin.ToString();

            if (fullLogin.Equals(ldapUser.Email, StringComparison.InvariantCultureIgnoreCase))
            {
                return(true);
            }

            if (!ldapDomain.StartsWith(ldapLogin.Domain))
            {
                return(false);
            }

            var alterEmail = ldapUser.UserName.Contains("@")
                ? ldapUser.UserName
                : string.Format("{0}@{1}", ldapUser.UserName, ldapDomain);

            return(IsLoginAndEmailSuitable(fullLogin, alterEmail));
        }
コード例 #3
0
        public List <Tuple <UserInfo, LdapObject> > FindLdapUsers(string login)
        {
            var listResults = new List <Tuple <UserInfo, LdapObject> >();

            var ldapLogin = LdapLogin.ParseLogin(login);

            if (ldapLogin == null)
            {
                return(listResults);
            }

            if (!LdapHelper.IsConnected)
            {
                LdapHelper.Connect();
            }

            var exps = new List <Expression> {
                Expression.Equal(Settings.LoginAttribute, ldapLogin.Username)
            };

            if (!ldapLogin.Username.Equals(login) && ldapLogin.ToString().Equals(login))
            {
                exps.Add(Expression.Equal(Settings.LoginAttribute, login));
            }

            string email = null;

            if (!string.IsNullOrEmpty(Settings.MailAttribute) && !string.IsNullOrEmpty(ldapLogin.Domain) && login.Contains("@"))
            {
                email = ldapLogin.ToString();
                exps.Add(Expression.Equal(Settings.MailAttribute, email));
            }

            var searchTerm = exps.Count > 1 ? Criteria.Any(exps.ToArray()).ToString() : exps.First().ToString();

            var users = LdapHelper.GetUsers(searchTerm, !string.IsNullOrEmpty(email) ? -1 : 1)
                        .Where(user => user != null)
                        .ToLookup(lu =>
            {
                var ui = Constants.LostUser;

                try
                {
                    if (string.IsNullOrEmpty(_ldapDomain))
                    {
                        _ldapDomain = LdapUtils.DistinguishedNameToDomain(lu.DistinguishedName);
                    }

                    ui = lu.ToUserInfo(this, _log);
                }
                catch (Exception ex)
                {
                    _log.ErrorFormat("FindLdapUser->ToUserInfo() failed. Error: {0}", ex.ToString());
                }

                return(Tuple.Create(ui, lu));
            });

            if (!users.Any())
            {
                return(listResults);
            }

            foreach (var user in users)
            {
                var ui = user.Key.Item1;

                if (ui.Equals(Constants.LostUser))
                {
                    continue;
                }

                var ul = user.Key.Item2;

                var ldapLoginAttribute = ul.GetValue(Settings.LoginAttribute) as string;

                if (string.IsNullOrEmpty(ldapLoginAttribute))
                {
                    _log.WarnFormat("LDAP: DN: '{0}' Login Attribute '{1}' is empty", ul.DistinguishedName, Settings.LoginAttribute);
                    continue;
                }

                if (ldapLoginAttribute.Equals(login))
                {
                    listResults.Add(user.Key);
                    continue;
                }

                if (!string.IsNullOrEmpty(email))
                {
                    if (ui.Email.Equals(email, StringComparison.InvariantCultureIgnoreCase))
                    {
                        listResults.Add(user.Key);
                        continue;
                    }
                }

                if (LdapUtils.IsLoginAccepted(ldapLogin, ui, LDAPDomain))
                {
                    listResults.Add(user.Key);
                }
            }

            return(listResults);
        }
コード例 #4
0
        public void CheckLdapLoginByBaseUsernameTest()
        {
            var ldapLogin = LdapLogin.ParseLogin(BASE_USERNAME);

            Assert.AreEqual(true, LdapUtils.IsLoginAccepted(ldapLogin, BaseUserInfo, BASE_LDAP_DOMAIN));
        }
コード例 #5
0
        public void CheckIncorrectLdapLoginByEmailWithBaseDomainTest()
        {
            var ldapLogin = new LdapLogin("Ivan.Ivanov", BASE_LDAP_DOMAIN);

            Assert.AreEqual(false, LdapUtils.IsLoginAccepted(ldapLogin, BaseUserInfo, BASE_LDAP_DOMAIN));
        }
コード例 #6
0
        public void CheckIncorrectLdapLoginByEmailTest()
        {
            var ldapLogin = LdapLogin.ParseLogin("*****@*****.**");

            Assert.AreEqual(false, LdapUtils.IsLoginAccepted(ldapLogin, BaseUserInfo, BASE_LDAP_DOMAIN));
        }
コード例 #7
0
        public void CheckLdapLoginByBaseForm4Test()
        {
            var ldapLogin = LdapLogin.ParseLogin(BASE_LDAP_LOGIN_FORM4);

            Assert.AreEqual(true, LdapUtils.IsLoginAccepted(ldapLogin, BaseUserInfo, BASE_LDAP_DOMAIN));
        }
コード例 #8
0
        public void CheckLdapLoginByBaseUsernameAndBaseDominTest()
        {
            var ldapLogin = new LdapLogin(BASE_USERNAME, BASE_LDAP_DOMAIN);

            Assert.AreEqual(true, LdapUtils.IsLoginAccepted(ldapLogin, BaseUserInfo, BASE_LDAP_DOMAIN));
        }