using System; using System.IO; using System.Linq; using xTagService.DI; using System.Net.Http; using xAiApi.Database; using xHttpService.DI; using xPushService.DI; using xFileService.DI; using xDataService.DI; using Newtonsoft.Json; using System.Reflection; using xAiApi.Extensions; using xStringService.DI; using xStorageService.DI; using xIdentityService.DI; using xDataService.Models; using xCommons.Extensions; using xCommons.Configurations; using System.Collections.Generic; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Hosting; using Newtonsoft.Json.Serialization; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using IdentityModel.AspNetCore.OAuth2Introspection; using xPushService.Helpers; namespace xAiApi { public class Startup { // #region Props ... public IConfiguration Configuration { get; } private readonly List databases; private readonly XAiApiDatabaseDescriptor apiDatabaseDescriptor; #endregion // #region Constructor(s) ... public Startup(IConfiguration configuration) { // Configuration = configuration; // // Create an Api Descriptor Class Instance ... apiDatabaseDescriptor = new XAiApiDatabaseDescriptor(); databases = new List { apiDatabaseDescriptor }; } #endregion public void ConfigureServices(IServiceCollection services) { // // Register Validation Provider and all XCommons Module Services ... services.AddXCommons(); // // Register App Configuration ... services.AddXAppConfiguration(Configuration); var appConfiguration = services.GetRegisteredService(); // // Register Allowed Origins ... services.AddXCors(appConfiguration.AllowedOrigins); // // Register Swagger ... var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml"; var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile); services.AddXSwagger(Configuration, xmlFilePath: xmlPath); // // Register HttpService ... services.AddXHttpService(Configuration); // // Add Api V1 Versioning ... services.AddXApiV1Versioning(); // // OAuthIntrospectin Http Client Handler ... // this is for handling SSLErrors ... services.AddHttpClient(OAuth2IntrospectionDefaults.BackChannelHttpClientName) .ConfigurePrimaryHttpMessageHandler(() => { return new HttpClientHandler { ServerCertificateCustomValidationCallback = (sender, certificate, chain, sslPolicyErrors) => true }; }); // // Register Authorizations ... services.AddXAuthorization(); // services.AddControllers() .AddNewtonsoftJson(x => { x.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore; x.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver(); }); // var lifeTime = ServiceLifetime.Scoped; var repositoryType = xDataService.Constants.XRepositoryType.EF; // // Register XIdentity Service ... services.AddXIdentityService( lifeTime: lifeTime, configuration: Configuration ); // // Storage Service ... services.AddXStorageService(Configuration); // // Push Service ... services.AddXPushService( lifeTime: lifeTime, config: Configuration ); // // Preparing DataBases ... if (databases.HasChild()) { // databases .ToList() .ForEach(database => { // // Register DataBase ... services.AddXDatabase( lifeTime: lifeTime, descriptor: database, configuration: Configuration ); }); } // // Register String Service ... services.AddXStringService( lifeTime: lifeTime, repositoryType: repositoryType ); // // Register Tag Service ... services.AddXTagService( lifeTime: lifeTime, repositoryType: repositoryType ); // // Register File Service ... services.AddXFileService( lifeTime: lifeTime, repositoryType: repositoryType ); } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { // // Configure the HTTP request pipeline. var isDevelopmentEnvironment = false; if (env.IsDevelopment()) { isDevelopmentEnvironment = true; app.UseDeveloperExceptionPage(); } // // Use Swagger Middleware ... app.UseXSwagger(); // // Force Https Redirection ... app.UseHttpsRedirection(); // // Using Cors ... app.UseXCors(); // // Using Routing ... app.UseRouting(); // // Use xIdentityService ... app.UseXIdentityService(); // // Use Authorization ... app.UseAuthorization(); // app.UseEndpoints(endpoints => { endpoints.MapControllers(); }); // // Use Storage Service ... app.UseXStorageService(); // // Use PushService ... var pushHelper = new XPushServiceHelper(); app.UseXPushService(pushHelper); // // Using DataBase ... if (databases.HasChild()) { // databases .ToList() .ForEach(database => { // app.UseXDatabase( descriptor: database, isDevelopmentEnvironment: isDevelopmentEnvironment ); }); } // // Using String Service ... app.UseXStringService( isDevelopmentEnvironment: isDevelopmentEnvironment ); // // Using XTag Service ... app.UseXTagService( isDevelopmentEnvironment: isDevelopmentEnvironment ); // // Using File Service ... app.UseXFileService( isDevelopmentEnvironment: isDevelopmentEnvironment ); } } }