diff --git a/Program.cs b/Program.cs index e547be6..c2501c8 100644 --- a/Program.cs +++ b/Program.cs @@ -5,10 +5,17 @@ using Microsoft.EntityFrameworkCore; using Microsoft.AspNetCore.Authentication.JwtBearer; using Microsoft.IdentityModel.Tokens; using Microsoft.AspNetCore.SignalR; + +using Microsoft.Extensions.DependencyInjection; +using System.Net.Http; +using System.Security.Cryptography.X509Certificates; +using System.Text.Json; + using AcaMate.Common.Models; using AcaMate.V1.Services; using AcaMate.Common.Data; using AcaMate.V1.Controllers; +using AcaMate.V1.Models; var builder = WebApplication.CreateBuilder(args); @@ -71,6 +78,37 @@ builder.Services.AddAuthentication(options => }); // JWT 설정부 끝 +// PUSH 설정부 +// 설정 바인딩 (appsettings.json의 "ApnsPushService" 섹션) +builder.Services.Configure(builder.Configuration.GetSection("PushFileSetting")); + +// HttpClientFactory를 이용한 ApnsPushService 등록 (핸들러에 인증서 추가) +builder.Services.AddHttpClient(client => + { + var settings = builder.Configuration.GetSection("PushFileSetting").Get(); + client.BaseAddress = new Uri(settings.uri); + client.Timeout = TimeSpan.FromSeconds(60); + }) + .ConfigurePrimaryHttpMessageHandler(() => + { + var config = builder.Configuration.GetSection("PushFileSetting").Get(); + var handler = new HttpClientHandler(); + // using var reader = new StreamReader(config.p12PWPath, new UTF8Encoding(false)); + // var json = reader.ReadToEndAsync(); + // p12PWPath 파일에서 비밀번호 읽어오기 (예시: JSON {"Password": "비밀번호"}) + var json = File.ReadAllText(config.p12PWPath); + var keys = JsonSerializer.Deserialize>(json); + var certificate = new X509Certificate2(config.p12Path, keys["Password"]); + handler.ClientCertificates.Add(certificate); + handler.SslProtocols = System.Security.Authentication.SslProtocols.Tls12; + return handler; + }); + +// InMemoryPushQueue와 백그라운드 서비스 등록 +builder.Services.AddSingleton(); +builder.Services.AddHostedService(); +// PUSH 설정부 끝 + builder.Services.AddControllers(); // 여기다가 API 있는 컨트롤러들 AddScoped 하면 되는건가? @@ -114,7 +152,7 @@ else // 로컬 테스트 위한 부분 (올릴때는 꺼두기) -builder.WebHost.UseUrls("http://0.0.0.0:5144"); +// builder.WebHost.UseUrls("http://0.0.0.0:5144"); ///// ===== builder 설정 부 ===== ///// @@ -134,7 +172,7 @@ else } // 로컬 테스트 위한 부분 (올릴떄는 켜두기) -// app.UseHttpsRedirection(); +app.UseHttpsRedirection(); app.UseRouting(); // app.MapControllers();