private void UpgradeFopeConnectors(ITaskContext taskContext)
        {
            MultiValuedProperty <SmtpDomain> multiValuedProperty = new MultiValuedProperty <SmtpDomain>();

            foreach (SmtpDomain item in base.TaskContext.HybridConfigurationObject.Domains)
            {
                multiValuedProperty.Add(item);
            }
            IOrganizationConfig      organizationConfig        = base.OnPremisesSession.GetOrganizationConfig();
            List <string>            domains                   = new List <string>();
            OrganizationRelationship organizationRelationship  = TaskCommon.GetOrganizationRelationship(base.OnPremisesSession, Configuration.OnPremGetOrgRel, domains);
            OrganizationRelationship organizationRelationship2 = TaskCommon.GetOrganizationRelationship(base.TenantSession, Configuration.TenantGetOrgRel, domains);

            if (organizationRelationship2 == null || organizationRelationship == null)
            {
                throw new LocalizedException(HybridStrings.InvalidOrganizationRelationship);
            }
            string            onPremOrgRelationshipName = TaskCommon.GetOnPremOrgRelationshipName(organizationConfig);
            string            tenantOrgRelationshipName = TaskCommon.GetTenantOrgRelationshipName(organizationConfig);
            SessionParameters sessionParameters         = new SessionParameters();
            SessionParameters sessionParameters2        = new SessionParameters();

            sessionParameters.Set("Name", onPremOrgRelationshipName);
            sessionParameters2.Set("Name", tenantOrgRelationshipName);
            base.OnPremisesSession.SetOrganizationRelationship(organizationRelationship.Identity, sessionParameters);
            base.TenantSession.SetOrganizationRelationship(organizationRelationship2.Identity, sessionParameters2);
            organizationRelationship2 = TaskCommon.GetOrganizationRelationship(base.TenantSession, tenantOrgRelationshipName, domains);
            if (organizationRelationship2 == null)
            {
                throw new LocalizedException(HybridStrings.InvalidOrganizationRelationship);
            }
            IInboundConnector inboundConnector = base.TenantSession.GetInboundConnectors().FirstOrDefault((IInboundConnector x) => x.ConnectorSource == TenantConnectorSource.HybridWizard);

            if (inboundConnector == null)
            {
                throw new LocalizedException(HybridStrings.ErrorNoInboundConnector);
            }
            base.TenantSession.RenameInboundConnector(inboundConnector, Configuration.InboundConnectorName(organizationConfig.Guid.ToString()));
            IOutboundConnector outboundConnector = base.TenantSession.GetOutboundConnectors().FirstOrDefault((IOutboundConnector x) => x.ConnectorSource == TenantConnectorSource.HybridWizard);

            if (outboundConnector == null)
            {
                throw new LocalizedException(HybridStrings.ErrorNoOutboundConnector);
            }
            base.TenantSession.RenameOutboundConnector(outboundConnector, Configuration.OutboundConnectorName(organizationConfig.Guid.ToString()));
            base.TenantSession.NewOnPremisesOrganization(organizationConfig, multiValuedProperty, inboundConnector, outboundConnector, organizationRelationship2);
        }
        private bool TaskConfigure(ITaskContext taskContext)
        {
            IOrganizationConfig organizationConfig = taskContext.TenantSession.GetOrganizationConfig();

            if (organizationConfig.IsDehydrated)
            {
                try
                {
                    taskContext.TenantSession.EnableOrganizationCustomization();
                }
                catch
                {
                }
            }
            if (this.RequiresFederationTrust())
            {
                if (this.updateOnPremisesFedOrgId)
                {
                    IFederatedOrganizationIdentifier federatedOrganizationIdentifier = base.OnPremisesSession.GetFederatedOrganizationIdentifier();
                    string text = (federatedOrganizationIdentifier != null && federatedOrganizationIdentifier.DelegationTrustLink != null) ? federatedOrganizationIdentifier.DelegationTrustLink.ToString() : Configuration.FederatedTrustIdentity;
                    taskContext.OnPremisesSession.SetFederationTrustRefreshMetadata(text);
                    SmtpDomain autoDiscoverHybridDomain = this.AutoDiscoverHybridDomain;
                    string     defaultDomain            = (autoDiscoverHybridDomain != null && autoDiscoverHybridDomain.Domain != null) ? autoDiscoverHybridDomain.Domain : null;
                    taskContext.OnPremisesSession.SetFederatedOrganizationIdentifier(this.accountNamespace, text, defaultDomain);
                }
                List <Uri> acceptedTokenIssuerUris = taskContext.Parameters.Get <List <Uri> >("_onPremAcceptedTokenIssuerUris");
                if (!OrganizationRelationshipTask.VerifyAcceptedTokenIssuerUri(base.OnPremisesSession, acceptedTokenIssuerUris))
                {
                    throw new LocalizedException(HybridStrings.ErrorOnPremUsingConsumerLiveID);
                }
                acceptedTokenIssuerUris = taskContext.Parameters.Get <List <Uri> >("_tenantAcceptedTokenIssuerUris");
                if (!OrganizationRelationshipTask.VerifyAcceptedTokenIssuerUri(base.TenantSession, acceptedTokenIssuerUris))
                {
                    throw new LocalizedException(HybridStrings.ErrorTenantUsingConsumerLiveID);
                }
                if (this.updateTenantFedOrgId)
                {
                    base.TenantSession.SetFederatedOrganizationIdentifier(this.TenantCoexistenceDomain);
                }
                foreach (string domainName in this.addOnPremisesFedDomains)
                {
                    taskContext.OnPremisesSession.AddFederatedDomain(domainName);
                }
            }
            OrganizationRelationship value = OrganizationRelationshipTask.ProvisionOrganizationRelationship(base.OnPremisesSession, taskContext.Parameters.Get <OrganizationRelationship>("_onPremOrgRel"), this.OnpremisesFederationInfo, new SmtpDomain[]
            {
                new SmtpDomain(this.TenantCoexistenceDomain)
            }, TaskCommon.GetOnPremOrgRelationshipName(this.OnPremOrgConfig));

            taskContext.Parameters.Set <OrganizationRelationship>("_onPremOrgRel", value);
            value = OrganizationRelationshipTask.ProvisionOrganizationRelationship(base.TenantSession, taskContext.Parameters.Get <OrganizationRelationship>("_tenantOrgRel"), this.TenantFederationInfo, this.HybridDomains, TaskCommon.GetTenantOrgRelationshipName(this.OnPremOrgConfig));
            taskContext.Parameters.Set <OrganizationRelationship>("_tenantOrgRel", value);
            return(true);
        }
