示例#1
0
        public bool TryGetAndSyncLdapUserInfo(string login, string password, out UserInfo userInfo)
        {
            userInfo = Constants.LostUser;

            try
            {
                var settings = LdapSettings.Load();

                if (!settings.EnableLdapAuthentication)
                {
                    return(false);
                }

                _log.DebugFormat("TryGetAndSyncLdapUserInfo(login: \"{0}\")", login);

                using (var importer = new NovellLdapUserImporter(settings, Resource))
                {
                    var ldapUserInfo = importer.Login(login, password);

                    if (ldapUserInfo == null || ldapUserInfo.Item1.Equals(Constants.LostUser))
                    {
                        _log.DebugFormat("NovellLdapUserImporter.Login('{0}') failed.", login);
                        return(false);
                    }

                    _log.DebugFormat("TryCheckAndSyncToLdapUser(Username: '******', Email: {1}, DN: {2})",
                                     ldapUserInfo.Item1.UserName, ldapUserInfo.Item1.Email, ldapUserInfo.Item2.DistinguishedName);

                    if (!TryCheckAndSyncToLdapUser(ldapUserInfo, importer, out userInfo))
                    {
                        _log.Debug("TryCheckAndSyncToLdapUser() failed");
                        return(false);
                    }
                }

                return(true);
            }
            catch (Exception ex)
            {
                _log.ErrorFormat("TryGetLdapUserInfo(login: '******') failed. Error: {1}", login, ex);
                userInfo = Constants.LostUser;
                return(false);
            }
        }
        public bool TryGetAndSyncLdapUserInfo(string login, string password, out UserInfo userInfo)
        {
            userInfo = Constants.LostUser;

            NovellLdapUserImporter importer = null;

            try
            {
                var settings = LdapSettings.Load();

                if (!settings.EnableLdapAuthentication)
                {
                    return(false);
                }

                _log.DebugFormat("TryGetAndSyncLdapUserInfo(login: \"{0}\")", login);

                importer = new NovellLdapUserImporter(settings, Resource);

                var ldapUserInfo = importer.Login(login, password);

                if (ldapUserInfo == null || ldapUserInfo.Item1.Equals(Constants.LostUser))
                {
                    _log.DebugFormat("NovellLdapUserImporter.Login('{0}') failed.", login);
                    return(false);
                }

                var portalUser = CoreContext.UserManager.GetUserBySid(ldapUserInfo.Item1.Sid);

                if (portalUser.Status == EmployeeStatus.Terminated || portalUser.Equals(Constants.LostUser))
                {
                    if (!ldapUserInfo.Item2.IsDisabled)
                    {
                        _log.DebugFormat("TryCheckAndSyncToLdapUser(Username: '******', Email: {1}, DN: {2})",
                                         ldapUserInfo.Item1.UserName, ldapUserInfo.Item1.Email, ldapUserInfo.Item2.DistinguishedName);

                        if (!TryCheckAndSyncToLdapUser(ldapUserInfo, importer, out userInfo))
                        {
                            importer.Dispose();
                            _log.Debug("TryCheckAndSyncToLdapUser() failed");
                            return(false);
                        }
                        importer.Dispose();
                    }
                    else
                    {
                        importer.Dispose();
                        return(false);
                    }
                }
                else
                {
                    _log.DebugFormat("TryCheckAndSyncToLdapUser(Username: '******', Email: {1}, DN: {2})",
                                     ldapUserInfo.Item1.UserName, ldapUserInfo.Item1.Email, ldapUserInfo.Item2.DistinguishedName);

                    var tenant = CoreContext.TenantManager.GetCurrentTenant();

                    new System.Threading.Tasks.Task(() =>
                    {
                        try
                        {
                            CoreContext.TenantManager.SetCurrentTenant(tenant);
                            SecurityContext.CurrentAccount = Core.Configuration.Constants.CoreSystem;

                            var uInfo = SyncLDAPUser(ldapUserInfo.Item1);

                            var newLdapUserInfo = new Tuple <UserInfo, LdapObject>(uInfo, ldapUserInfo.Item2);

                            if (importer.Settings.GroupMembership)
                            {
                                if (!importer.TrySyncUserGroupMembership(newLdapUserInfo))
                                {
                                    _log.DebugFormat("TryGetAndSyncLdapUserInfo(login: \"{0}\") disabling user {1} due to not being included in any ldap group", login, uInfo);
                                    uInfo.Status = EmployeeStatus.Terminated;
                                    uInfo.Sid    = null;
                                    CoreContext.UserManager.SaveUserInfo(uInfo, syncCardDav: true);
                                    CookiesManager.ResetUserCookie(uInfo.ID);
                                }
                            }
                        }
                        finally
                        {
                            importer.Dispose();
                        }
                    }).Start();

                    if (ldapUserInfo.Item2.IsDisabled)
                    {
                        _log.DebugFormat("TryGetAndSyncLdapUserInfo(login: \"{0}\") failed, user is disabled in ldap", login);
                        return(false);
                    }
                    else
                    {
                        userInfo = portalUser;
                    }
                }

                return(true);
            }
            catch (Exception ex)
            {
                if (importer != null)
                {
                    importer.Dispose();
                }

                _log.ErrorFormat("TryGetLdapUserInfo(login: '******') failed. Error: {1}", login, ex);
                userInfo = Constants.LostUser;
                return(false);
            }
        }
