| 
									
										
										
										
											2023-02-18 08:52:17 +01:00
										 |  |  | using Microsoft.AspNetCore.HttpOverrides; | 
					
						
							|  |  |  | using Microsoft.Extensions.Options; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | using MongoDB.Driver; | 
					
						
							|  |  |  | using MongoDB.Entities; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | using Serilog; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-02-19 00:43:43 +01:00
										 |  |  | using PrivaPub.Data; | 
					
						
							|  |  |  | using PrivaPub.Extensions; | 
					
						
							|  |  |  | using PrivaPub.Middleware; | 
					
						
							|  |  |  | using PrivaPub.Models; | 
					
						
							|  |  |  | using PrivaPub.Models.Data; | 
					
						
							|  |  |  | using PrivaPub.Services; | 
					
						
							|  |  |  | using PrivaPub.StaticServices; | 
					
						
							| 
									
										
										
										
											2023-02-18 08:52:17 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | try | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	var builder = WebApplication.CreateBuilder(args); | 
					
						
							|  |  |  | 	builder.WebHost.ConfigureKestrel(serverOptions => | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		if (builder.Environment.IsProduction()) | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 			serverOptions.ListenLocalhost(6970 | 
					
						
							|  |  |  | 			 //, options => | 
					
						
							|  |  |  | 			 //{ | 
					
						
							|  |  |  | 			 // options.Protocols = HttpProtocols.Http1AndHttp2AndHttp3; | 
					
						
							|  |  |  | 			 //} | 
					
						
							|  |  |  | 			 ); | 
					
						
							|  |  |  | 			serverOptions.UseSystemd(); | 
					
						
							|  |  |  | 			serverOptions.AddServerHeader = false; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	}); | 
					
						
							|  |  |  | 	builder.Host.UseSerilog((context, config) => | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		config.ReadFrom.Configuration(context.Configuration); | 
					
						
							|  |  |  | 	}); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	try | 
					
						
							|  |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2023-02-19 00:43:43 +01:00
										 |  |  | 		builder.Services.PrivaPubAppSettingsConfiguration(builder.Configuration) | 
					
						
							|  |  |  | 			.PrivaPubWorkersConfiguration() | 
					
						
							|  |  |  | 			.PrivaPubAuthServicesConfiguration(builder.Configuration) | 
					
						
							|  |  |  | 			.PrivaPubInternalizationConfiguration(builder.Configuration) | 
					
						
							|  |  |  | 			.PrivaPubOptimizationConfiguration() | 
					
						
							|  |  |  | 			.PrivaPubDataBaseConfiguration() | 
					
						
							|  |  |  | 			.PrivaPubServicesConfiguration() | 
					
						
							|  |  |  | 			.PrivaPubHTTPSignature(builder.Configuration) | 
					
						
							|  |  |  | 			.PrivaPubCORSConfiguration() | 
					
						
							|  |  |  | 			.PrivaPubMiddlewareConfiguration(); | 
					
						
							| 
									
										
										
										
											2023-02-18 08:52:17 +01:00
										 |  |  | 	} | 
					
						
							|  |  |  | 	catch (Exception ex) | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		Log.ForContext<Program>().Fatal(ex, "{0}.{1}()", nameof(Program), "ConfigureServices"); | 
					
						
							|  |  |  | 		throw; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	try | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		var mongoSettings = builder.Configuration.GetSection(nameof(MongoSettings)).Get<MongoSettings>(); | 
					
						
							|  |  |  | 		await DB.InitAsync(mongoSettings.Database, MongoClientSettings.FromConnectionString(mongoSettings.ConnectionString)); | 
					
						
							|  |  |  | 		var logsConnectionString = builder.Configuration.GetLogsConnectionString(); | 
					
						
							|  |  |  | 		await DB.InitAsync(mongoSettings.LogsDatabase, MongoClientSettings.FromConnectionString(logsConnectionString)); | 
					
						
							| 
									
										
										
										
											2023-02-19 00:43:43 +01:00
										 |  |  | 		DB.DatabaseFor<PrivaPub>(mongoSettings.LogsDatabase); | 
					
						
							| 
									
										
										
										
											2023-02-18 08:52:17 +01:00
										 |  |  | 	} | 
					
						
							|  |  |  | 	catch (Exception ex) | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		Log.ForContext<Program>().Fatal(ex, $"{nameof(Program)}.{nameof(Program)}() DB Instantiation"); | 
					
						
							|  |  |  | 		throw; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	var app = default(WebApplication); | 
					
						
							|  |  |  | 	try | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		app = builder.Build(); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	catch (Exception ex) | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		Log.ForContext<Program>().Fatal(ex, "{0}.{1}()", nameof(Program), "Build"); | 
					
						
							|  |  |  | 		throw; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	try | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		var localizationService = app.Services.GetService<RequestLocalizationOptionsService>(); | 
					
						
							|  |  |  | 		if (app.Environment.IsProduction()) | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 			app.UseResponseCompression(); | 
					
						
							|  |  |  | 			app.UseForwardedHeaders(new() | 
					
						
							|  |  |  | 			{ | 
					
						
							|  |  |  | 				ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto | 
					
						
							|  |  |  | 			}); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		else if(app.Environment.IsDevelopment()) | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 			app.UseSwagger(); | 
					
						
							|  |  |  | 			app.UseSwaggerUI(); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		app.UseHttpsRedirection(); | 
					
						
							|  |  |  | 		app.UseCors("DefaultCORS"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		app.UseStaticFiles(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		app.UseRequestLocalization(await localizationService.Get()); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		app.UseRouting(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		app.UseAuthentication(); | 
					
						
							|  |  |  | 		app.UseAuthorization(); | 
					
						
							|  |  |  | 		//app.UseWhen(context => context.Request.Path.StartsWithSegments("/peasants") || | 
					
						
							|  |  |  | 		//		context.Request.Path.StartsWithSegments("/users"), | 
					
						
							|  |  |  | 		//		app => app.UseSignatureVerification().UseDigestVerification()); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		app.MapControllers(); | 
					
						
							|  |  |  | 		//app.MapFallbackToFile("index.html"); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	catch (Exception ex) | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		Log.ForContext<Program>().Fatal(ex, "{0}.{1}()", nameof(Program), "Use"); | 
					
						
							|  |  |  | 		throw; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	Log.ForContext<Program>().Information($"Starting collAnon at {nameof(Program)}()"); | 
					
						
							|  |  |  | 	try | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		var dbClient = app.Services.GetService(typeof(DbEntities)) as DbEntities; | 
					
						
							|  |  |  | 		var passwordHasher = app.Services.GetService(typeof(IPasswordHasher)) as IPasswordHasher; | 
					
						
							|  |  |  | 		await dbClient.Init(passwordHasher); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	catch (Exception ex) | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		Log.ForContext<Program>().Warning(ex, $"{nameof(Program)}.{nameof(Program)}() DB Init"); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	await app.RunAsync(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | catch (Exception ex) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	Log.ForContext<Program>().Fatal(ex, $"{nameof(Program)}.{nameof(Program)}()"); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 |