91 lines
3.1 KiB
C#
91 lines
3.1 KiB
C#
using OpcUaManager.Services;
|
|
|
|
var builder = WebApplication.CreateBuilder(args);
|
|
|
|
// ── DI 등록 ───────────────────────────────────────────────────────────
|
|
builder.Services.AddSingleton<OpcSessionService>();
|
|
builder.Services.AddSingleton<CertService>();
|
|
builder.Services.AddSingleton<OpcCrawlerService>();
|
|
builder.Services.AddSingleton<DatabaseService>();
|
|
|
|
builder.Services.AddControllers()
|
|
.AddJsonOptions(opt =>
|
|
{
|
|
opt.JsonSerializerOptions.Converters.Add(
|
|
new System.Text.Json.Serialization.JsonStringEnumConverter());
|
|
opt.JsonSerializerOptions.PropertyNamingPolicy =
|
|
System.Text.Json.JsonNamingPolicy.CamelCase;
|
|
});
|
|
|
|
builder.Services.AddEndpointsApiExplorer();
|
|
builder.Services.AddSwaggerGen(opt =>
|
|
{
|
|
opt.SwaggerDoc("v1", new Microsoft.OpenApi.Models.OpenApiInfo
|
|
{
|
|
Title = "OPC UA Manager API",
|
|
Version = "v1",
|
|
Description = "OPC UA 클라이언트 인증서 생성 · 세션 관리 · 노드 탐색 · DB 저장"
|
|
});
|
|
});
|
|
|
|
builder.Services.AddCors(opt =>
|
|
{
|
|
opt.AddDefaultPolicy(policy =>
|
|
policy.AllowAnyOrigin()
|
|
.AllowAnyHeader()
|
|
.AllowAnyMethod());
|
|
});
|
|
|
|
// ── 앱 빌드 ───────────────────────────────────────────────────────────
|
|
var app = builder.Build();
|
|
|
|
// ── 정적 파일: wwwroot 경로를 명시적으로 지정 ─────────────────────────
|
|
// dotnet run 실행 위치와 무관하게 프로젝트 루트의 wwwroot 를 서빙
|
|
var wwwrootPath = Path.Combine(
|
|
builder.Environment.ContentRootPath, "wwwroot");
|
|
|
|
if (!Directory.Exists(wwwrootPath))
|
|
{
|
|
// dotnet run 이 프로젝트 루트가 아닌 곳에서 실행될 경우 대비
|
|
wwwrootPath = Path.Combine(
|
|
AppContext.BaseDirectory, "wwwroot");
|
|
}
|
|
|
|
app.Logger.LogInformation("wwwroot 경로: {Path}", wwwrootPath);
|
|
|
|
app.UseDefaultFiles(new DefaultFilesOptions
|
|
{
|
|
FileProvider = new Microsoft.Extensions.FileProviders.PhysicalFileProvider(wwwrootPath),
|
|
RequestPath = ""
|
|
});
|
|
app.UseStaticFiles(new StaticFileOptions
|
|
{
|
|
FileProvider = new Microsoft.Extensions.FileProviders.PhysicalFileProvider(wwwrootPath),
|
|
RequestPath = ""
|
|
});
|
|
|
|
app.UseSwagger();
|
|
app.UseSwaggerUI(opt =>
|
|
{
|
|
opt.SwaggerEndpoint("/swagger/v1/swagger.json", "OPC UA Manager v1");
|
|
opt.RoutePrefix = "swagger";
|
|
});
|
|
|
|
app.UseCors();
|
|
app.UseAuthorization();
|
|
app.MapControllers();
|
|
|
|
// ── PKI 디렉토리 초기화 ───────────────────────────────────────────────
|
|
foreach (var dir in new[]
|
|
{
|
|
"pki/own/certs", "pki/trusted/certs",
|
|
"pki/issuers/certs", "pki/rejected/certs"
|
|
})
|
|
Directory.CreateDirectory(dir);
|
|
|
|
app.Logger.LogInformation("=== OPC UA Manager 시작 ===");
|
|
app.Logger.LogInformation("Frontend : http://localhost:5000/");
|
|
app.Logger.LogInformation("Swagger : http://localhost:5000/swagger");
|
|
|
|
app.Run();
|