示例#3
0
        public void RunJob(DistributedTask _, CancellationToken cancellationToken)
        {
            try
            {
                CancellationToken = cancellationToken;

                CoreContext.TenantManager.SetCurrentTenant(CurrentTenant);

                SecurityContext.AuthenticateMe(Core.Configuration.Constants.CoreSystem);

                Thread.CurrentThread.CurrentCulture   = CultureInfo.GetCultureInfo(_culture);
                Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(_culture);

                Logger = LogManager.GetLogger("ASC");

                if (LDAPSettings == null)
                {
                    Error = Resource.LdapSettingsErrorCantGetLdapSettings;
                    Logger.Error("Can't save default LDAP settings.");
                    return;
                }

                switch (OperationType)
                {
                case LdapOperationType.Save:
                case LdapOperationType.SaveTest:

                    Logger.InfoFormat("Start '{0}' operation",
                                      Enum.GetName(typeof(LdapOperationType), OperationType));

                    SetProgress(1, Resource.LdapSettingsStatusCheckingLdapSettings);

                    Logger.Debug("PrepareSettings()");

                    PrepareSettings(LDAPSettings);

                    if (!string.IsNullOrEmpty(Error))
                    {
                        Logger.DebugFormat("PrepareSettings() Error: {0}", Error);
                        return;
                    }

                    Importer = new NovellLdapUserImporter(LDAPSettings, Resource);

                    if (LDAPSettings.EnableLdapAuthentication)
                    {
                        var ldapSettingsChecker = new NovellLdapSettingsChecker(Importer);

                        SetProgress(5, Resource.LdapSettingsStatusLoadingBaseInfo);

                        var result = ldapSettingsChecker.CheckSettings();

                        if (result != LdapSettingsStatus.Ok)
                        {
                            if (result == LdapSettingsStatus.CertificateRequest)
                            {
                                TaskInfo.SetProperty(CERT_REQUEST,
                                                     ldapSettingsChecker.CertificateConfirmRequest);
                            }

                            Error = GetError(result);

                            Logger.DebugFormat("ldapSettingsChecker.CheckSettings() Error: {0}", Error);

                            return;
                        }
                    }

                    break;

                case LdapOperationType.Sync:
                case LdapOperationType.SyncTest:
                    Logger.InfoFormat("Start '{0}' operation",
                                      Enum.GetName(typeof(LdapOperationType), OperationType));

                    Importer = new NovellLdapUserImporter(LDAPSettings, Resource);
                    break;

                default:
                    throw new ArgumentOutOfRangeException();
                }

                Do();
            }
            catch (AuthorizingException authError)
            {
                Error = Resource.ErrorAccessDenied;
                Logger.Error(Error, new SecurityException(Error, authError));
            }
            catch (AggregateException ae)
            {
                ae.Flatten().Handle(e => e is TaskCanceledException || e is OperationCanceledException);
            }
            catch (TenantQuotaException e)
            {
                Error = Resource.LdapSettingsTenantQuotaSettled;
                Logger.ErrorFormat("TenantQuotaException. {0}", e);
            }
            catch (FormatException e)
            {
                Error = Resource.LdapSettingsErrorCantCreateUsers;
                Logger.ErrorFormat("FormatException error. {0}", e);
            }
            catch (Exception e)
            {
                Error = Resource.LdapSettingsInternalServerError;
                Logger.ErrorFormat("Internal server error. {0}", e);
            }
            finally
            {
                try
                {
                    TaskInfo.SetProperty(FINISHED, true);
                    PublishTaskInfo();
                    Dispose();
                    SecurityContext.Logout();
                }
                catch (Exception ex)
                {
                    Logger.ErrorFormat("LdapOperation finalization problem. {0}", ex);
                }
            }
        }