// (c) Copyright Ascensio System SIA 2010-2022 // // This program is a free software product. // You can redistribute it and/or modify it under the terms // of the GNU Affero General Public License (AGPL) version 3 as published by the Free Software // Foundation. In accordance with Section 7(a) of the GNU AGPL its Section 15 shall be amended // to the effect that Ascensio System SIA expressly excludes the warranty of non-infringement of // any third-party rights. // // This program is distributed WITHOUT ANY WARRANTY, without even the implied warranty // of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For details, see // the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html // // You can contact Ascensio System SIA at Lubanas st. 125a-25, Riga, Latvia, EU, LV-1021. // // The interactive user interfaces in modified source and object code versions of the Program must // display Appropriate Legal Notices, as required under Section 5 of the GNU AGPL version 3. // // Pursuant to Section 7(b) of the License you must retain the original Product logo when // distributing the program. Pursuant to Section 7(e) we decline to grant you any rights under // trademark law for use of our trademarks. // // All the Product's GUI elements, including illustrations and icon sets, as well as technical writing // content are licensed under the terms of the Creative Commons Attribution-ShareAlike 4.0 // International. See the License terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode namespace ASC.ApiSystem; public class Startup { private const string CustomCorsPolicyName = "Basic"; private readonly IConfiguration _configuration; private readonly IHostEnvironment _hostEnvironment; private readonly DIHelper _diHelper; private readonly string _corsOrigin; public Startup(IConfiguration configuration, IHostEnvironment hostEnvironment) { _configuration = configuration; _hostEnvironment = hostEnvironment; _diHelper = new DIHelper(); _corsOrigin = _configuration["core:cors"]; } public void ConfigureServices(IServiceCollection services) { services.AddCustomHealthCheck(_configuration); services.AddHttpContextAccessor(); services.AddMemoryCache(); services.AddHttpClient(); services.AddScoped(); services.AddBaseDbContextPool(); services.AddBaseDbContextPool(); services.AddBaseDbContextPool(); services.AddBaseDbContextPool(); services.AddBaseDbContextPool(); services.AddBaseDbContextPool(); services.AddBaseDbContextPool(); services.AddBaseDbContextPool(); services.AddBaseDbContextPool(); services.AddBaseDbContextPool(); services.AddBaseDbContextPool(); services.AddBaseDbContextPool(); services.AddBaseDbContextPool(); services.AddSession(); _diHelper.Configure(services); Action jsonOptions = options => { options.JsonSerializerOptions.WriteIndented = false; options.JsonSerializerOptions.DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull; options.JsonSerializerOptions.Converters.Add(new ApiDateTimeConverter()); }; services.AddControllers() .AddXmlSerializerFormatters() .AddJsonOptions(jsonOptions); services.AddSingleton(jsonOptions); _diHelper.AddControllers(); _diHelper.TryAdd(); _diHelper.TryAdd(); _diHelper.TryAdd(); _diHelper.TryAdd(); _diHelper.TryAdd(); _diHelper.TryAdd(); _diHelper.TryAdd(); _diHelper.TryAdd(); if (!string.IsNullOrEmpty(_corsOrigin)) { services.AddCors(options => { options.AddPolicy(name: CustomCorsPolicyName, policy => { policy.WithOrigins(_corsOrigin) .SetIsOriginAllowedToAllowWildcardSubdomains() .AllowAnyHeader() .AllowAnyMethod() .AllowCredentials(); }); }); } services.AddDistributedCache(_configuration); services.AddEventBus(_configuration); services.AddDistributedTaskQueue(); services.AddCacheNotify(_configuration); services.RegisterFeature(); _diHelper.TryAdd(typeof(IWebhookPublisher), typeof(WebhookPublisher)); _diHelper.RegisterProducts(_configuration, _hostEnvironment.ContentRootPath); services.AddAutoMapper(BaseStartup.GetAutoMapperProfileAssemblies()); if (!_hostEnvironment.IsDevelopment()) { services.AddStartupTask() .TryAddSingleton(services); } services.AddAuthentication() .AddScheme("auth:allowskip:default", _ => { }) .AddScheme("auth:allowskip:registerportal", _ => { }); } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { app.UseRouting(); if (!string.IsNullOrEmpty(_corsOrigin)) { app.UseCors(CustomCorsPolicyName); } app.UseAuthentication(); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapCustom(); endpoints.MapHealthChecks("/health", new HealthCheckOptions() { Predicate = _ => true, ResponseWriter = UIResponseWriter.WriteHealthCheckUIResponse }); endpoints.MapHealthChecks("/liveness", new HealthCheckOptions { Predicate = r => r.Name.Contains("self") }); }); } }