protected override void HandleNonAuthoritativeDomains(EmailAddressPolicy policy, HashSet <SmtpDomain> domains) { ProxyAddressTemplateCollection proxyAddressTemplateCollection = new ProxyAddressTemplateCollection(); foreach (ProxyAddressTemplate proxyAddressTemplate in policy.NonAuthoritativeDomains) { SmtpDomain smtpDomain; if (!UpdateEmailAddressPolicy.DomainValidator.TryGetDomain(proxyAddressTemplate, out smtpDomain)) { proxyAddressTemplateCollection.Add(proxyAddressTemplate); } } bool flag = false; foreach (SmtpDomain smtpDomain2 in domains) { SmtpProxyAddressTemplate item = new SmtpProxyAddressTemplate("@" + smtpDomain2.Domain, false); proxyAddressTemplateCollection.Add(item); if (!flag && !policy.NonAuthoritativeDomains.Contains(item)) { flag = true; } } if (!flag) { flag = (proxyAddressTemplateCollection.Count != policy.NonAuthoritativeDomains.Count); } if (flag) { UpdateEmailAddressPolicy.CheckEapVersion(policy); policy.NonAuthoritativeDomains = proxyAddressTemplateCollection; } }
protected override void HandleNonAuthoritativeDomains(EmailAddressPolicy policy, HashSet <SmtpDomain> domains) { ProxyAddressTemplateCollection proxyAddressTemplateCollection = new ProxyAddressTemplateCollection(); foreach (ProxyAddressTemplate proxyAddressTemplate in policy.NonAuthoritativeDomains) { SmtpDomain template; if (!UpdateEmailAddressPolicy.DomainValidator.TryGetDomain(proxyAddressTemplate, out template) || (!SetAcceptedDomain.DomainEditValidator.Conflict(this.newDomain, template) && !SetAcceptedDomain.DomainEditValidator.Conflict(this.oldDomain, template))) { proxyAddressTemplateCollection.Add(proxyAddressTemplate); } } foreach (SmtpDomain smtpDomain in domains) { if (SetAcceptedDomain.DomainEditValidator.Conflict(this.newDomain, smtpDomain) || SetAcceptedDomain.DomainEditValidator.Conflict(this.oldDomain, smtpDomain)) { SmtpProxyAddressTemplate item = new SmtpProxyAddressTemplate("@" + smtpDomain.Domain, false); proxyAddressTemplateCollection.Add(item); } } UpdateEmailAddressPolicy.CheckEapVersion(policy); policy.NonAuthoritativeDomains = proxyAddressTemplateCollection; this.session.Save(policy); }
internal static int PreparePriorityOfEapObjects(OrganizationId organizationId, EmailAddressPolicy policy, IConfigDataProvider session, TaskExtendedErrorLoggingDelegate writeError, out EmailAddressPolicy[] policiesAdjusted, out EmailAddressPolicyPriority[] originalPriorities) { policiesAdjusted = null; originalPriorities = null; try { QueryFilter queryFilter = new AndFilter(new QueryFilter[] { new ComparisonFilter(ComparisonOperator.LessThan, EmailAddressPolicySchema.Priority, EmailAddressPolicyPriority.Lowest), new ComparisonFilter(ComparisonOperator.GreaterThanOrEqual, EmailAddressPolicySchema.Priority, EmailAddressPolicyPriority.Highest) }); if (policy.ObjectState != ObjectState.New) { queryFilter = new AndFilter(new QueryFilter[] { queryFilter, new ComparisonFilter(ComparisonOperator.NotEqual, ADObjectSchema.Id, new ADObjectId(null, policy.Guid)) }); } IConfigurationSession configurationSession = (IConfigurationSession)session; ADPagedReader <EmailAddressPolicy> adpagedReader = configurationSession.FindPaged <EmailAddressPolicy>(EmailAddressPolicyIdParameter.GetRootContainerId(configurationSession, organizationId), QueryScope.OneLevel, queryFilter, new SortBy(EmailAddressPolicySchema.Priority, SortOrder.Ascending), 0); EmailAddressPolicy[] array = adpagedReader.ReadAllPages(); Array.Sort <EmailAddressPolicy>(array, EmailAddressPolicy.PriorityComparer); if (policy.Priority != EmailAddressPolicyPriority.Lowest) { if (policy.ObjectState == ObjectState.New) { if ((array.Length == 0 && policy.Priority != EmailAddressPolicyPriority.Highest) || (array.Length > 0 && policy.Priority > 1 + array[array.Length - 1].Priority)) { writeError(new ArgumentException(Strings.ErrorInvalidEapNewPriority(policy.Priority.ToString()), "Priority"), ErrorCategory.InvalidArgument, policy.Id, true); } } else if ((array.Length == 0 && policy.Priority != EmailAddressPolicyPriority.Highest) || (array.Length > 0 && policy.Priority > array[array.Length - 1].Priority)) { writeError(new ArgumentException(Strings.ErrorInvalidEapSetPriority(policy.Priority.ToString()), "Priority"), ErrorCategory.InvalidArgument, policy.Id, true); } } List <EmailAddressPolicy> list = new List <EmailAddressPolicy>(); List <EmailAddressPolicyPriority> list2 = new List <EmailAddressPolicyPriority>(); bool flag = false; for (int i = 0; i < array.Length; i++) { int num = i + (flag ? 1 : 0) + EmailAddressPolicyPriority.Highest; if (!flag && num == policy.Priority) { flag = true; num++; } EmailAddressPolicyPriority priority = array[i].Priority; UpdateEmailAddressPolicy.CheckEapVersion(array[i]); array[i].Priority = (EmailAddressPolicyPriority)num; if (array[i].IsChanged(EmailAddressPolicySchema.Priority)) { list.Add(array[i]); list2.Add(priority); } } if (!flag) { UpdateEmailAddressPolicy.CheckEapVersion(policy); policy.Priority = (EmailAddressPolicyPriority)(array.Length + EmailAddressPolicyPriority.Highest); } foreach (EmailAddressPolicy emailAddressPolicy in list) { ValidationError[] array2 = emailAddressPolicy.Validate(); int num2 = 0; while (array2.Length > num2) { writeError(new InvalidOperationException(Strings.ErrorInvalidOperationOnEapObject(emailAddressPolicy.Id.ToString(), array2[num2].Description)), ErrorCategory.InvalidData, policy.Id, array2.Length - 1 == num2); num2++; } } policiesAdjusted = list.ToArray(); originalPriorities = list2.ToArray(); return(list.Count); } catch (DataSourceTransientException exception) { writeError(exception, ErrorCategory.ReadError, policy.Id, true); } return(-1); }