using Marco.Pms.DataAccess.Data; using Marco.Pms.Model.Authentication; using Marco.Pms.Model.Utilities; using MarcoBMS.Services.Helpers; using MarcoBMS.Services.Middleware; using MarcoBMS.Services.Service; using Microsoft.AspNetCore.Authentication.JwtBearer; using Microsoft.AspNetCore.Identity; using Microsoft.EntityFrameworkCore; using Microsoft.IdentityModel.Tokens; using Microsoft.OpenApi.Models; using Serilog; using System.Text; Serilog.Debugging.SelfLog.Enable(Console.Error); var builder = WebApplication.CreateBuilder(args); // Add Serilog Configuration builder.Host.UseSerilog((context, config) => { config.ReadFrom.Configuration(context.Configuration); // Taking all configuration from appsetting.json }) ; // Add services //builder.Services.AddCors(options => //{ // options.AddPolicy("DevCorsPolicy", policy => // { // policy.AllowAnyOrigin() // .AllowAnyMethod() // .AllowAnyHeader(); // }); //}); var corsSettings = builder.Configuration.GetSection("Cors"); var allowedOrigins = corsSettings.GetValue("AllowedOrigins")?.Split(','); var allowedMethods = corsSettings.GetValue("AllowedMethods")?.Split(','); var allowedHeaders = corsSettings.GetValue("AllowedHeaders")?.Split(','); builder.Services.AddCors(options => { options.AddPolicy("Policy", policy => { if (allowedOrigins != null) { policy.WithOrigins(allowedOrigins) .WithMethods(allowedMethods) .WithHeaders(allowedHeaders); } }); }); // Add services to the container. builder.Services.AddControllers(); // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); builder.Services.AddSwaggerGen(option => { option.SwaggerDoc("v1", new OpenApiInfo { Title = "Demo API", Version = "v1" }); option.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme { In = ParameterLocation.Header, Description = "Please enter a valid token", Name = "Authorization", Type = SecuritySchemeType.Http, BearerFormat = "JWT", Scheme = "Bearer" }); option.AddSecurityRequirement(new OpenApiSecurityRequirement { { new OpenApiSecurityScheme { Reference = new OpenApiReference { Type=ReferenceType.SecurityScheme, Id="Bearer" } }, new string[]{} } }); }); builder.Services.Configure(builder.Configuration.GetSection("EmailSettings")); builder.Services.AddTransient(); builder.Services.AddIdentity().AddEntityFrameworkStores().AddDefaultTokenProviders(); string connString = builder.Configuration.GetConnectionString("DefaultConnectionString"); builder.Services.AddDbContext(options => { options.UseMySql(connString, ServerVersion.AutoDetect(connString)); }); builder.Services.AddMemoryCache(); //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.AddSingleton(); builder.Services.AddHttpContextAccessor(); var jwtSettings = builder.Configuration.GetSection("Jwt").Get(); builder.Services.AddAuthentication(options => { options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme; options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme; }) .AddJwtBearer(options => { options.TokenValidationParameters = new TokenValidationParameters { ValidateIssuer = true, ValidateAudience = true, ValidateLifetime = true, ValidateIssuerSigningKey = true, ValidIssuer = jwtSettings.Issuer, ValidAudience = jwtSettings.Audience, IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(jwtSettings.Key)) }; }); builder.Services.AddSingleton(jwtSettings); var app = builder.Build(); // Configure the HTTP request pipeline. if (app.Environment.IsDevelopment()) { app.UseSwagger(); app.UseSwaggerUI(); // Use CORS in the pipeline //app.UseCors("DevCorsPolicy"); } //if (app.Environment.IsProduction()) //{ // app.UseCors("ProdCorsPolicy"); //} app.UseCors("Policy"); app.UseStaticFiles(); // Enables serving static files <<<<<<< HEAD //app.UseSerilogRequestLogging(); // This is Default Serilog Logging Middleware we are not using this because we're using custom logging middleware ======= //app.UseSerilogRequestLogging(); // Log HTTP requests >>>>>>> a4156153ff6618675abf0590395745816019a973 app.UseHttpsRedirection(); app.UseMiddleware(); app.UseMiddleware(); app.UseMiddleware(); app.UseAuthorization(); app.MapControllers(); app.Run();