protected override void Do() { try { if (OperationType == LdapOperationType.Save) { SetProgress(10, Resource.LdapSettingsStatusSavingSettings); LDAPSettings.IsDefault = LDAPSettings.Equals(LDAPSettings.GetDefault()); if (!LDAPSettings.Save()) { Logger.Error("Can't save LDAP settings."); Error = Resource.LdapSettingsErrorCantSaveLdapSettings; return; } } if (LDAPSettings.EnableLdapAuthentication) { Logger.Debug("SyncLDAP()"); SyncLDAP(); if (!string.IsNullOrEmpty(Error)) { return; } } else { Logger.Debug("TurnOffLDAP()"); TurnOffLDAP(); ((LdapCurrentUserPhotos)LdapCurrentUserPhotos.Load().GetDefault()).Save(); ((LdapCurrentAcccessSettings)LdapCurrentAcccessSettings.Load().GetDefault()).Save(); //не снимать права при выключении //var rights = new List<LdapSettings.AccessRight>(); //TakeUsersRights(rights); //if (rights.Count > 0) //{ // Warning = Resource.LdapSettingsErrorLostRights; //} } } catch (NovellLdapTlsCertificateRequestedException ex) { Logger.ErrorFormat( "CheckSettings(acceptCertificate={0}, cert thumbprint: {1}): NovellLdapTlsCertificateRequestedException: {2}", LDAPSettings.AcceptCertificate, LDAPSettings.AcceptCertificateHash, ex.ToString()); Error = Resource.LdapSettingsStatusCertificateVerification; //TaskInfo.SetProperty(CERT_REQUEST, ex.CertificateConfirmRequest); } catch (TenantQuotaException e) { Logger.ErrorFormat("TenantQuotaException. {0}", e.ToString()); Error = Resource.LdapSettingsTenantQuotaSettled; } catch (FormatException e) { Logger.ErrorFormat("FormatException error. {0}", e.ToString()); Error = Resource.LdapSettingsErrorCantCreateUsers; } catch (Exception e) { Logger.ErrorFormat("Internal server error. {0}", e.ToString()); Error = Resource.LdapSettingsInternalServerError; } finally { SetProgress(99, Resource.LdapSettingsStatusDisconnecting, ""); Dispose(); } SetProgress(100, OperationType == LdapOperationType.SaveTest || OperationType == LdapOperationType.SyncTest ? JsonConvert.SerializeObject(_ldapChanges) : "", ""); }
private void SyncLdapAvatar() { SetProgress(90, Resource.LdapSettingsStatusUpdatingUserPhotos); if (!LDAPSettings.LdapMapping.ContainsKey(LdapSettings.MappingFields.AvatarAttribute)) { var ph = LdapCurrentUserPhotos.Load(); if (ph.CurrentPhotos == null || !ph.CurrentPhotos.Any()) { return; } foreach (var guid in ph.CurrentPhotos.Keys) { Logger.InfoFormat("SyncLdapAvatar() Removing photo for '{0}'", guid); UserPhotoManager.RemovePhoto(guid); UserPhotoManager.ResetThumbnailSettings(guid); } ph.CurrentPhotos = null; ph.Save(); return; } var photoSettings = LdapCurrentUserPhotos.Load(); if (photoSettings.CurrentPhotos == null) { photoSettings.CurrentPhotos = new Dictionary <Guid, string>(); } var ldapUsers = Importer.AllDomainUsers.Where(x => !x.IsDisabled); var step = 5.0 / ldapUsers.Count(); var currentPercent = 90.0; foreach (var ldapUser in ldapUsers) { var image = ldapUser.GetValue(LDAPSettings.LdapMapping[LdapSettings.MappingFields.AvatarAttribute], true); if (image == null || image.GetType() != typeof(byte[])) { continue; } string hash; using (MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider()) { hash = Convert.ToBase64String(md5.ComputeHash((byte[])image)); } var user = CoreContext.UserManager.GetUserBySid(ldapUser.Sid); Logger.DebugFormat("SyncLdapAvatar() Found photo for '{0}'", ldapUser.Sid); if (photoSettings.CurrentPhotos.ContainsKey(user.ID) && photoSettings.CurrentPhotos[user.ID] == hash) { Logger.Debug("SyncLdapAvatar() Same hash, skipping."); continue; } try { SetProgress((int)(currentPercent += step), string.Format("{0}: {1}", Resource.LdapSettingsStatusSavingUserPhoto, UserFormatter.GetUserName(user, DisplayUserNameFormat.Default))); UserPhotoManager.ResetThumbnailSettings(user.ID); UserPhotoManager.SaveOrUpdatePhoto(user.ID, (byte[])image); if (photoSettings.CurrentPhotos.ContainsKey(user.ID)) { photoSettings.CurrentPhotos[user.ID] = hash; } else { photoSettings.CurrentPhotos.Add(user.ID, hash); } } catch { Logger.DebugFormat("SyncLdapAvatar() Couldn't save photo for '{0}'", user.ID); if (photoSettings.CurrentPhotos.ContainsKey(user.ID)) { photoSettings.CurrentPhotos.Remove(user.ID); } } } photoSettings.Save(); }