-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathProgram.cs
More file actions
108 lines (86 loc) · 4.48 KB
/
Copy pathProgram.cs
File metadata and controls
108 lines (86 loc) · 4.48 KB
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
using System.Text;
using Amazon;
using Amazon.S3;
using BlobService.Common.Logger;
using BlobService.Common.Settings;
using BlobService.Middlewares;
using BlobService.Services.Implementations;
using BlobService.Services.Interfaces;
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.Extensions.Logging.Console;
using Microsoft.IdentityModel.Tokens;
var builder = WebApplication.CreateBuilder(args);
// ── Load settings ────────────────────────────────────────────────────────────
// AWS S3
BlobSettings.AwsAccessKey = builder.Configuration.GetValue<string>("AWS:AccessKey");
BlobSettings.AwsSecretKey = builder.Configuration.GetValue<string>("AWS:SecretKey");
BlobSettings.AwsRegion = builder.Configuration.GetValue<string>("AWS:Region");
BlobSettings.AwsBucketName = builder.Configuration.GetValue<string>("AWS:BucketName");
BlobSettings.AwsBucketDir = builder.Configuration.GetValue<string>("AWS:BucketNameDir") ?? $"{BlobSettings.AwsBucketName}/";
// Chat service
BlobSettings.ChatServiceBaseUrl = builder.Configuration.GetValue<string>("ChatService:BaseUrl");
BlobSettings.ChatServiceCallbackPath = builder.Configuration.GetValue<string>("ChatService:CallbackPath");
BlobSettings.InternalServiceKey = builder.Configuration.GetValue<string>("ChatService:InternalKey");
// JWT
AppSettings.JwtIssuer = builder.Configuration.GetValue<string>("Jwt:Issuer");
AppSettings.JwtAudience = builder.Configuration.GetValue<string>("Jwt:Audience");
AppSettings.JwtSecretKey = builder.Configuration.GetValue<string>("Jwt:SecretKey");
// ── AWS S3 ────────────────────────────────────────────────────────────────────
var s3Config = new AmazonS3Config
{
RegionEndpoint = RegionEndpoint.GetBySystemName(BlobSettings.AwsRegion ?? "ap-south-1")
};
builder.Services.AddSingleton<IAmazonS3>(_ =>
new AmazonS3Client(BlobSettings.AwsAccessKey, BlobSettings.AwsSecretKey, s3Config));
// ── CORS ──────────────────────────────────────────────────────────────────────
var allowedOrigins = builder.Configuration.GetSection("Cors:AllowedOrigins").Get<string[]>()
?? Array.Empty<string>();
builder.Services.AddCors(options =>
{
options.AddPolicy("BlobPolicy", policy =>
{
policy.AllowAnyOrigin()
.AllowAnyHeader()
.AllowAnyMethod();
});
});
// ── Services ──────────────────────────────────────────────────────────────────
builder.Services.AddOpenApi();
builder.Services.AddHttpClient("ChatService", client =>
{
client.BaseAddress = new Uri(BlobSettings.ChatServiceBaseUrl!);
client.Timeout = TimeSpan.FromSeconds(30);
});
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
{
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true,
ValidateAudience = true,
ValidateLifetime = true,
ValidateIssuerSigningKey = true,
ValidIssuer = AppSettings.JwtIssuer,
ValidAudience = AppSettings.JwtAudience,
IssuerSigningKey = new SymmetricSecurityKey(
Encoding.UTF8.GetBytes(AppSettings.JwtSecretKey!))
};
});
builder.Logging.ClearProviders();
builder.Logging.AddConsole(options =>
{
options.FormatterName = CustomConsoleLogger.FormatterName;
});
builder.Logging.AddConsoleFormatter<CustomConsoleLogger, ConsoleFormatterOptions>();
builder.Services.AddControllers();
builder.Services.AddScoped<IAuthService, AuthService>();
builder.Services.AddScoped<IS3StorageService, S3StorageService>();
// ── Pipeline ──────────────────────────────────────────────────────────────────
var app = builder.Build();
if (app.Environment.IsDevelopment())
app.MapOpenApi();
app.UseCors("BlobPolicy");
app.UseHttpsRedirection();
app.UseJwtValidation();
app.MapControllers();
app.Run();