コード例 #1
0
        protected override void InternalProcessRecord()
        {
            if (this.Organization != null)
            {
                if (this.ehfService == null)
                {
                    this.globalSession = this.CreateGlobalSession();
                    EhfTargetServerConfig config = Utils.CreateEhfTargetConfig(this.globalSession, this.ConnectorId, this);
                    this.edgeSyncEhfConnector = Utils.GetConnector(this.globalSession, this.ConnectorId, this);
                    this.ehfService           = new EhfProvisioningService(config);
                }
                ExchangeConfigurationUnit currentOrganization  = this.GetCurrentOrganization(this.globalSession);
                ExchangeTenantRecord      exchangeTenantRecord = this.CreateExchangeTenantRecord(currentOrganization);
                EhfCompanyRecord          ehfCompanyRecord     = this.CreateEhfCompanyRecord(exchangeTenantRecord.PerimeterConfig);
                IList <object>            list = EhfSyncDiffRecord <object> .Compare(exchangeTenantRecord, ehfCompanyRecord);

                using (IEnumerator <object> enumerator = list.GetEnumerator())
                {
                    while (enumerator.MoveNext())
                    {
                        object sendToPipeline = enumerator.Current;
                        base.WriteObject(sendToPipeline);
                    }
                    return;
                }
            }
            base.TestGeneralSyncHealth();
        }
コード例 #2
0
        private static IList <object> CompareDomain(ExchangeTenantRecord exchangeTenantRecord, EhfCompanyRecord ehfCompanyRecord)
        {
            List <object> list = new List <object>();

            if (ehfCompanyRecord != null)
            {
                IList <DomainSyncRecord> list2 = ehfCompanyRecord.Domains.Intersect(exchangeTenantRecord.Domains).ToList <DomainSyncRecord>();
                if (list2.Count != ehfCompanyRecord.Domains.Count || ehfCompanyRecord.Domains.Count != exchangeTenantRecord.Domains.Count)
                {
                    IList <DomainSyncRecord> list3 = exchangeTenantRecord.Domains.Except(ehfCompanyRecord.Domains).ToList <DomainSyncRecord>();
                    IList <DomainSyncRecord> list4 = ehfCompanyRecord.Domains.Except(exchangeTenantRecord.Domains).ToList <DomainSyncRecord>();
                    foreach (DomainSyncRecord domainSyncRecord in list3)
                    {
                        list.Add(new EhfSyncDiffRecord <DomainSyncRecord>(exchangeTenantRecord.Organization.RawIdentity, exchangeTenantRecord.AcceptedDomains[domainSyncRecord.Name].Identity, EhfSyncObjectType.AcceptedDomain, string.Empty, domainSyncRecord, null, null, exchangeTenantRecord.AcceptedDomains[domainSyncRecord.Name].SyncErrors));
                    }
                    if (list4.Count > 0)
                    {
                        foreach (DomainSyncRecord actualObject in list4)
                        {
                            list.Add(new EhfSyncDiffRecord <DomainSyncRecord>(exchangeTenantRecord.Organization.RawIdentity, null, EhfSyncObjectType.AcceptedDomain, string.Empty, null, actualObject));
                        }
                    }
                }
                using (IEnumerator <DomainSyncRecord> enumerator3 = list2.GetEnumerator())
                {
                    while (enumerator3.MoveNext())
                    {
                        DomainSyncRecord     domainSyncRecord2    = enumerator3.Current;
                        SyncedAcceptedDomain syncedAcceptedDomain = exchangeTenantRecord.AcceptedDomains[domainSyncRecord2.Name];
                        if (!domainSyncRecord2.Enabled)
                        {
                            list.Add(new EhfSyncDiffRecord <string>(exchangeTenantRecord.Organization.RawIdentity, syncedAcceptedDomain.Identity, EhfSyncObjectType.AcceptedDomain, "ENABLED", bool.TrueString, domainSyncRecord2.Enabled.ToString(), string.Empty, syncedAcceptedDomain.SyncErrors));
                        }
                        if (!domainSyncRecord2.Guid.Equals(syncedAcceptedDomain.Guid))
                        {
                            list.Add(new EhfSyncDiffRecord <string>(exchangeTenantRecord.Organization.RawIdentity, syncedAcceptedDomain.Identity, EhfSyncObjectType.AcceptedDomain, "GUID", syncedAcceptedDomain.Guid.ToString(), domainSyncRecord2.Guid.ToString(), string.Empty, syncedAcceptedDomain.SyncErrors));
                        }
                    }
                    return(list);
                }
            }
            foreach (string text in exchangeTenantRecord.AcceptedDomains.Keys)
            {
                SyncedAcceptedDomain syncedAcceptedDomain2 = exchangeTenantRecord.AcceptedDomains[text];
                list.Add(new EhfSyncDiffRecord <string>(exchangeTenantRecord.Organization.RawIdentity, syncedAcceptedDomain2.Identity, EhfSyncObjectType.AcceptedDomain, string.Empty, text, string.Empty, string.Empty, syncedAcceptedDomain2.SyncErrors));
            }
            return(list);
        }
