using Microsoft.AspNetCore.Authentication.JwtBearer; using Microsoft.AspNetCore.Http.Features; using Microsoft.IdentityModel.Tokens; using Microsoft.OpenApi.Models; using System.Text; using AyCode.Core.Loggers; using TIAM.Core.Loggers; using TIAM.Database; using TIAM.Database.DataLayers.Admins; using TIAM.Database.DataLayers.Auctions; using TIAM.Database.DataLayers.TransferDestinations; using TIAM.Database.DataLayers.Users; using TIAM.Entities.Emails; using TIAM.Services.Server; using TIAMWebApp.Server.Controllers; using TIAMWebApp.Server.Services; using Microsoft.AspNetCore.Server.Kestrel.Core; using Microsoft.AspNetCore.ResponseCompression; using System.IO.Compression; using Microsoft.AspNetCore.Components.WebAssembly.Hosting; var builder = WebApplication.CreateBuilder(args); const string myAllowSpecificOrigins = "_myAllowSpecificOrigins"; // Add services to the container. builder.Services.AddControllersWithViews(); builder.Services.AddRazorPages(); builder.Services.AddServerSideBlazor(); builder.Services.AddSingleton(); builder.Services.AddSingleton(); builder.Services.AddSingleton(); builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddSingleton(); builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddSignalR(options => options.MaximumReceiveMessageSize = 128 * 1024);//.AddMessagePackProtocol(options => options.SerializerOptions = MessagePackSerializerOptions.Standard.WithSecurity(MessagePackSecurity.UntrustedData)); builder.Services.AddCors(options => { options.AddPolicy(myAllowSpecificOrigins, policy => { policy.AllowAnyOrigin(); }); }); builder.Services.AddSwaggerGen(swagger => { swagger.SwaggerDoc("v1", new OpenApiInfo { Title = "API Title", Version = "V1", Description = "API Description" }); var securitySchema = new OpenApiSecurityScheme { Description = "Authorization header using the Bearer scheme. Example \"Authorization: Bearer {token}\"", Name = "Authorization", In = ParameterLocation.Header, Type = SecuritySchemeType.Http, Scheme = "Bearer", Reference = new OpenApiReference { Type = ReferenceType.SecurityScheme, Id = "Bearer" } }; swagger.AddSecurityDefinition(securitySchema.Reference.Id, securitySchema); swagger.AddSecurityRequirement(new OpenApiSecurityRequirement { { securitySchema, Array.Empty() } }); }); builder.Services.AddAuthentication(options => { options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme; options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme; }).AddJwtBearer(options => { var key = Encoding.UTF8.GetBytes(builder.Configuration["JWT:Key"]); options.SaveToken = true; options.TokenValidationParameters = new TokenValidationParameters { ValidateIssuer = true, ValidateAudience = true, ValidateLifetime = true, ValidateIssuerSigningKey = true, ValidIssuer = builder.Configuration["JWT:Issuer"], ValidAudience = builder.Configuration["JWT:Audience"], IssuerSigningKey = new SymmetricSecurityKey(key), ClockSkew = TimeSpan.Zero }; }); builder.Services.Configure(options => { options.MultipartBodyLengthLimit = 200000000; // Increase the limit to 200MB }); builder.Services.AddHttpClient(client => { //ApiKey: sup_sk_0rt9IFrMpE9qA6328vqMwCtiCntRXZxGR client.BaseAddress = new Uri("https://api.sumup.com/"); }); builder.Services.AddTransient(provider => new SumupService( provider.GetRequiredService(), //"your-client-id", //"your-client-secret" "cc_classic_FHVxlhLMqFfX3ZqBe5GW4gEhySnuq", "cc_sk_classic_SDxnPImsFMmw0ApNk2KlmFwqgHN29FClMvH3op3Kkus6Zn5Ge3", provider.GetRequiredService>() )); builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.ConfigureApplicationCookie(options => { options.Cookie.HttpOnly = false; options.ExpireTimeSpan = TimeSpan.FromMinutes(5); options.LoginPath = "/Login"; options.SlidingExpiration = true; }); builder.WebHost.ConfigureKestrel((context, options) => { options.ListenAnyIP(7116, listenOptions => { listenOptions.Protocols = HttpProtocols.Http1AndHttp2AndHttp3; listenOptions.UseHttps(); }); }); builder.Services.AddResponseCompression(options => { options.EnableForHttps = true; options.MimeTypes = ResponseCompressionDefaults.MimeTypes.Concat(new[] { "application/octet-stream" }); options.Providers.Add(); options.Providers.Add(); }); builder.Services.Configure(options => options.Level = CompressionLevel.Optimal); builder.Services.Configure(options => options.Level = CompressionLevel.Optimal); //builder.Services.AddSingleton(sp => (sp.GetRequiredService() as IWebHostEnvironment)!); var app = builder.Build(); // Configure the HTTP request pipeline. if (app.Environment.IsDevelopment()) { app.UseWebAssemblyDebugging(); } else { app.UseExceptionHandler("/Error"); app.UseHsts(); } //if (!app.Environment.IsDevelopment()) { app.UseResponseCompression(); } app.UseSwagger(); app.UseSwaggerUI(c => { c.SwaggerEndpoint("/swagger/v1/swagger.json", "v1"); }); app.UseBlazorFrameworkFiles(); app.UseStaticFiles(); app.UseAuthentication(); app.UseRouting(); app.UseCors(myAllowSpecificOrigins); app.UseAuthorization(); app.MapRazorPages(); app.MapControllers(); app.MapBlazorHub(); app.MapHub("/TiamChatHub"); app.MapHub("/TiamLoggerHub"); app.MapHub("/DevAdminHub"); app.MapHub("/gamehub"); app.MapFallbackToFile("index.html"); app.Run();