Ejemplo n.º 3
0
        public override bool Configure(ITaskContext taskContext)
        {
            if (!base.Configure(taskContext))
            {
                return(false);
            }
            HybridConfiguration hybridConfigurationObject = taskContext.HybridConfigurationObject;
            SessionParameters   sessionParameters         = new SessionParameters();
            SessionParameters   sessionParameters2        = new SessionParameters();

            if (hybridConfigurationObject.MoveMailboxEnabled != this.onPremOrgRel.MailboxMoveEnabled)
            {
                sessionParameters.Set("MailboxMoveEnabled", hybridConfigurationObject.MoveMailboxEnabled);
            }
            if (hybridConfigurationObject.FreeBusySharingEnabled != this.onPremOrgRel.FreeBusyAccessEnabled || hybridConfigurationObject.FreeBusySharingEnabled != this.tenantOrgRel.FreeBusyAccessEnabled)
            {
                sessionParameters.Set("FreeBusyAccessEnabled", hybridConfigurationObject.FreeBusySharingEnabled);
                sessionParameters2.Set("FreeBusyAccessEnabled", hybridConfigurationObject.FreeBusySharingEnabled);
            }
            if (hybridConfigurationObject.FreeBusySharingEnabled && (this.onPremOrgRel.FreeBusyAccessLevel != FreeBusyAccessLevel.LimitedDetails || this.tenantOrgRel.FreeBusyAccessLevel != FreeBusyAccessLevel.LimitedDetails))
            {
                sessionParameters.Set("FreeBusyAccessLevel", FreeBusyAccessLevel.LimitedDetails);
                sessionParameters2.Set("FreeBusyAccessLevel", FreeBusyAccessLevel.LimitedDetails);
            }
            if (hybridConfigurationObject.OnlineArchiveEnabled != this.onPremOrgRel.ArchiveAccessEnabled)
            {
                sessionParameters.Set("ArchiveAccessEnabled", hybridConfigurationObject.OnlineArchiveEnabled);
            }
            if (hybridConfigurationObject.MailtipsEnabled != this.onPremOrgRel.MailTipsAccessEnabled || hybridConfigurationObject.MailtipsEnabled != this.tenantOrgRel.MailTipsAccessEnabled)
            {
                sessionParameters.Set("MailTipsAccessEnabled", hybridConfigurationObject.MailtipsEnabled);
                sessionParameters2.Set("MailTipsAccessEnabled", hybridConfigurationObject.MailtipsEnabled);
            }
            if (hybridConfigurationObject.MailtipsEnabled && (this.onPremOrgRel.MailTipsAccessLevel != MailTipsAccessLevel.All || this.tenantOrgRel.MailTipsAccessLevel != MailTipsAccessLevel.All))
            {
                sessionParameters.Set("MailTipsAccessLevel", MailTipsAccessLevel.All);
                sessionParameters2.Set("MailTipsAccessLevel", MailTipsAccessLevel.All);
            }
            if (hybridConfigurationObject.MessageTrackingEnabled != this.onPremOrgRel.DeliveryReportEnabled || hybridConfigurationObject.MessageTrackingEnabled != this.tenantOrgRel.DeliveryReportEnabled)
            {
                sessionParameters.Set("DeliveryReportEnabled", hybridConfigurationObject.MessageTrackingEnabled);
                sessionParameters2.Set("DeliveryReportEnabled", hybridConfigurationObject.MessageTrackingEnabled);
            }
            if (hybridConfigurationObject.PhotosEnabled != this.onPremOrgRel.PhotosEnabled || hybridConfigurationObject.PhotosEnabled != this.tenantOrgRel.PhotosEnabled)
            {
                sessionParameters.Set("PhotosEnabled", hybridConfigurationObject.PhotosEnabled);
                sessionParameters2.Set("PhotosEnabled", hybridConfigurationObject.PhotosEnabled);
            }
            string text = (this.onPremOrgRel.TargetOwaURL != null) ? this.onPremOrgRel.TargetOwaURL.ToString() : string.Empty;

            if (hybridConfigurationObject.OwaRedirectionEnabled || !string.IsNullOrEmpty(text))
            {
                if (hybridConfigurationObject.OwaRedirectionEnabled)
                {
                    IEnumerable <IAcceptedDomain> acceptedDomains = taskContext.Parameters.Get <IEnumerable <IAcceptedDomain> >("_tenantAcceptedDomains");
                    if (!string.IsNullOrEmpty(text))
                    {
                        if (!this.ValidateOwaUri(text, acceptedDomains))
                        {
                            sessionParameters.Set("TargetOwaURL", this.GetDefaultOwaUri(acceptedDomains, this.fedOrgId));
                        }
                    }
                    else
                    {
                        sessionParameters.Set("TargetOwaURL", this.GetDefaultOwaUri(acceptedDomains, this.fedOrgId));
                    }
                }
                else
                {
                    sessionParameters.SetNull <string>("TargetOwaURL");
                }
            }
            if (sessionParameters.Count > 0)
            {
                OrganizationRelationship organizationRelationship = taskContext.Parameters.Get <OrganizationRelationship>("_onPremOrgRel");
                base.OnPremisesSession.SetOrganizationRelationship(organizationRelationship.Identity, sessionParameters);
                List <string> list = new List <string>();
                string        item = taskContext.Parameters.Get <string>("_hybridDomain");
                list.Add(item);
                this.onPremOrgRel = TaskCommon.GetOrganizationRelationship(taskContext.OnPremisesSession, TaskCommon.GetOnPremOrgRelationshipName(this.OnPremOrgConfig), list);
                taskContext.Parameters.Set <OrganizationRelationship>("_onPremOrgRel", this.onPremOrgRel);
            }
            if (sessionParameters2.Count > 0)
            {
                OrganizationRelationship organizationRelationship2 = taskContext.Parameters.Get <OrganizationRelationship>("_tenantOrgRel");
                base.TenantSession.SetOrganizationRelationship(organizationRelationship2.Identity, sessionParameters2);
                IEnumerable <string> domains = taskContext.Parameters.Get <IEnumerable <string> >("_hybridDomainList");
                this.tenantOrgRel = TaskCommon.GetOrganizationRelationship(taskContext.TenantSession, TaskCommon.GetTenantOrgRelationshipName(this.OnPremOrgConfig), domains);
                taskContext.Parameters.Set <OrganizationRelationship>("_onPremOrgRel", this.tenantOrgRel);
            }
            this.ConfigureAvailabilityAddressSpace(taskContext);
            return(true);
        }
        public override bool NeedsConfiguration(ITaskContext taskContext)
        {
            bool flag = base.NeedsConfiguration(taskContext);
            OrganizationRelationship existingOrgRel  = taskContext.Parameters.Get <OrganizationRelationship>("_onPremOrgRel");
            OrganizationRelationship existingOrgRel2 = taskContext.Parameters.Get <OrganizationRelationship>("_tenantOrgRel");

            return(flag || this.NeedProvisionOrganizationRelationship(base.OnPremisesSession, existingOrgRel, this.OnpremisesFederationInfo, new SmtpDomain[]
            {
                new SmtpDomain(this.TenantCoexistenceDomain)
            }, TaskCommon.GetOnPremOrgRelationshipName(this.OnPremOrgConfig)) || this.NeedProvisionOrganizationRelationship(base.TenantSession, existingOrgRel2, this.TenantFederationInfo, this.HybridDomains, TaskCommon.GetTenantOrgRelationshipName(this.OnPremOrgConfig)) || (this.RequiresFederationTrust() && (this.updateOnPremisesFedOrgId || this.updateTenantFedOrgId || this.addOnPremisesFedDomains.Count > 0)));
        }