コード例 #3
0
        internal static IList <object> Compare(ExchangeTenantRecord exchangeTenantRecord, EhfCompanyRecord ehfCompanyRecord)
        {
            List <object> list = new List <object>();

            if (!exchangeTenantRecord.PerimeterConfig.EhfConfigSyncEnabled && ehfCompanyRecord == null)
            {
                return(list);
            }
            if (exchangeTenantRecord.PerimeterConfig.EhfConfigSyncEnabled && ehfCompanyRecord == null)
            {
                list.Add(new EhfSyncDiffRecord <SyncedPerimeterConfig>(exchangeTenantRecord.Organization.RawIdentity, exchangeTenantRecord.PerimeterConfig.Identity, EhfSyncObjectType.PerimeterConfig, "PerimeterConfig", exchangeTenantRecord.PerimeterConfig, null, null, exchangeTenantRecord.PerimeterConfig.SyncErrors));
                list.AddRange(EhfSyncDiffRecord <object> .CompareDomain(exchangeTenantRecord, ehfCompanyRecord));
            }
            if (!exchangeTenantRecord.PerimeterConfig.EhfConfigSyncEnabled && ehfCompanyRecord != null)
            {
                list.Add(new EhfSyncDiffRecord <string>(exchangeTenantRecord.Organization.RawIdentity, exchangeTenantRecord.PerimeterConfig.Identity, EhfSyncObjectType.PerimeterConfig, "Company ID", exchangeTenantRecord.CompanyId, ehfCompanyRecord.CompanyId));
                foreach (DomainSyncRecord actualObject in ehfCompanyRecord.Domains)
                {
                    list.Add(new EhfSyncDiffRecord <DomainSyncRecord>(exchangeTenantRecord.Organization.RawIdentity, null, EhfSyncObjectType.AcceptedDomain, string.Empty, null, actualObject));
                }
            }
            if (ehfCompanyRecord != null && exchangeTenantRecord.PerimeterConfig.EhfConfigSyncEnabled)
            {
                EhfSyncDiffRecord <IList <string> > item;
                if (EhfSyncDiffRecord <IList <string> > .TryGetEdgeSyncDiffRecord(exchangeTenantRecord.Organization, exchangeTenantRecord.PerimeterConfig, exchangeTenantRecord.GatewayIPAddresses, ehfCompanyRecord.GatewayIPAddresses, "GatewayIPAddresses", out item))
                {
                    list.Add(item);
                }
                EhfSyncDiffRecord <IList <string> > item2;
                if (EhfSyncDiffRecord <IList <string> > .TryGetEdgeSyncDiffRecord(exchangeTenantRecord.Organization, exchangeTenantRecord.PerimeterConfig, exchangeTenantRecord.InternalIPAddresses, ehfCompanyRecord.InternalIPAddresses, "InternalServerIPAddresses", out item2))
                {
                    list.Add(item2);
                }
                if (!exchangeTenantRecord.CompanyId.Equals(ehfCompanyRecord.CompanyId))
                {
                    list.Add(new EhfSyncDiffRecord <string>(exchangeTenantRecord.Organization.RawIdentity, exchangeTenantRecord.PerimeterConfig.Identity, EhfSyncObjectType.PerimeterConfig, "Company ID", exchangeTenantRecord.CompanyId, ehfCompanyRecord.CompanyId));
                }
                if (!exchangeTenantRecord.Guid.Equals(ehfCompanyRecord.Guid))
                {
                    list.Add(new EhfSyncDiffRecord <Guid>(exchangeTenantRecord.Organization.RawIdentity, exchangeTenantRecord.PerimeterConfig.Identity, EhfSyncObjectType.PerimeterConfig, "GUID", exchangeTenantRecord.Guid, ehfCompanyRecord.Guid));
                }
                if (!ehfCompanyRecord.CompanyName.EndsWith(exchangeTenantRecord.CompanyName))
                {
                    list.Add(new EhfSyncDiffRecord <string>(exchangeTenantRecord.Organization.RawIdentity, exchangeTenantRecord.PerimeterConfig.Identity, EhfSyncObjectType.PerimeterConfig, "Name", exchangeTenantRecord.CompanyName, ehfCompanyRecord.CompanyName));
                }
                if (exchangeTenantRecord.IPSkiplistingEnabled != ehfCompanyRecord.IPSkiplistingEnabled)
                {
                    list.Add(new EhfSyncDiffRecord <bool>(exchangeTenantRecord.Organization.RawIdentity, exchangeTenantRecord.PerimeterConfig.Identity, EhfSyncObjectType.PerimeterConfig, "IPSkiplistingEnabled", exchangeTenantRecord.IPSkiplistingEnabled, ehfCompanyRecord.IPSkiplistingEnabled));
                }
                list.AddRange(EhfSyncDiffRecord <object> .CompareDomain(exchangeTenantRecord, ehfCompanyRecord));
            }
            return(list);
        }
