/// <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); }
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) }); } }
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); }