/// <summary> /// The ConfigureServices. /// </summary> /// <param name="services">The services<see cref="IServiceCollection"/>.</param> public void ConfigureServices(IServiceCollection services) { var loggerFactory = LoggerFactory.Create(builder => { builder .AddConsole(); }); services.Configure <CookiePolicyOptions>(options => { // This lambda determines whether user consent for non-essential cookies is needed for a given request. options.CheckConsentNeeded = context => true; options.MinimumSameSitePolicy = SameSiteMode.None; }); var config = new SaaSApiClientConfiguration() { AdAuthenticationEndPoint = this.Configuration["SaaSApiConfiguration:AdAuthenticationEndPoint"], ClientId = this.Configuration["SaaSApiConfiguration:ClientId"], ClientSecret = this.Configuration["SaaSApiConfiguration:ClientSecret"], MTClientId = this.Configuration["SaaSApiConfiguration:MTClientId"], FulFillmentAPIBaseURL = this.Configuration["SaaSApiConfiguration:FulFillmentAPIBaseURL"], FulFillmentAPIVersion = this.Configuration["SaaSApiConfiguration:FulFillmentAPIVersion"], GrantType = this.Configuration["SaaSApiConfiguration:GrantType"], Resource = this.Configuration["SaaSApiConfiguration:Resource"], SaaSAppUrl = this.Configuration["SaaSApiConfiguration:SaaSAppUrl"], SignedOutRedirectUri = this.Configuration["SaaSApiConfiguration:SignedOutRedirectUri"], TenantId = this.Configuration["SaaSApiConfiguration:TenantId"], }; services.AddAuthentication(options => { options.DefaultAuthenticateScheme = OpenIdConnectDefaults.AuthenticationScheme; options.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme; options.DefaultChallengeScheme = CookieAuthenticationDefaults.AuthenticationScheme; }) .AddOpenIdConnect(options => { options.Authority = $"{config.AdAuthenticationEndPoint}/common"; options.ClientId = config.MTClientId; options.ResponseType = OpenIdConnectResponseType.IdToken; options.CallbackPath = "/Home/Index"; options.SignedOutRedirectUri = config.SignedOutRedirectUri; options.TokenValidationParameters.NameClaimType = "name"; options.TokenValidationParameters.ValidateIssuer = false; }) .AddCookie(); var creds = new ClientSecretCredential(config.TenantId.ToString(), config.ClientId.ToString(), config.ClientSecret); services.AddSingleton <IFulfillmentApiService>(new FulfillmentApiService(new MarketplaceSaaSClient(creds), config, new FulfillmentApiClientLogger())); services.AddSingleton <SaaSApiClientConfiguration>(config); services.AddDbContext <SaasKitContext>(options => options.UseSqlServer(this.Configuration.GetConnectionString("DefaultConnection"))); InitializeRepositoryServices(services); services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_3_0); services.AddMvc(option => option.EnableEndpointRouting = false); }
/// <summary> /// GetFulfilllments the URL. /// </summary> /// <param name="clientConfiguration">The client configuration.</param> /// <param name="resourceGuid">The resource unique identifier.</param> /// <param name="action">The action.</param> /// <param name="operationGuid">The operation unique identifier.</param> /// <returns></returns> public static string GetSaaSApiUrl(SaaSApiClientConfiguration clientConfiguration, Guid resourceGuid, SaaSResourceActionEnum?action, Guid?operationGuid = null) { var resourceId = Convert.ToString(resourceGuid); string operationId = string.Empty; string subscriptionBaseURL = "saas/subscriptions/"; if (operationGuid != null && operationGuid != (Guid) default) { operationId = Convert.ToString(operationGuid); } switch (action) { case SaaSResourceActionEnum.RESOLVE: return($"{clientConfiguration.FulFillmentAPIBaseURL}{subscriptionBaseURL}resolve?api-version={clientConfiguration.FulFillmentAPIVersion}"); case SaaSResourceActionEnum.ACTIVATE: return($"{clientConfiguration.FulFillmentAPIBaseURL}{subscriptionBaseURL}{resourceId}/activate?api-version={clientConfiguration.FulFillmentAPIVersion}"); case SaaSResourceActionEnum.LISTALLPLAN: return($"{clientConfiguration.FulFillmentAPIBaseURL}{subscriptionBaseURL}{resourceId}/listAvailablePlans?api-version={clientConfiguration.FulFillmentAPIVersion}"); case SaaSResourceActionEnum.OPERATION_STATUS: return($"{clientConfiguration.FulFillmentAPIBaseURL}{subscriptionBaseURL}{resourceId}/operations/{operationId}?api-version={clientConfiguration.FulFillmentAPIVersion}"); case SaaSResourceActionEnum.ALL_SUBSCRIPTIONS: return($"{clientConfiguration.FulFillmentAPIBaseURL}?api-version={clientConfiguration.FulFillmentAPIVersion}"); case SaaSResourceActionEnum.SUBSCRIPTION_USAGEEVENT: return($"{clientConfiguration.FulFillmentAPIBaseURL}usageEvent?api-version={clientConfiguration.FulFillmentAPIVersion}"); default: return($"{clientConfiguration.FulFillmentAPIBaseURL}{subscriptionBaseURL}{resourceId}?api-version={clientConfiguration.FulFillmentAPIVersion}"); } }
/// <summary> /// Gets the access token. /// </summary> /// <param name="settings">The settings.</param> /// <returns>Get Authentication Token</returns> public static async Task <AuthenticationResult> GetAccessToken(SaaSApiClientConfiguration settings) { var credential = new ClientCredential(settings.ClientId, settings.ClientSecret); var authContext = new AuthenticationContext($"{settings.AdAuthenticationEndPoint}/{settings.TenantId}", false); var result = await authContext.AcquireTokenAsync(settings.Resource, credential).ConfigureAwait(false); return(result); }
/// <summary> /// Initializes a new instance of the <see cref="FulfillmentApiService" /> class. /// </summary> /// <param name="sdkSettings">The SDK settings.</param> /// <param name="logger">The logger.</param> public FulfillmentApiService(IMarketplaceSaaSClient marketplaceClient, SaaSApiClientConfiguration sdkSettings, ILogger logger) : base(logger) { this.marketplaceClient = marketplaceClient; this.ClientConfiguration = sdkSettings; this.Logger = logger; }
/// <summary> /// Initializes a new instance of the <see cref="FulfillmentApiTest" /> class. /// </summary> public FulfillmentApiTest() { var builder = new ConfigurationBuilder(); IConfigurationRoot config = new ConfigurationBuilder() .AddJsonFile("appsettings.test.json") .Build(); this.configuration = config.GetSection("AppSetting").Get <SaaSApiClientConfiguration>(); this.client = new FulfillmentApiClient(this.configuration, null); }
/// <summary> /// Initializes a new instance of the <see cref="FulfillmentApiTest" /> class. /// </summary> public FulfillmentApiTest() { var builder = new ConfigurationBuilder(); IConfigurationRoot config = new ConfigurationBuilder() .AddJsonFile("appsettings.test.json") .Build(); this.configuration = config.GetSection("AppSetting").Get <SaaSApiClientConfiguration>(); var creds = new ClientSecretCredential(configuration.TenantId.ToString(), configuration.ClientId.ToString(), configuration.ClientSecret); this.fulfillApiService = new FulfillmentApiService(new MarketplaceSaaSClient(creds), sdkSettings: this.configuration, null); }
/// <summary> /// Gets the access token. /// </summary> /// <param name="settings">The settings.</param> /// <returns>Get Authentication Token.</returns> public static async Task <ADAuthenticationResult> GetAccessToken(SaaSApiClientConfiguration settings) { string authorizeUrl = string.Format($"https://login.microsoftonline.com/{settings.TenantId}/oauth2/token"); var webRequestHelper = new WebRequestHelper(authorizeUrl, HttpMethods.POST, "application/x-www-form-urlencoded"); var payload = new Dictionary <string, object>(); payload.Add("Grant_type", "client_credentials"); payload.Add("Client_id", settings.ClientId); payload.Add("Client_secret", settings.ClientSecret); payload.Add("Resource", settings.Resource); await webRequestHelper.PrepareDataForRequest(payload).DoRequestAsync().ConfigureAwait(false); return(await webRequestHelper.BuildResultFromResponse <ADAuthenticationResult>()); }
private static void ConfigureServices(IServiceCollection services) { var environment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT"); var loggerFactory = LoggerFactory.Create(builder => { builder .AddConsole(); }); Configuration = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) .AddJsonFile($"appsettings.{environment}.json", optional: true, reloadOnChange: true) .AddEnvironmentVariables() // this doesn't do anything useful notice in setting some env variables explicitly. .Build(); // build it so you can use those config variables down below. Environment.SetEnvironmentVariable("MyConnVariable", Configuration["MyConnVariable"]); var config = new SaaSApiClientConfiguration() { AdAuthenticationEndPoint = Configuration["SaaSApiConfiguration:AdAuthenticationEndPoint"], ClientId = Configuration["SaaSApiConfiguration:ClientId"], ClientSecret = Configuration["SaaSApiConfiguration:ClientSecret"], FulFillmentAPIBaseURL = Configuration["SaaSApiConfiguration:FulFillmentAPIBaseURL"], FulFillmentAPIVersion = Configuration["SaaSApiConfiguration:FulFillmentAPIVersion"], GrantType = Configuration["SaaSApiConfiguration:GrantType"], Resource = Configuration["SaaSApiConfiguration:Resource"], SaaSAppUrl = Configuration["SaaSApiConfiguration:SaaSAppUrl"], SignedOutRedirectUri = Configuration["SaaSApiConfiguration:SignedOutRedirectUri"], TenantId = Configuration["SaaSApiConfiguration:TenantId"], }; var cloudConfig = new CloudStorageConfigs { AzureWebJobsStorage = Configuration["AzureWebJobsStorage"], }; services.AddSingleton <IFulfillmentApiClient>(new FulfillmentApiClient(config, new FulfillmentApiClientLogger())); services.AddSingleton <SaaSApiClientConfiguration>(config); services.AddDbContext <SaasKitContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"))); InitializeRepositoryServices(services); }
/// <summary> /// Initializes a new instance of the <see cref="MeteringApiRestClient{T}" /> class. /// </summary> /// <param name="clientConfiguration">The client configuration.</param> /// <param name="logger">The logger.</param> public MeteringApiRestClient(SaaSApiClientConfiguration clientConfiguration, ILogger logger) : base(clientConfiguration, logger) { }
/// <summary> /// Initializes a new instance of the <see cref="AbstractSaaSApiRestClient{T}" /> class. /// </summary> /// <param name="clientConfiguration">The client configuration.</param> /// <param name="logger">The logger.</param> public AbstractSaaSApiRestClient(SaaSApiClientConfiguration clientConfiguration, ILogger logger) { this.clientConfiguration = clientConfiguration; this.logger = logger; }
/// <summary> /// Initializes a new instance of the <see cref="FulfillmentApiRestClient{T}"/> class. /// </summary> /// <param name="clientConfiguration">The client configuration.</param> /// <param name="logger">The logger.</param> public FulfillmentApiRestClient(SaaSApiClientConfiguration clientConfiguration, ILogger logger) : base(clientConfiguration, logger) { }
/// <summary> /// Initializes a new instance of the <see cref="MeteredBillingApiClient"/> class. /// </summary> /// <param name="sdkSettings">The SDK settings.</param> /// <param name="logger">The logger.</param> public MeteredBillingApiClient(SaaSApiClientConfiguration sdkSettings, ILogger logger) { this.ClientConfiguration = sdkSettings; this.Logger = logger; }
/// <summary> /// Initializes a new instance of the <see cref="FulfillmentApiClient" /> class. /// </summary> /// <param name="sdkSettings">The SDK settings.</param> /// <param name="logger">The logger.</param> public FulfillmentApiClient(SaaSApiClientConfiguration sdkSettings, ILogger logger) { this.ClientConfiguration = sdkSettings; this.Logger = logger; }
/// <summary> /// Initializes a new instance of the <see cref="MeteredBillingApiClient"/> class. /// </summary> /// <param name="sdkSettings">The SDK settings.</param> /// <param name="logger">The logger.</param> public MeteredBillingApiService(IMarketplaceMeteringClient meteringClient, SaaSApiClientConfiguration sdkSettings, ILogger logger) : base(logger) { this.meteringClient = meteringClient; this.ClientConfiguration = sdkSettings; this.Logger = logger; }