| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- using Microsoft.AspNetCore.Authentication.JwtBearer;
- using Microsoft.IdentityModel.Tokens;
- using RunnersMeet.Server.Persistence;
- namespace RunnersMeet.Server;
- public class AppServer
- {
- public void Start(string[] args)
- {
- var builder = WebApplication.CreateBuilder(args);
- ConfigureServices(builder.Services, builder.Configuration);
- builder.Services.AddControllers().AddJsonOptions(options =>
- {
- options.JsonSerializerOptions.Converters.Add(new ObjectIdConverter());
- });
- // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
- builder.Services.AddEndpointsApiExplorer();
- builder.Services.AddSwaggerGen();
- builder.Services.AddCors(options =>
- {
- options.AddDefaultPolicy(policy =>
- {
- policy.WithOrigins("http://localhost:4200");
- policy.WithHeaders("Authorization");
- });
- });
- var authOptions = new AuthOptions();
- builder.Configuration.GetSection("Auth").Bind(authOptions);
- builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
- .AddJwtBearer(options =>
- {
- options.Authority = authOptions.Authority;
- options.TokenValidationParameters = new TokenValidationParameters
- {
- ValidIssuer = authOptions.Authority,
- ValidAudience = authOptions.Audience
- };
- });
- builder.Services.AddAuthorization(authorizationOptions =>
- {
- foreach (var policyPair in authOptions.PolicyClaims)
- {
- authorizationOptions.AddPolicy(policyPair.Key, policyBuilder => policyBuilder.RequireClaim("permissions", policyPair.Value));
- }
- });
- var app = builder.Build();
- // Configure the HTTP request pipeline.
- if (app.Environment.IsDevelopment())
- {
- app.UseSwagger();
- app.UseSwaggerUI();
- }
- app.UseHttpsRedirection();
- app.UseCors();
- app.UseAuthorization();
- app.MapControllers();
- app.Run();
- }
- private void ConfigureServices(IServiceCollection services, IConfigurationRoot config)
- {
- services.AddSingleton<IDatabase, Database>();
- services.AddSingleton<IFileStorage, FileStorage>();
- services.AddScoped<QueryFactory, QueryFactory>();
- services.Configure<PersistenceOptions>(config.GetSection(PersistenceOptions.Persistence));
- services.AddTransient<IPersistenceOptions, PersistenceOptionsAccessor>();
- }
- }
|