Example #1
0
        /// <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}");
            }
        }
Example #3
0
        /// <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;
 }
Example #5
0
        /// <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);
        }
Example #6
0
        /// <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);
        }
Example #7
0
        /// <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)
 {
 }
Example #10
0
 /// <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;
 }
Example #11
0
 /// <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)
 {
 }
Example #12
0
 /// <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;
 }
Example #13
0
 /// <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;
 }