/// <summary>
        /// Initializes cloud metadata dynamically from ARM.
        /// </summary>
        private static async Task <IDictionary <string, AzureEnvironment> > InitializeEnvironmentsFromArm(
            IHttpOperations httpOperations,
            string armMetadataRequestUri)
        {
            var armResponseMessage = await httpOperations.GetAsync(armMetadataRequestUri);

            if (armResponseMessage?.StatusCode != HttpStatusCode.OK)
            {
                throw new Exception("Failed to load cloud metadata from the url specified by ARM_CLOUD_METADATA_URL.");
            }

            var armMetadataContent = await armResponseMessage.Content?.ReadAsStringAsync();

            if (string.IsNullOrEmpty(armMetadataContent))
            {
                throw new Exception("Failed to load cloud metadata from the url specified by ARM_CLOUD_METADATA_URL.");
            }

            var armMetadataList = JsonConvert.DeserializeObject <List <ArmMetadata> >(armMetadataContent);
            var result          = new ConcurrentDictionary <string, AzureEnvironment>(StringComparer.InvariantCultureIgnoreCase);

            foreach (var armMetadata in armMetadataList)
            {
                result[armMetadata.Name] = MapArmToAzureEnvironment(armMetadataList.First(a =>
                                                                                          a.Name.Equals(armMetadata.Name, StringComparison.InvariantCultureIgnoreCase)));
            }

            SetExtendedProperties(result);
            return(result);
        }
Beispiel #2
0
        public ManagedServiceAccessToken(IAzureAccount account, IAzureEnvironment environment, string resourceId, string tenant = "Common")
        {
            if (account == null || string.IsNullOrEmpty(account.Id) || !account.IsPropertySet(AzureAccount.Property.MSILoginUri))
            {
                throw new ArgumentNullException(nameof(account));
            }

            if (string.IsNullOrWhiteSpace(tenant))
            {
                throw new ArgumentNullException(nameof(tenant));
            }

            if (environment == null)
            {
                throw new ArgumentNullException(nameof(environment));
            }

            _account    = account;
            _resourceId = GetResource(resourceId, environment);
            var baseUri = _account.GetProperty(AzureAccount.Property.MSILoginUri);
            var builder = new UriBuilder(baseUri);

            builder.Query = string.Format("resource={0}", Uri.EscapeDataString(_resourceId));
            _requestUri   = builder.Uri.ToString();
            _tenant       = tenant;
            IHttpOperationsFactory factory;

            if (!AzureSession.Instance.TryGetComponent(HttpClientOperationsFactory.Name, out factory))
            {
                factory = HttpClientOperationsFactory.Create();
            }

            _tokenGetter = factory.GetHttpOperations <ManagedServiceTokenInfo>().WithHeader("Metadata", new[] { "true" });
        }
        public ManagedServiceAccessToken(IAzureAccount account, IAzureEnvironment environment, string resourceId, string tenant = "Common")
        {
            if (account == null || string.IsNullOrEmpty(account.Id) || !account.IsPropertySet(AzureAccount.Property.MSILoginUri))
            {
                throw new ArgumentNullException(nameof(account));
            }

            if (string.IsNullOrWhiteSpace(tenant))
            {
                throw new ArgumentNullException(nameof(tenant));
            }

            if (environment == null)
            {
                throw new ArgumentNullException(nameof(environment));
            }

            _account    = account;
            _resourceId = GetResource(resourceId, environment);
            var idType = GetIdentityType(account);

            foreach (var uri in BuildTokenUri(_account.GetProperty(AzureAccount.Property.MSILoginUri), account, idType, _resourceId))
            {
                RequestUris.Enqueue(uri);
            }

            if (account.IsPropertySet(AzureAccount.Property.MSILoginUriBackup))
            {
                foreach (var uri in BuildTokenUri(_account.GetProperty(AzureAccount.Property.MSILoginUriBackup), account, idType, _resourceId))
                {
                    RequestUris.Enqueue(uri);
                }
            }

            _tenant = tenant;
            IHttpOperationsFactory factory;

            if (!AzureSession.Instance.TryGetComponent(HttpClientOperationsFactory.Name, out factory))
            {
                factory = HttpClientOperationsFactory.Create();
            }

            _tokenGetter = factory.GetHttpOperations <ManagedServiceTokenInfo>(true).WithHeader("Metadata", new[] { "true" });
            if (account.IsPropertySet(AzureAccount.Property.MSILoginSecret))
            {
                _tokenGetter = _tokenGetter.WithHeader("Secret", new[] { account.GetProperty(AzureAccount.Property.MSILoginSecret) });
            }
        }
