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); } }
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); } } }