using Microsoft.EntityFrameworkCore; using DigitalData.UserManager.Application.MappingProfiles; using DigitalData.UserManager.Application.Contracts; using DigitalData.UserManager.Application.Services; using DigitalData.UserManager.Infrastructure.Repositories; using DigitalData.UserManager.Infrastructure.Contracts; using DigitalData.Core.CultureServices; using DigitalData.Core.Application; using Microsoft.AspNetCore.Authentication.Cookies; using NLog.Web; using NLog; using System.DirectoryServices; using System.Runtime.InteropServices; var logger = LogManager.Setup().LoadConfigurationFromAppSettings().GetCurrentClassLogger(); logger.Debug("init main"); try { var builder = WebApplication.CreateBuilder(args); if (builder.Configuration.GetValue("RunAsWindowsService")) builder.Host.UseWindowsService(); builder.Logging.ClearProviders(); builder.Host.UseNLog(); if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) try { using DirectoryEntry rootDSE = new("LDAP://RootDSE"); string defaultNamingContext = rootDSE.Properties["defaultNamingContext"]?.Value?.ToString() ?? "NULL"; string ldapPath = $"LDAP://{defaultNamingContext}"; logger.Info($"Local LDAP Path: {ldapPath}"); } catch (Exception exception) { logger.Warn(exception, "Local LDAP Path cannot found."); } else logger.Warn("Directory service will not operate because the operating system is not Windows."); builder.Services.AddControllers(); if (builder.Configuration.GetValue("UseSwagger")) { builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); } builder.Services.AddControllers(); builder.Services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme) .AddCookie(options => { options.Cookie.HttpOnly = true; //options.Cookie.SecurePolicy = CookieSecurePolicy.Always; //always https options.Cookie.SameSite = SameSiteMode.None; // allows Cross-site requests options.LoginPath = "/api/auth/login"; options.LogoutPath = "/api/auth/logout"; }); builder.Services.AddDbContext(options => options.UseSqlServer(builder.Configuration.GetConnectionString("DD_ECM_Connection")) .EnableDetailedErrors()); var allowedOrigins = builder.Configuration.GetSection("AllowedOrigins").Get() ?? throw new InvalidOperationException("In appsettings there is no allowed origin."); builder.Services.AddCors(options => { options.AddPolicy(name: "DefaultCorsPolicy", builder => { builder.WithOrigins(allowedOrigins) .AllowAnyMethod() .AllowAnyHeader() .AllowCredentials(); }); }); builder.Services.AddKeyTranslationService(); builder.Services.AddAutoMapper(typeof(UserMappingProfile).Assembly); builder.Services.AddAutoMapper(typeof(GroupMappingProfile).Assembly); builder.Services.AddAutoMapper(typeof(GroupOfUserMappingProfile).Assembly); builder.Services.AddAutoMapper(typeof(ModuleMappingProfile).Assembly); builder.Services.AddAutoMapper(typeof(ModuleOfUserMappingProfile).Assembly); builder.Services.AddAutoMapper(typeof(UserRepMappingProfile).Assembly); builder.Services.AddAutoMapper(typeof(DirectoryMappingProfile).Assembly); builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddDirectoryService(); builder.Services.AddResponseService(); var app = builder.Build(); app.UseCors("DefaultCorsPolicy"); if (builder.Configuration.GetValue("UseSwagger")) { app.UseSwagger(); app.UseSwaggerUI(); } app.UseRouting(); app.UseHttpsRedirection(); app.UseAuthentication(); app.UseAuthorization(); //app.MapControllers(); app.MapDefaultControllerRoute(); app.Run(); } catch (Exception exception) { logger.Error(exception, "Stopped program because of exception"); throw; }