コード例 #4
0
        private EhfCompanyRecord CreateEhfCompanyRecord(SyncedPerimeterConfig perimeterConfig)
        {
            EhfCompanyRecord result = null;
            Exception        ex     = null;

            try
            {
                Company company = null;
                int     companyId;
                if (!this.ehfService.TryGetCompanyByGuid(perimeterConfig.Guid, out company) && int.TryParse(perimeterConfig.PerimeterOrgId, out companyId))
                {
                    company = this.ehfService.GetCompany(companyId);
                }
                if (company != null)
                {
                    Domain[] allDomains = this.ehfService.GetAllDomains(company.CompanyId);
                    result = new EhfCompanyRecord(company, allDomains);
                }
            }
            catch (FaultException <ServiceFault> faultException)
            {
                ServiceFault detail = faultException.Detail;
                if (detail.Id == FaultId.UnableToConnectToDatabase)
                {
                    ex = new InvalidOperationException("ServiceFault: EHF is unable to connect to its database", faultException);
                }
                else
                {
                    if (detail.Id == FaultId.CompanyDoesNotExist)
                    {
                        return(null);
                    }
                    ex = faultException;
                }
            }
            catch (MessageSecurityException ex2)
            {
                switch (EhfProvisioningService.DecodeMessageSecurityException(ex2))
                {
                case EhfProvisioningService.MessageSecurityExceptionReason.DatabaseFailure:
                    ex = new InvalidOperationException("MessageSecurityException: EHF is unable to connect to its database", ex2.InnerException);
                    goto IL_E6;

                case EhfProvisioningService.MessageSecurityExceptionReason.InvalidCredentials:
                    ex = new InvalidOperationException("MessageSecurityException: EHF connector contains invalid credentials", ex2.InnerException);
                    goto IL_E6;
                }
                ex = ex2;
                IL_E6 :;
            }
            catch (CommunicationException ex3)
            {
                ex = ex3;
            }
            catch (TimeoutException ex4)
            {
                ex = ex4;
            }
            catch (EhfProvisioningService.ContractViolationException ex5)
            {
                ex = ex5;
            }
            if (ex != null)
            {
                base.WriteError(ex, ErrorCategory.InvalidOperation, null);
            }
            return(result);
        }