143 lines
3.7 KiB
C#
143 lines
3.7 KiB
C#
|
using Microsoft.AspNetCore.HttpOverrides;
|
||
|
using Microsoft.Extensions.Options;
|
||
|
|
||
|
using MongoDB.Driver;
|
||
|
using MongoDB.Entities;
|
||
|
|
||
|
using Serilog;
|
||
|
|
||
|
using SocialPub.Data;
|
||
|
using SocialPub.Extensions;
|
||
|
using SocialPub.Middleware;
|
||
|
using SocialPub.Models;
|
||
|
using SocialPub.Models.Data;
|
||
|
using SocialPub.Services;
|
||
|
using SocialPub.StaticServices;
|
||
|
|
||
|
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
|
||
|
{
|
||
|
builder.Services.socialPubAppSettingsConfiguration(builder.Configuration)
|
||
|
.socialPubWorkersConfiguration()
|
||
|
.socialPubAuthServicesConfiguration(builder.Configuration)
|
||
|
.socialPubInternalizationConfiguration(builder.Configuration)
|
||
|
.socialPubOptimizationConfiguration()
|
||
|
.socialPubDataBaseConfiguration()
|
||
|
.socialPubServicesConfiguration()
|
||
|
.socialPubHTTPSignature(builder.Configuration)
|
||
|
.socialPubCORSConfiguration()
|
||
|
.socialPubMiddlewareConfiguration();
|
||
|
}
|
||
|
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));
|
||
|
DB.DatabaseFor<socialpub>(mongoSettings.LogsDatabase);
|
||
|
}
|
||
|
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)}()");
|
||
|
}
|
||
|
|