Beispiel #4
0
 public CardProcessor()
 {
     _httpClient = new HttpOperations();
 }
        internal static IDictionary <string, AzureEnvironment> InitializeBuiltInEnvironments(string armMetadataRequestUri, Action <string> debugLogger = null, Action <string> warningLogger = null, IHttpOperations httpOperations = null)
        {
            IDictionary <string, AzureEnvironment> armAzureEnvironments = new Dictionary <string, AzureEnvironment>(StringComparer.InvariantCultureIgnoreCase);

            try
            {
                if (string.IsNullOrEmpty(armMetadataRequestUri))
                {
                    armMetadataRequestUri = Environment.GetEnvironmentVariable(ArmMetadataEnvVariable);
                    if (string.IsNullOrEmpty(armMetadataRequestUri))
                    {
                        armMetadataRequestUri = DefaultArmMetaDataEndpoint;
                    }
                    else
                    {
                        debugLogger?.Invoke($"Get {armMetadataRequestUri} from environment variable {ArmMetadataEnvVariable}");
                    }
                }
                if (DisableArmMetaDataEndpoint.Equals(armMetadataRequestUri?.Trim().ToUpper()))
                {
                    warningLogger?.Invoke($"Discover feature is disabled by environment variable {ArmMetadataEnvVariable}");
                    armMetadataRequestUri = null;
                }
                if (!string.IsNullOrEmpty(armMetadataRequestUri))
                {
                    debugLogger?.Invoke($"Discover environments via {armMetadataRequestUri}");
                    List <ArmMetadata> list = InitializeEnvironmentsFromArm(armMetadataRequestUri, httpOperations).ConfigureAwait(false).GetAwaiter().GetResult();
                    foreach (var metadata in list)
                    {
                        var env = MapArmToAzureEnvironment(metadata);
                        env.Type = TypeDiscovered;
                        armAzureEnvironments[env.Name] = env;
                        debugLogger?.Invoke($"Added discovered environment {env.Name}");
                    }
                }
            }
            catch (Exception e)
            {
                warningLogger?.Invoke("Cannot discover environments with error");
                warningLogger?.Invoke(e.StackTrace);
            }

            debugLogger?.Invoke($"Load built-in environments");
            var azureCloud = new AzureEnvironment
            {
                Name = EnvironmentName.AzureCloud,
                Type = TypeBuiltIn,
                PublishSettingsFileUrl   = AzureEnvironmentConstants.AzurePublishSettingsFileUrl,
                ServiceManagementUrl     = AzureEnvironmentConstants.AzureServiceEndpoint,
                ResourceManagerUrl       = AzureEnvironmentConstants.AzureResourceManagerEndpoint,
                ManagementPortalUrl      = AzureEnvironmentConstants.AzureManagementPortalUrl,
                ActiveDirectoryAuthority = AzureEnvironmentConstants.AzureActiveDirectoryEndpoint,
                ActiveDirectoryServiceEndpointResourceId = AzureEnvironmentConstants.AzureServiceEndpoint,
                StorageEndpointSuffix = AzureEnvironmentConstants.AzureStorageEndpointSuffix,
                GalleryUrl            = AzureEnvironmentConstants.GalleryEndpoint,
                SqlDatabaseDnsSuffix  = AzureEnvironmentConstants.AzureSqlDatabaseDnsSuffix,
                GraphUrl = AzureEnvironmentConstants.AzureGraphEndpoint,
                TrafficManagerDnsSuffix = AzureEnvironmentConstants.AzureTrafficManagerDnsSuffix,
                AzureKeyVaultDnsSuffix  = AzureEnvironmentConstants.AzureKeyVaultDnsSuffix,
                AzureKeyVaultServiceEndpointResourceId            = AzureEnvironmentConstants.AzureKeyVaultServiceEndpointResourceId,
                AzureDataLakeAnalyticsCatalogAndJobEndpointSuffix = AzureEnvironmentConstants.AzureDataLakeAnalyticsCatalogAndJobEndpointSuffix,
                AzureDataLakeStoreFileSystemEndpointSuffix        = AzureEnvironmentConstants.AzureDataLakeStoreFileSystemEndpointSuffix,
                GraphEndpointResourceId         = AzureEnvironmentConstants.AzureGraphEndpoint,
                DataLakeEndpointResourceId      = AzureEnvironmentConstants.AzureDataLakeServiceEndpointResourceId,
                BatchEndpointResourceId         = AzureEnvironmentConstants.BatchEndpointResourceId,
                ContainerRegistryEndpointSuffix = AzureEnvironmentConstants.AzureContainerRegistryEndpointSuffix,
                AdTenant = "Common"
            };

            var azureChina = new AzureEnvironment
            {
                Name = EnvironmentName.AzureChinaCloud,
                Type = TypeBuiltIn,
                PublishSettingsFileUrl   = AzureEnvironmentConstants.ChinaPublishSettingsFileUrl,
                ServiceManagementUrl     = AzureEnvironmentConstants.ChinaServiceEndpoint,
                ResourceManagerUrl       = AzureEnvironmentConstants.ChinaResourceManagerEndpoint,
                ManagementPortalUrl      = AzureEnvironmentConstants.ChinaManagementPortalUrl,
                ActiveDirectoryAuthority = AzureEnvironmentConstants.ChinaActiveDirectoryEndpoint,
                ActiveDirectoryServiceEndpointResourceId = AzureEnvironmentConstants.ChinaServiceEndpoint,
                StorageEndpointSuffix = AzureEnvironmentConstants.ChinaStorageEndpointSuffix,
                GalleryUrl            = AzureEnvironmentConstants.GalleryEndpoint,
                SqlDatabaseDnsSuffix  = AzureEnvironmentConstants.ChinaSqlDatabaseDnsSuffix,
                GraphUrl = AzureEnvironmentConstants.ChinaGraphEndpoint,
                TrafficManagerDnsSuffix = AzureEnvironmentConstants.ChinaTrafficManagerDnsSuffix,
                AzureKeyVaultDnsSuffix  = AzureEnvironmentConstants.ChinaKeyVaultDnsSuffix,
                AzureKeyVaultServiceEndpointResourceId            = AzureEnvironmentConstants.ChinaKeyVaultServiceEndpointResourceId,
                AzureDataLakeAnalyticsCatalogAndJobEndpointSuffix = null,
                AzureDataLakeStoreFileSystemEndpointSuffix        = null,
                DataLakeEndpointResourceId      = null,
                GraphEndpointResourceId         = AzureEnvironmentConstants.ChinaGraphEndpoint,
                BatchEndpointResourceId         = AzureEnvironmentConstants.ChinaBatchEndpointResourceId,
                ContainerRegistryEndpointSuffix = AzureEnvironmentConstants.ChinaContainerRegistryEndpointSuffix,
                AdTenant = "Common"
            };

            var azureUSGovernment = new AzureEnvironment
            {
                Name = EnvironmentName.AzureUSGovernment,
                Type = TypeBuiltIn,
                PublishSettingsFileUrl   = AzureEnvironmentConstants.USGovernmentPublishSettingsFileUrl,
                ServiceManagementUrl     = AzureEnvironmentConstants.USGovernmentServiceEndpoint,
                ResourceManagerUrl       = AzureEnvironmentConstants.USGovernmentResourceManagerEndpoint,
                ManagementPortalUrl      = AzureEnvironmentConstants.USGovernmentManagementPortalUrl,
                ActiveDirectoryAuthority = AzureEnvironmentConstants.USGovernmentActiveDirectoryEndpoint,
                ActiveDirectoryServiceEndpointResourceId = AzureEnvironmentConstants.USGovernmentServiceEndpoint,
                StorageEndpointSuffix = AzureEnvironmentConstants.USGovernmentStorageEndpointSuffix,
                GalleryUrl            = AzureEnvironmentConstants.GalleryEndpoint,
                SqlDatabaseDnsSuffix  = AzureEnvironmentConstants.USGovernmentSqlDatabaseDnsSuffix,
                GraphUrl = AzureEnvironmentConstants.USGovernmentGraphEndpoint,
                TrafficManagerDnsSuffix = AzureEnvironmentConstants.USGovernmentTrafficManagerDnsSuffix,
                AzureKeyVaultDnsSuffix  = AzureEnvironmentConstants.USGovernmentKeyVaultDnsSuffix,
                AzureKeyVaultServiceEndpointResourceId            = AzureEnvironmentConstants.USGovernmentKeyVaultServiceEndpointResourceId,
                AzureDataLakeAnalyticsCatalogAndJobEndpointSuffix = null,
                AzureDataLakeStoreFileSystemEndpointSuffix        = null,
                DataLakeEndpointResourceId      = null,
                GraphEndpointResourceId         = AzureEnvironmentConstants.USGovernmentGraphEndpoint,
                BatchEndpointResourceId         = AzureEnvironmentConstants.USGovernmentBatchEndpointResourceId,
                ContainerRegistryEndpointSuffix = AzureEnvironmentConstants.USGovernmentContainerRegistryEndpointSuffix,
                AdTenant = "Common"
            };

            var azureGermany = new AzureEnvironment
            {
                Name = EnvironmentName.AzureGermanCloud,
                Type = TypeBuiltIn,
                PublishSettingsFileUrl   = AzureEnvironmentConstants.GermanPublishSettingsFileUrl,
                ServiceManagementUrl     = AzureEnvironmentConstants.GermanServiceEndpoint,
                ResourceManagerUrl       = AzureEnvironmentConstants.GermanResourceManagerEndpoint,
                ManagementPortalUrl      = AzureEnvironmentConstants.GermanManagementPortalUrl,
                ActiveDirectoryAuthority = AzureEnvironmentConstants.GermanActiveDirectoryEndpoint,
                ActiveDirectoryServiceEndpointResourceId = AzureEnvironmentConstants.GermanServiceEndpoint,
                StorageEndpointSuffix = AzureEnvironmentConstants.GermanStorageEndpointSuffix,
                GalleryUrl            = AzureEnvironmentConstants.GalleryEndpoint,
                SqlDatabaseDnsSuffix  = AzureEnvironmentConstants.GermanSqlDatabaseDnsSuffix,
                GraphUrl = AzureEnvironmentConstants.GermanGraphEndpoint,
                TrafficManagerDnsSuffix = AzureEnvironmentConstants.GermanTrafficManagerDnsSuffix,
                AzureKeyVaultDnsSuffix  = AzureEnvironmentConstants.GermanKeyVaultDnsSuffix,
                AzureKeyVaultServiceEndpointResourceId            = AzureEnvironmentConstants.GermanAzureKeyVaultServiceEndpointResourceId,
                AzureDataLakeAnalyticsCatalogAndJobEndpointSuffix = null,
                AzureDataLakeStoreFileSystemEndpointSuffix        = null,
                DataLakeEndpointResourceId = null,
                GraphEndpointResourceId    = AzureEnvironmentConstants.GermanGraphEndpoint,
                BatchEndpointResourceId    = AzureEnvironmentConstants.GermanBatchEndpointResourceId,
                AdTenant = "Common"
            };

            if (!armAzureEnvironments.ContainsKey(EnvironmentName.AzureCloud))
            {
                armAzureEnvironments[EnvironmentName.AzureCloud] = azureCloud;
            }
            if (!armAzureEnvironments.ContainsKey(EnvironmentName.AzureChinaCloud))
            {
                armAzureEnvironments[EnvironmentName.AzureChinaCloud] = azureChina;
            }
            if (!armAzureEnvironments.ContainsKey(EnvironmentName.AzureUSGovernment))
            {
                armAzureEnvironments[EnvironmentName.AzureUSGovernment] = azureUSGovernment;
            }
            if (!armAzureEnvironments.ContainsKey(EnvironmentName.AzureGermanCloud))
            {
                armAzureEnvironments[EnvironmentName.AzureGermanCloud] = azureGermany;
            }

            SetExtendedProperties(armAzureEnvironments);

            return(armAzureEnvironments);
        }
        /// <summary>
        /// Initializes cloud metadata dynamically from ARM.
        /// </summary>
        private static async Task <List <ArmMetadata> > InitializeEnvironmentsFromArm(string armMetadataRequestUri, IHttpOperations httpOperations = null)
        {
            if (httpOperations == null)
            {
                httpOperations = HttpClientOperationsFactory.Create().GetHttpOperations();
            }
            var armResponseMessage = await httpOperations.GetAsync(armMetadataRequestUri).ConfigureAwait(false);

            if (armResponseMessage?.StatusCode != HttpStatusCode.OK)
            {
                throw new Exception($"Failed to load cloud metadata from the url {armMetadataRequestUri}.");
            }

            string armMetadataContent = null;

            if (armResponseMessage.Content != null)
            {
                armMetadataContent = await armResponseMessage.Content.ReadAsStringAsync().ConfigureAwait(false);
            }
            if (string.IsNullOrEmpty(armMetadataContent))
            {
                throw new Exception($"Failed to load cloud metadata from the url {armMetadataRequestUri}.");
            }

            return(JsonConvert.DeserializeObject <List <ArmMetadata> >(armMetadataContent));
        }
 public CommonPaymentProcessor()
 {
     _httpClient = new HttpOperations();
 }
 public InstallmentProcessor()
 {
     _httpClient = new HttpOperations();
 }
        internal static IDictionary <string, AzureEnvironment> InitializeBuiltInEnvironments(IHttpOperations httpOperations)
        {
            IDictionary <string, AzureEnvironment> armAzureEnvironments = null;

            try
            {
                var armMetadataRequestUri = Environment.GetEnvironmentVariable(ArmMetadataEnvVariable);
                if (!string.IsNullOrEmpty(armMetadataRequestUri))
                {
                    armAzureEnvironments = InitializeEnvironmentsFromArm(httpOperations, armMetadataRequestUri).Result;
                }
            }
            catch (Exception)
            {
                armAzureEnvironments = null;
            }

            if (armAzureEnvironments != null)
            {
                return(armAzureEnvironments);
            }

            var azureCloud = new AzureEnvironment
            {
                Name = EnvironmentName.AzureCloud,
                PublishSettingsFileUrl   = AzureEnvironmentConstants.AzurePublishSettingsFileUrl,
                ServiceManagementUrl     = AzureEnvironmentConstants.AzureServiceEndpoint,
                ResourceManagerUrl       = AzureEnvironmentConstants.AzureResourceManagerEndpoint,
                ManagementPortalUrl      = AzureEnvironmentConstants.AzureManagementPortalUrl,
                ActiveDirectoryAuthority = AzureEnvironmentConstants.AzureActiveDirectoryEndpoint,
                ActiveDirectoryServiceEndpointResourceId = AzureEnvironmentConstants.AzureServiceEndpoint,
                StorageEndpointSuffix = AzureEnvironmentConstants.AzureStorageEndpointSuffix,
                GalleryUrl            = AzureEnvironmentConstants.GalleryEndpoint,
                SqlDatabaseDnsSuffix  = AzureEnvironmentConstants.AzureSqlDatabaseDnsSuffix,
                GraphUrl = AzureEnvironmentConstants.AzureGraphEndpoint,
                TrafficManagerDnsSuffix = AzureEnvironmentConstants.AzureTrafficManagerDnsSuffix,
                AzureKeyVaultDnsSuffix  = AzureEnvironmentConstants.AzureKeyVaultDnsSuffix,
                AzureKeyVaultServiceEndpointResourceId            = AzureEnvironmentConstants.AzureKeyVaultServiceEndpointResourceId,
                AzureDataLakeAnalyticsCatalogAndJobEndpointSuffix = AzureEnvironmentConstants.AzureDataLakeAnalyticsCatalogAndJobEndpointSuffix,
                AzureDataLakeStoreFileSystemEndpointSuffix        = AzureEnvironmentConstants.AzureDataLakeStoreFileSystemEndpointSuffix,
                GraphEndpointResourceId    = AzureEnvironmentConstants.AzureGraphEndpoint,
                DataLakeEndpointResourceId = AzureEnvironmentConstants.AzureDataLakeServiceEndpointResourceId,
                BatchEndpointResourceId    = AzureEnvironmentConstants.BatchEndpointResourceId,
                AdTenant = "Common"
            };

            var azureChina = new AzureEnvironment
            {
                Name = EnvironmentName.AzureChinaCloud,
                PublishSettingsFileUrl   = AzureEnvironmentConstants.ChinaPublishSettingsFileUrl,
                ServiceManagementUrl     = AzureEnvironmentConstants.ChinaServiceEndpoint,
                ResourceManagerUrl       = AzureEnvironmentConstants.ChinaResourceManagerEndpoint,
                ManagementPortalUrl      = AzureEnvironmentConstants.ChinaManagementPortalUrl,
                ActiveDirectoryAuthority = AzureEnvironmentConstants.ChinaActiveDirectoryEndpoint,
                ActiveDirectoryServiceEndpointResourceId = AzureEnvironmentConstants.ChinaServiceEndpoint,
                StorageEndpointSuffix = AzureEnvironmentConstants.ChinaStorageEndpointSuffix,
                GalleryUrl            = AzureEnvironmentConstants.GalleryEndpoint,
                SqlDatabaseDnsSuffix  = AzureEnvironmentConstants.ChinaSqlDatabaseDnsSuffix,
                GraphUrl = AzureEnvironmentConstants.ChinaGraphEndpoint,
                TrafficManagerDnsSuffix = AzureEnvironmentConstants.ChinaTrafficManagerDnsSuffix,
                AzureKeyVaultDnsSuffix  = AzureEnvironmentConstants.ChinaKeyVaultDnsSuffix,
                AzureKeyVaultServiceEndpointResourceId            = AzureEnvironmentConstants.ChinaKeyVaultServiceEndpointResourceId,
                AzureDataLakeAnalyticsCatalogAndJobEndpointSuffix = null,
                AzureDataLakeStoreFileSystemEndpointSuffix        = null,
                DataLakeEndpointResourceId = null,
                GraphEndpointResourceId    = AzureEnvironmentConstants.ChinaGraphEndpoint,
                BatchEndpointResourceId    = AzureEnvironmentConstants.ChinaBatchEndpointResourceId,
                AdTenant = "Common"
            };

            var azureUSGovernment = new AzureEnvironment
            {
                Name = EnvironmentName.AzureUSGovernment,
                PublishSettingsFileUrl   = AzureEnvironmentConstants.USGovernmentPublishSettingsFileUrl,
                ServiceManagementUrl     = AzureEnvironmentConstants.USGovernmentServiceEndpoint,
                ResourceManagerUrl       = AzureEnvironmentConstants.USGovernmentResourceManagerEndpoint,
                ManagementPortalUrl      = AzureEnvironmentConstants.USGovernmentManagementPortalUrl,
                ActiveDirectoryAuthority = AzureEnvironmentConstants.USGovernmentActiveDirectoryEndpoint,
                ActiveDirectoryServiceEndpointResourceId = AzureEnvironmentConstants.USGovernmentServiceEndpoint,
                StorageEndpointSuffix = AzureEnvironmentConstants.USGovernmentStorageEndpointSuffix,
                GalleryUrl            = AzureEnvironmentConstants.GalleryEndpoint,
                SqlDatabaseDnsSuffix  = AzureEnvironmentConstants.USGovernmentSqlDatabaseDnsSuffix,
                GraphUrl = AzureEnvironmentConstants.USGovernmentGraphEndpoint,
                TrafficManagerDnsSuffix = AzureEnvironmentConstants.USGovernmentTrafficManagerDnsSuffix,
                AzureKeyVaultDnsSuffix  = AzureEnvironmentConstants.USGovernmentKeyVaultDnsSuffix,
                AzureKeyVaultServiceEndpointResourceId            = AzureEnvironmentConstants.USGovernmentKeyVaultServiceEndpointResourceId,
                AzureDataLakeAnalyticsCatalogAndJobEndpointSuffix = null,
                AzureDataLakeStoreFileSystemEndpointSuffix        = null,
                DataLakeEndpointResourceId = null,
                GraphEndpointResourceId    = AzureEnvironmentConstants.USGovernmentGraphEndpoint,
                BatchEndpointResourceId    = AzureEnvironmentConstants.USGovernmentBatchEndpointResourceId,
                AdTenant = "Common"
            };

            var azureGermany = new AzureEnvironment
            {
                Name = EnvironmentName.AzureGermanCloud,
                PublishSettingsFileUrl   = AzureEnvironmentConstants.GermanPublishSettingsFileUrl,
                ServiceManagementUrl     = AzureEnvironmentConstants.GermanServiceEndpoint,
                ResourceManagerUrl       = AzureEnvironmentConstants.GermanResourceManagerEndpoint,
                ManagementPortalUrl      = AzureEnvironmentConstants.GermanManagementPortalUrl,
                ActiveDirectoryAuthority = AzureEnvironmentConstants.GermanActiveDirectoryEndpoint,
                ActiveDirectoryServiceEndpointResourceId = AzureEnvironmentConstants.GermanServiceEndpoint,
                StorageEndpointSuffix = AzureEnvironmentConstants.GermanStorageEndpointSuffix,
                GalleryUrl            = AzureEnvironmentConstants.GalleryEndpoint,
                SqlDatabaseDnsSuffix  = AzureEnvironmentConstants.GermanSqlDatabaseDnsSuffix,
                GraphUrl = AzureEnvironmentConstants.GermanGraphEndpoint,
                TrafficManagerDnsSuffix = AzureEnvironmentConstants.GermanTrafficManagerDnsSuffix,
                AzureKeyVaultDnsSuffix  = AzureEnvironmentConstants.GermanKeyVaultDnsSuffix,
                AzureKeyVaultServiceEndpointResourceId            = AzureEnvironmentConstants.GermanAzureKeyVaultServiceEndpointResourceId,
                AzureDataLakeAnalyticsCatalogAndJobEndpointSuffix = null,
                AzureDataLakeStoreFileSystemEndpointSuffix        = null,
                DataLakeEndpointResourceId = null,
                GraphEndpointResourceId    = AzureEnvironmentConstants.GermanGraphEndpoint,
                BatchEndpointResourceId    = AzureEnvironmentConstants.GermanBatchEndpointResourceId,
                AdTenant = "Common"
            };

            var result = new ConcurrentDictionary <string, AzureEnvironment>(StringComparer.InvariantCultureIgnoreCase)
            {
                [EnvironmentName.AzureCloud]        = azureCloud,
                [EnvironmentName.AzureChinaCloud]   = azureChina,
                [EnvironmentName.AzureUSGovernment] = azureUSGovernment,
                [EnvironmentName.AzureGermanCloud]  = azureGermany
            };

            SetExtendedProperties(result);
            return(result);
        }