using AipGateway.API.Application.Modules; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Logging; namespace AipGateway.API.Application.Pipeline.Middlewares { public class ApiValidationMiddleware { private readonly ILogger _log; private readonly RequestDelegate _next; public ApiValidationMiddleware(ILogger logger, RequestDelegate next) { _log = logger; _next = next; _log.LogError("wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww: ApiValidationMiddleware"); } public async Task InvokeAsync(HttpContext context) { _log.LogError("wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww: ApiValidationMiddleware, {0}, {1}", context.Connection.RemoteIpAddress, context.Request.Path); //request.Method == HttpMethod.Get string requestUrl = context.Request.Path; if (requestUrl.Contains(GlobalConstants.API_ENDPOINT)) { using (var reader = new StreamReader(context.Request.Body)) { //var guid = context.Items[GlobalConstants.API_GUID]; //int result = 9; //string errMsg = "API KEY를 찾을 수 없습니다."; //string? ipAddress = context.Connection.RemoteIpAddress?.ToString(); //var requestBody = await reader.ReadToEndAsync(); //var requestModel = JsonConvert.DeserializeObject(requestBody); //if (requestModel != null) //{ // result = ValidationApiKey(requestModel.apiKey, ipAddress, out errMsg); // result = 0; //} await _next(context); await Task.FromResult(Task.CompletedTask); } } else { await _next(context); await Task.FromResult(Task.CompletedTask); } return; } #if false private int ValidationApiKey(string key, string? ipAddress, out string errMsg) { ipAddress = string.IsNullOrEmpty(ipAddress) ? "" : ipAddress; try { if (ContainerService.apiKeyMap.ContainsKey(key)) { LinkedApiKey? apiKey = ContainerService.apiKeyMap[key] as LinkedApiKey; if (apiKey == null) { errMsg = "등록되어 있지 않은 API KEY 입니다."; return 1; // 등록되어 있지 않은 키 정보입니다. } if (DateTime.Compare(apiKey.ExpiredAt, DateTime.Now) < 0) { errMsg = " API KEY 유효기간이 지났습니다."; return 2; // 등록된 키의 유효기간이 지났습니다. } if (apiKey.serverMap.Contains(ipAddress)) { errMsg = "성공."; return 0; // 유효한 키값과 IP Address } errMsg = "등록되어 있지 않은 IP Address에서 호출된 API KEY 입니다."; return 3; // 유효한 키값이나 등록되지 않은 IP Address } else { errMsg = "등록되어 있지 않은 API KEY 입니다."; return 1; // 등록되어 있지 않은 키 정보입니다. } } catch (Exception ex) { _log.LogError("wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww: ApiValidationMiddleware: AFTER {0}", ex.Message); errMsg = ex.Message; return 10; } } #endif } }