in src/AdminSite/Startup.cs [62:176]
public void ConfigureServices(IServiceCollection services)
{
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"] ?? Guid.Empty.ToString(),
ClientSecret = this.Configuration["SaaSApiConfiguration:ClientSecret"] ?? String.Empty,
FulFillmentAPIBaseURL = this.Configuration["SaaSApiConfiguration:FulFillmentAPIBaseURL"],
MTClientId = this.Configuration["SaaSApiConfiguration:MTClientId"] ?? Guid.Empty.ToString(),
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"] ?? Guid.Empty.ToString(),
IsAdminPortalMultiTenant = this.Configuration["SaaSApiConfiguration:IsAdminPortalMultiTenant"]
};
var knownUsers = new KnownUsersModel()
{
KnownUsers = this.Configuration["KnownUsers"],
};
var creds = new ClientSecretCredential(config.TenantId.ToString(), config.ClientId.ToString(), config.ClientSecret);
var boolMultiTenant = config.IsAdminPortalMultiTenant?.ToLower().Trim() ?? "false";
services
.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = OpenIdConnectDefaults.AuthenticationScheme;
options.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = CookieAuthenticationDefaults.AuthenticationScheme;
})
.AddOpenIdConnect(options =>
{
if (boolMultiTenant == "false")
{
options.Authority = $"{config.AdAuthenticationEndPoint}/{config.TenantId}/v2.0";
}
else
{
options.Authority = $"{config.AdAuthenticationEndPoint}/common/v2.0";
}
options.ClientId = config.MTClientId;
options.ResponseType = OpenIdConnectResponseType.IdToken;
options.CallbackPath = "/Home/Index";
options.SignedOutRedirectUri = config.SignedOutRedirectUri;
options.TokenValidationParameters.NameClaimType = ClaimConstants.CLAIM_SHORT_NAME;
options.TokenValidationParameters.ValidateIssuer = false;
})
.AddCookie(options =>
{
options.ExpireTimeSpan = TimeSpan.FromMinutes(60);
options.Cookie.MaxAge = options.ExpireTimeSpan;
options.SlidingExpiration = true;
});
services
.AddTransient<IClaimsTransformation, CustomClaimsTransformation>()
.AddScoped<ExceptionHandlerAttribute>()
.AddScoped<RequestLoggerActionFilter>()
;
if (!Uri.TryCreate(config.FulFillmentAPIBaseURL, UriKind.Absolute, out var fulfillmentBaseApi))
{
fulfillmentBaseApi = new Uri("https://marketplaceapi.microsoft.com/api");
}
services
.AddSingleton<IFulfillmentApiService>(new FulfillmentApiService(new MarketplaceSaaSClient(fulfillmentBaseApi, creds), config, new FulfillmentApiClientLogger()))
.AddSingleton<IMeteredBillingApiService>(new MeteredBillingApiService(new MarketplaceMeteringClient(creds), config, new SaaSClientLogger<MeteredBillingApiService>()))
.AddSingleton<SaaSApiClientConfiguration>(config)
.AddSingleton<KnownUsersModel>(knownUsers);
// Add the assembly version
services.AddSingleton<IAppVersionService>(new AppVersionService(Assembly.GetExecutingAssembly()?.GetName()?.Version));
services
.AddScoped<ApplicationConfigService>();
services
.AddDbContext<SaasKitContext>(options => options.UseSqlServer(this.Configuration.GetConnectionString("DefaultConnection")));
InitializeRepositoryServices(services);
services.AddDistributedMemoryCache();
services.AddSession(options =>
{
options.IdleTimeout = TimeSpan.FromMinutes(5);
options.Cookie.HttpOnly = true;
options.Cookie.IsEssential = true;
});
services.AddMvc(option => {
option.EnableEndpointRouting = false;
option.Filters.Add(new AutoValidateAntiforgeryTokenAttribute());
});
services.AddControllersWithViews();
services.Configure<CookieTempDataProviderOptions>(options =>
{
options.Cookie.IsEssential = true;
});
services.AddScoped<OffersService>();
}