Ejemplo n.º 1
0
        protected override void InternalStateReset()
        {
            if (string.IsNullOrEmpty(this.Name) && string.IsNullOrEmpty(this.DisplayName))
            {
                base.WriteError(new RecipientTaskException(Strings.ErrorNewTeamMailboxParameter), ExchangeErrorCategory.Client, null);
            }
            IList <TeamMailboxProvisioningPolicy> teamMailboxPolicies = this.GetTeamMailboxPolicies();

            if (teamMailboxPolicies == null || teamMailboxPolicies.Count == 0)
            {
                base.WriteError(new RecipientTaskException(Strings.ErrorTeamMailboxCanNotLoadPolicy), ExchangeErrorCategory.Client, null);
            }
            this.provisioningPolicy = teamMailboxPolicies[0];
            if (string.IsNullOrEmpty(this.Name))
            {
                string prefix = null;
                if (!string.IsNullOrEmpty(this.provisioningPolicy.AliasPrefix))
                {
                    prefix = this.provisioningPolicy.AliasPrefix;
                }
                else if (this.provisioningPolicy.DefaultAliasPrefixEnabled)
                {
                    prefix = (Datacenter.IsMicrosoftHostedOnly(true) ? "SMO-" : "SM-");
                }
                this.Name = TeamMailboxHelper.GenerateUniqueAliasForSiteMailbox(base.TenantGlobalCatalogSession, base.CurrentOrganizationId, this.DisplayName, prefix, Datacenter.IsMicrosoftHostedOnly(true), new Task.TaskVerboseLoggingDelegate(base.WriteVerbose), new Task.ErrorLoggerDelegate(base.WriteError));
            }
            if (Datacenter.IsMicrosoftHostedOnly(true))
            {
                SiteMailboxAddressesTemplate siteMailboxAddressesTemplate = null;
                try
                {
                    siteMailboxAddressesTemplate = SiteMailboxAddressesTemplate.GetSiteMailboxAddressesTemplate(this.ConfigurationSession, base.ProvisioningCache);
                }
                catch (ErrorSiteMailboxCannotLoadAddressTemplateException exception)
                {
                    base.WriteError(exception, ExchangeErrorCategory.Client, null);
                }
                base.UserPrincipalName = RecipientTaskHelper.GenerateUniqueUserPrincipalName(base.TenantGlobalCatalogSession, this.Name, siteMailboxAddressesTemplate.UserPrincipalNameDomain, new Task.TaskVerboseLoggingDelegate(base.WriteVerbose));
                base.UserSpecifiedParameters["SpecificAddressTemplates"] = siteMailboxAddressesTemplate.AddressTemplates;
            }
            base.InternalStateReset();
        }
        public static SiteMailboxAddressesTemplate GetSiteMailboxAddressesTemplate(IConfigurationSession cfgSession, ProvisioningCache provisioningCache)
        {
            if (cfgSession == null)
            {
                throw new ArgumentNullException("cfgSession");
            }
            if (provisioningCache == null)
            {
                throw new ArgumentNullException("provisioningCache");
            }
            OrganizationId orgId = cfgSession.GetOrgContainer().OrganizationId;

            return(provisioningCache.TryAddAndGetOrganizationData <SiteMailboxAddressesTemplate>(CannedProvisioningCacheKeys.OrganizationSiteMailboxAddressesTemplate, orgId, delegate()
            {
                ADObjectId rootId = orgId.ConfigurationUnit ?? provisioningCache.TryAddAndGetGlobalData <ADObjectId>(CannedProvisioningCacheKeys.FirstOrgContainerId, () => cfgSession.GetOrgContainerId());
                MultiValuedProperty <SmtpDomain> multiValuedProperty = null;
                ADPagedReader <OnPremisesOrganization> adpagedReader = cfgSession.FindPaged <OnPremisesOrganization>(rootId, QueryScope.SubTree, null, null, 0);
                using (IEnumerator <OnPremisesOrganization> enumerator = adpagedReader.GetEnumerator())
                {
                    if (enumerator.MoveNext())
                    {
                        OnPremisesOrganization onPremisesOrganization = enumerator.Current;
                        multiValuedProperty = onPremisesOrganization.HybridDomains;
                    }
                }
                QueryFilter filter = new NotFilter(new BitMaskAndFilter(AcceptedDomainSchema.AcceptedDomainFlags, 1UL));
                ADPagedReader <AcceptedDomain> adpagedReader2 = cfgSession.FindPaged <AcceptedDomain>(rootId, QueryScope.SubTree, filter, new SortBy(ADObjectSchema.Name, SortOrder.Ascending), 0);
                bool flag = false;
                string text = string.Empty;
                string text2 = string.Empty;
                string text3 = string.Empty;
                foreach (AcceptedDomain acceptedDomain in adpagedReader2)
                {
                    if (acceptedDomain.AuthenticationType != AuthenticationType.Federated && (string.IsNullOrEmpty(text) || acceptedDomain.Default))
                    {
                        text = acceptedDomain.DomainName.Domain;
                    }
                    if ((multiValuedProperty == null || multiValuedProperty.Count == 0 || multiValuedProperty.Contains(acceptedDomain.DomainName.SmtpDomain)) && (string.IsNullOrEmpty(text2) || acceptedDomain.Default))
                    {
                        text2 = acceptedDomain.DomainName.Domain;
                    }
                    if (acceptedDomain.IsCoexistenceDomain && string.IsNullOrEmpty(text3))
                    {
                        text3 = acceptedDomain.DomainName.Domain;
                    }
                    flag = (flag || acceptedDomain.Default);
                    if (flag && !string.IsNullOrEmpty(text) && !string.IsNullOrEmpty(text2) && !string.IsNullOrEmpty(text3))
                    {
                        break;
                    }
                }
                SiteMailboxAddressesTemplate siteMailboxAddressesTemplate = new SiteMailboxAddressesTemplate();
                siteMailboxAddressesTemplate.UserPrincipalNameDomain = text;
                if (!string.IsNullOrEmpty(text2))
                {
                    siteMailboxAddressesTemplate.AddressTemplates.Add(new SmtpProxyAddressTemplate(string.Format("@{0}", text2), true));
                    if (!string.IsNullOrEmpty(text3) && !string.Equals(text2, text3, StringComparison.OrdinalIgnoreCase))
                    {
                        siteMailboxAddressesTemplate.AddressTemplates.Add(new SmtpProxyAddressTemplate(string.Format("@{0}", text3), false));
                    }
                }
                if (!siteMailboxAddressesTemplate.IsValid)
                {
                    throw new ErrorSiteMailboxCannotLoadAddressTemplateException();
                }
                return siteMailboxAddressesTemplate;
            }));
        }