Ejemplo n.º 5
0
        public override bool CheckPrereqs(ITaskContext taskContext)
        {
            if (!base.CheckPrereqs(taskContext))
            {
                return(false);
            }
            if (taskContext.HybridConfigurationObject.ExchangeVersion.ExchangeBuild.Major != taskContext.HybridConfigurationObject.MaximumSupportedExchangeObjectVersion.ExchangeBuild.Major)
            {
                base.Logger.LogInformation(HybridStrings.HybridInfoTaskLogTemplate(base.Name, HybridStrings.ErrorHybridMustBeUpgraded));
                base.AddLocalizedStringError(HybridStrings.ErrorHybridMustBeUpgraded);
                return(false);
            }
            if (Configuration.RequiresIntraOrganizationConnector(taskContext.HybridConfigurationObject.ServiceInstance) && Configuration.RestrictIOCToSP1OrGreater(taskContext.HybridConfigurationObject.ServiceInstance) && !(taskContext.OnPremisesSession.GetIntraOrganizationConfiguration().DeploymentIsCompleteIOCReady ?? false))
            {
                base.Logger.LogInformation(HybridStrings.HybridInfoTaskLogTemplate(base.Name, HybridStrings.ErrorIncompatibleServersDetected));
                base.AddLocalizedStringError(HybridStrings.ErrorIncompatibleServersDetected);
                return(false);
            }
            if (taskContext.HybridConfigurationObject.Domains == null || taskContext.HybridConfigurationObject.Domains.Count == 0)
            {
                base.Logger.LogInformation(HybridStrings.HybridInfoTaskLogTemplate(base.Name, HybridStrings.ErrorNoHybridDomains));
                base.AddLocalizedStringError(HybridStrings.ErrorNoHybridDomains);
                return(false);
            }
            IOrderedEnumerable <string> orderedEnumerable = from d in taskContext.HybridConfigurationObject.Domains
                                                            select d.Domain into d
                                                            orderby d
                                                            select d;

            taskContext.Parameters.Set <IEnumerable <string> >("_hybridDomainList", orderedEnumerable);
            IEnumerable <IAcceptedDomain> acceptedDomain = base.TenantSession.GetAcceptedDomain();

            if (acceptedDomain.Count <IAcceptedDomain>() == 0)
            {
                base.Logger.LogInformation(HybridStrings.HybridInfoTaskLogTemplate(base.Name, HybridStrings.ErrorNoTenantAcceptedDomains));
                base.AddLocalizedStringError(HybridStrings.ErrorNoTenantAcceptedDomains);
                return(false);
            }
            taskContext.Parameters.Set <IEnumerable <IAcceptedDomain> >("_tenantAcceptedDomains", acceptedDomain);
            string text = null;

            foreach (IAcceptedDomain acceptedDomain2 in acceptedDomain)
            {
                if (acceptedDomain2.IsCoexistenceDomain)
                {
                    text = acceptedDomain2.DomainNameDomain;
                    break;
                }
            }
            if (string.IsNullOrEmpty(text))
            {
                base.Logger.LogInformation(HybridStrings.HybridInfoTaskLogTemplate(base.Name, HybridStrings.ErrorNoHybridDomain));
                base.AddLocalizedStringError(HybridStrings.ErrorNoHybridDomain);
                return(false);
            }
            taskContext.Parameters.Set <string>("_hybridDomain", text);
            IEnumerable <IAcceptedDomain> acceptedDomain3 = base.OnPremisesSession.GetAcceptedDomain();

            if (acceptedDomain3.Count <IAcceptedDomain>() == 0)
            {
                base.Logger.LogInformation(HybridStrings.HybridInfoTaskLogTemplate(base.Name, HybridStrings.ErrorNoOnPremAcceptedDomains));
                base.AddLocalizedStringError(HybridStrings.ErrorNoOnPremAcceptedDomains);
                return(false);
            }
            taskContext.Parameters.Set <IEnumerable <IAcceptedDomain> >("_onPremAcceptedDomains", acceptedDomain3);
            foreach (string domain in orderedEnumerable)
            {
                if (!GlobalPrereqTask.IsAcceptedDomain(domain, acceptedDomain))
                {
                    base.Logger.LogInformation(HybridStrings.HybridInfoTaskLogTemplate(base.Name, HybridStrings.ErrorHybridDomainNotAcceptedOnTenant(domain)));
                    base.AddLocalizedStringError(HybridStrings.ErrorHybridDomainNotAcceptedOnTenant(domain));
                    return(false);
                }
                if (!GlobalPrereqTask.IsAcceptedDomain(domain, acceptedDomain3))
                {
                    base.Logger.LogInformation(HybridStrings.HybridInfoTaskLogTemplate(base.Name, HybridStrings.ErrorHybridDomainNotAcceptedOnPrem(domain)));
                    base.AddLocalizedStringError(HybridStrings.ErrorHybridDomainNotAcceptedOnPrem(domain));
                    return(false);
                }
            }
            if (!GlobalPrereqTask.IsAcceptedDomain(text, acceptedDomain))
            {
                base.Logger.LogInformation(HybridStrings.HybridInfoTaskLogTemplate(base.Name, HybridStrings.ErrorCoexistenceDomainNotAcceptedOnTenant(text)));
                base.AddLocalizedStringError(HybridStrings.ErrorCoexistenceDomainNotAcceptedOnTenant(text));
                return(false);
            }
            IOrganizationConfig organizationConfig = base.OnPremisesSession.GetOrganizationConfig();
            List <string>       list = new List <string>();

            list.Add(text);
            OrganizationRelationship organizationRelationship = TaskCommon.GetOrganizationRelationship(taskContext.OnPremisesSession, TaskCommon.GetOnPremOrgRelationshipName(organizationConfig), list);

            taskContext.Parameters.Set <OrganizationRelationship>("_onPremOrgRel", organizationRelationship);
            organizationRelationship = TaskCommon.GetOrganizationRelationship(taskContext.TenantSession, TaskCommon.GetTenantOrgRelationshipName(organizationConfig), orderedEnumerable);
            taskContext.Parameters.Set <OrganizationRelationship>("_tenantOrgRel", organizationRelationship);
            foreach (ADObjectId adobjectId in taskContext.HybridConfigurationObject.ClientAccessServers)
            {
                IExchangeServer exchangeServer = base.OnPremisesSession.GetExchangeServer(adobjectId.Name);
                if (!this.HasCASRole(exchangeServer))
                {
                    base.Logger.LogInformation(HybridStrings.HybridInfoTaskLogTemplate(base.Name, HybridStrings.ErrorCASRoleInvalid(exchangeServer.Name)));
                    base.AddLocalizedStringError(HybridStrings.ErrorCASRoleInvalid(exchangeServer.Name));
                    return(false);
                }
            }
            return(true);
        }