using Data; using Microsoft.AspNetCore.Authorization; using Services.Implemnetation; using Services.Interaces; using Web.Authorization; using Web.Extesions; using Web.ViewComponents; var builder = WebApplication.CreateBuilder(args); // Add services to the container. builder.Services.AddControllersWithViews(); builder.Services.AddHttpClient(); var config = builder.Configuration; //builder.Services.AddDbContext(options => //{ // options.UseSqlServer(config.GetConnectionString("SurveyVista"), cfg => cfg.MigrationsAssembly("Web")); //}); builder.Services.AddRazorPages(); builder.Services.ConfigureSQLConnection(config); builder.Services.ConfigurePageServices(); builder.Services.ConfigureBannerServices(); builder.Services.ConfigureAddress(); builder.Services.ConfigureSocialMedia(); builder.Services.ConfigureFooter(); builder.Services.ConfigureQuestionnarie(); builder.Services.ConfigureQuestion(); builder.Services.AddScoped(); builder.Services.AddTransient(); builder.Services.ConfigureNewsLetter(); builder.Services.MailConfiguration(); builder.Services.MailStatConfiguration(); builder.Services.ConfigureDashboard(); builder.Services.UserResponseConfiguration(); builder.Services.ConfigureOpenAI(config); builder.Services.AddSignalR(); builder.Services.ConfigureAIAnalysis(); // Add permission-based authorization builder.Services.AddSingleton(); builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddCors(options => { options.AddPolicy("AllowSeoSoft", policy => { policy.WithOrigins("https://seosoft.dk", "https://unabused-terina-wavier.ngrok-free.dev") .AllowAnyMethod() .AllowAnyHeader(); }); }); builder.Services.ConfigureApplicationCookie(options => { options.AccessDeniedPath = "/Admin/AccessDenied/Index"; options.Events.OnRedirectToAccessDenied = context => { // For AJAX requests, return 403 if (context.Request.Headers["X-Requested-With"] == "XMLHttpRequest" || context.Request.Headers["Accept"].ToString().Contains("application/json")) { context.Response.StatusCode = 403; return Task.CompletedTask; } // For normal requests, redirect back with ?accessDenied=true var returnUrl = context.Request.Path + context.Request.QueryString; var referer = context.Request.Headers["Referer"].ToString(); var redirectUrl = !string.IsNullOrEmpty(referer) ? referer : "/admin"; if (!redirectUrl.Contains("accessDenied=true")) { redirectUrl += (redirectUrl.Contains("?") ? "&" : "?") + "accessDenied=true"; } context.Response.Redirect(redirectUrl); return Task.CompletedTask; }; }); var app = builder.Build(); // Configure the HTTP request pipeline. if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Home/Error"); // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.UseAuthentication(); app.UseAuthorization(); app.MapRazorPages(); app.MapControllers(); app.UseCors("AllowSeoSoft"); app.MapControllerRoute( name: "page", pattern: "{slug}", defaults: new { Controller = "Home", Action = "Index" }); app.Use(async (context, next) => { context.Request.EnableBuffering(); // Enable buffering for reading request body multiple times await next.Invoke(); }); app.MapAreaControllerRoute( name: "MyAdminArea", areaName:"admin", pattern: "admin/{controller=Home}/{action=Index}/{id?}"); app.MapControllerRoute( name: "default", pattern:"{controller=Home}/{action=Index}/{id?}"); app.MapHub("/notificationHub"); app.Run();