-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathProgram.cs
128 lines (111 loc) · 3.65 KB
/
Program.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.IdentityModel.Tokens;
using System.Text;
using IHSA_Backend.Services;
using IHSA_Backend.Collections;
using IHSA_Backend.Mapping;
using IHSA_Backend.BLL;
using IHSA_Backend.Filters;
using IHSA_Backend.Helpers;
using Microsoft.OpenApi.Models;
using IHSA_Backend.Middleware;
var builder = WebApplication.CreateBuilder(args);
var appSettings = new AppSettings(builder.Configuration);
{
// Add services to the container.
var services = builder.Services;
services.AddControllers();
services.AddAutoMapper(typeof(Program));
// Swagger
services.AddEndpointsApiExplorer();
services.AddSwaggerGen(c =>
{
c.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme
{
In = ParameterLocation.Header,
Description = "Please insert JWT with Bearer into field",
Name = "Authorization",
Type = SecuritySchemeType.ApiKey
});
c.AddSecurityRequirement(new OpenApiSecurityRequirement
{
{
new OpenApiSecurityScheme
{
Reference = new OpenApiReference
{
Type = ReferenceType.SecurityScheme,
Id = "Bearer"
}
},
new string[] { }
}
});
});
services.AddSingleton<IAppSettings>(appSettings);
services.AddSingleton<IFirestore, Firestore>();
// Collections
services.AddSingleton<IRiderCollection, RiderCollection>();
services.AddSingleton<ISchoolCollection, SchoolCollection>();
services.AddSingleton<IEventCollection, EventCollection>();
services.AddSingleton<IUserCollection, UserCollection>();
// Request Handlers (BLL)
services.AddSingleton<ISchoolRequestHandler, SchoolRequestHandler>();
services.AddSingleton<IEventRequestHandler, EventRequestHandler>();
services.AddSingleton<IRiderRequestHandler, RiderRequestHandler>();
services.AddSingleton<IAdminCollection, AdminCollection>();
services.AddSingleton<IAuthRequestHandler, AuthRequestHandler>();
services.AddSingleton<IAdminRequestHandler, AdminRequestHandler>();
services.AddSingleton<IUserRequestHandler, UserRequestHandler>();
// JWT
services.AddSingleton<IJWTUtils, JWTUtils>();
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
{
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuerSigningKey = true,
ValidIssuer = appSettings.JWTIssuer,
ValidAudience = appSettings.JWTAudience,
IssuerSigningKey = new SymmetricSecurityKey(
Encoding.UTF8.GetBytes(appSettings.JWTSecret))
};
});
services.AddAuthorization();
// CORS
services.AddCors(options =>
{
options.AddDefaultPolicy(
builder =>
{
builder
.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader();
}
);
});
// Filters
services.AddControllers(options =>
{
options.Filters.Add<HttpResponseExceptionFilter>();
});
}
// Application Configuration
var app = builder.Build();
{
// Swagger
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
app.UseCors();
app.UseHttpsRedirection();
// JWT
app.UseAuthentication();
app.UseAuthorization();
app.UseMiddleware<JWTMiddleware>();
app.MapControllers();
}
app.Run();