ApiFileController.cs 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508
  1. using Aip.Api.Service.Models.Request;
  2. using Aip.Api.Service.Models.Response;
  3. using Aip.Api.Service.Repositories;
  4. using Aip.Api.Service.Services.Interfaces;
  5. using Aip.Api.Service.Utils;
  6. using Microsoft.AspNetCore.Mvc;
  7. using Swashbuckle.AspNetCore.Annotations;
  8. using System;
  9. using System.ComponentModel.DataAnnotations;
  10. using System.Diagnostics;
  11. namespace Aip.Api.Service.Controllers;
  12. [ApiController]
  13. [Route("/api/v1/file")]
  14. [Produces("application/json")]
  15. public class ApiFileController : BaseController
  16. {
  17. private readonly ILogger<ApiFileController> _log;
  18. private readonly IApiConfigService _configService;
  19. private readonly IApiAuthService _authService;
  20. private readonly IApiFileService _service;
  21. private readonly IAipDbLoggingService _aipDbLoggingService;
  22. public ApiFileController(ILogger<ApiFileController> log, IApiConfigService configService, IApiAuthService authService, IApiFileService apiFileService, IAipDbLoggingService aipDbLoggingService)
  23. {
  24. _log = log;
  25. _configService = configService;
  26. _authService = authService;
  27. _service = apiFileService;
  28. _aipDbLoggingService = aipDbLoggingService;
  29. }
  30. [HttpPost("info")]
  31. [SwaggerResponse(200, type: typeof(ApiResponseModel<ResponseInfo>))]
  32. public async Task<IResult> GetFileInfo([FromBody] RequestFileInfo req)
  33. {
  34. return await CreateResponseAsync(async () =>
  35. {
  36. GlobalConstants.SetAuthorization(HttpContext, GlobalConstants.API_FILE_INFO, req.apiKey, req);
  37. HttpContext.Items[GlobalConstants.API_REQUEST] = (RequestBase)req;
  38. int authError = _authService.CheckApiKeyValidation(HttpContext, req.apiKey, GlobalConstants.API_FILE_INFO);
  39. if (authError != 0)
  40. {
  41. throw ResponseApiKeyValidationError(HttpContext, authError);
  42. }
  43. var response = await _service.GetInfo(req);
  44. return Results.Ok(ResponseSuccess(HttpContext, response));
  45. });
  46. }
  47. [HttpPost("set-label")]
  48. [SwaggerResponse(200, type: typeof(ApiResponseModel<ResponseFile>))]
  49. public async Task<IResult> SetFileLabel([FromBody] RequestFileSet req)
  50. {
  51. return await CreateResponseAsync(async () =>
  52. {
  53. GlobalConstants.SetAuthorization(HttpContext, GlobalConstants.API_FILE_SET_LABEL, req.apiKey, req);
  54. HttpContext.Items[GlobalConstants.API_REQUEST] = (RequestBase)req;
  55. int authError = _authService.CheckApiKeyValidation(HttpContext, req.apiKey, GlobalConstants.API_FILE_SET_LABEL);
  56. if (authError != 0)
  57. {
  58. throw ResponseApiKeyValidationError(HttpContext, authError);
  59. }
  60. var response = await _service.SetLabel(req);
  61. return Results.Ok(ResponseSuccess(HttpContext, response));
  62. });
  63. }
  64. [HttpPost("set-labels")]
  65. [SwaggerResponse(200, type: typeof(ApiResponseModel<List<ResponseFile>>))]
  66. public async Task<IResult> SetFileLabels([FromBody] RequestMultiFileSet req)
  67. {
  68. return await CreateResponseAsync(async () =>
  69. {
  70. var start = Stopwatch.GetTimestamp();
  71. _log.LogInformation("SetFileLabels Request Start: {0} EA.", req.files.Count);
  72. GlobalConstants.SetAuthorization(HttpContext, GlobalConstants.API_FILE_SET_LABELS, req.apiKey, req);
  73. HttpContext.Items[GlobalConstants.API_REQUEST] = (RequestBase)req;
  74. int authError = _authService.CheckApiKeyValidation(HttpContext, req.apiKey, GlobalConstants.API_FILE_SET_LABELS);
  75. if (authError != 0)
  76. {
  77. throw ResponseApiKeyValidationError(HttpContext, authError);
  78. }
  79. DateTime dateTime = DateTime.Now;
  80. string? remoteIpAddr = HttpContext.Connection.RemoteIpAddress?.ToString();
  81. string guid = GlobalConstants.GetApiGuid(HttpContext);
  82. int jobs = req.files.Count;
  83. List<ResponseFile> result = new List<ResponseFile>();
  84. var tasks = new List<Task<ResponseFile>>();
  85. foreach (var obj in req.files)
  86. {
  87. RequestFileSet reqSet = new RequestFileSet
  88. {
  89. apiKey = req.apiKey,
  90. email = req.email,
  91. decryptKey = req.decryptKey,
  92. aipGuid = req.aipGuid,
  93. comment = req.comment,
  94. file = new RequestFile
  95. {
  96. dispFileName = obj.dispFileName,
  97. realFileName = obj.realFileName,
  98. }
  99. };
  100. tasks.Add(_service.SetLabel(reqSet));
  101. }
  102. await Task.WhenAll(tasks);
  103. foreach (var task in tasks)
  104. {
  105. result.Add(task.Result);
  106. #if false
  107. _aipDbLoggingService.Send(new FileJobLog
  108. {
  109. FileId = guid,
  110. ApiGuid = guid,
  111. ApiId = GlobalConstants.API_FILE_SET_LABEL,
  112. ServerIpAddr = remoteIpAddr,
  113. JobResult = task.Result.errorCode,
  114. JobMessage = task.Result.errorMessage,
  115. FileName = task.Result.dispFileName,
  116. FileExt = Path.GetExtension(task.Result.dispFileName),
  117. FileOwner = task.Result.FileOwner,
  118. FileLabelGuid = task.Result.FileLabelGuid,
  119. FileProtectionGuid = task.Result.FileProtectionGuid,
  120. FileSize = task.Result.FileSize,
  121. NewFileName = task.Result.NewFileName,
  122. NewFileExt = Path.GetExtension(task.Result.NewFileName),
  123. NewFileOwner = task.Result.NewFileOwner,
  124. NewFileLabelGuid = task.Result.NewFileLabelGuid,
  125. NewFileProtectionGuid = task.Result.NewFileProtectionGuid,
  126. NewFileSize = task.Result.NewFileSize,
  127. JobOwner = req.email,
  128. ApiKey = req.apiKey,
  129. DecryptKey = req.decryptKey,
  130. JobTime = TimeUtils.GetElapsedMilliseconds(dateTime, task.Result.endDateTime),
  131. TimeStamp = task.Result.endDateTime
  132. });
  133. #endif
  134. }
  135. HttpContext.Items[GlobalConstants.API_RESULT_CODE] = GlobalConstants.API_RESULT_SUCCESS_CODE;
  136. HttpContext.Items[GlobalConstants.API_RESULT_MESSAGE] = GlobalConstants.API_RESULT_SUCCESS;
  137. _log.LogInformation("SetFileLabels Request ..End: {0} EA. {1} ms.", req.files.Count, TimeUtils.GetElapsedMilliseconds(start));
  138. return Results.Ok(new ApiResponseModel<List<ResponseFile>>()
  139. {
  140. success = true,
  141. errorCode = 0,
  142. errorMessage = GlobalConstants.API_RESULT_SUCCESS,
  143. result = result,
  144. });
  145. });
  146. }
  147. [HttpPost("set-labels1")]
  148. [SwaggerResponse(200, type: typeof(ApiResponseModel<List<ResponseFile>>))]
  149. public async Task<IResult> SetFileLabels1([FromBody] RequestMultiFileSet req)
  150. {
  151. return await CreateResponseAsync(async () =>
  152. {
  153. GlobalConstants.SetAuthorization(HttpContext, GlobalConstants.API_FILE_SET_LABELS, req.apiKey, req);
  154. HttpContext.Items[GlobalConstants.API_REQUEST] = (RequestBase)req;
  155. int authError = _authService.CheckApiKeyValidation(HttpContext, req.apiKey, GlobalConstants.API_FILE_SET_LABELS);
  156. if (authError != 0)
  157. {
  158. throw ResponseApiKeyValidationError(HttpContext, authError);
  159. }
  160. // 쓰레드를 모두 한번에 실행
  161. var result = await _service.SetLabels1(req);
  162. HttpContext.Items[GlobalConstants.API_RESULT_CODE] = GlobalConstants.API_RESULT_SUCCESS_CODE;
  163. HttpContext.Items[GlobalConstants.API_RESULT_MESSAGE] = GlobalConstants.API_RESULT_SUCCESS;
  164. return Results.Ok(new ApiResponseModel<List<ResponseFile>>()
  165. {
  166. success = true,
  167. errorCode = 0,
  168. errorMessage = GlobalConstants.API_RESULT_SUCCESS,
  169. result = result,
  170. });
  171. });
  172. }
  173. [HttpPost("set-labels2")]
  174. [SwaggerResponse(200, type: typeof(ApiResponseModel<List<ResponseFile>>))]
  175. public async Task<IResult> SetFileLabels2([FromBody] RequestMultiFileSet req)
  176. {
  177. return await CreateResponseAsync(async () =>
  178. {
  179. GlobalConstants.SetAuthorization(HttpContext, GlobalConstants.API_FILE_SET_LABELS, req.apiKey, req);
  180. HttpContext.Items[GlobalConstants.API_REQUEST] = (RequestBase)req;
  181. int authError = _authService.CheckApiKeyValidation(HttpContext, req.apiKey, GlobalConstants.API_FILE_SET_LABELS);
  182. if (authError != 0)
  183. {
  184. throw ResponseApiKeyValidationError(HttpContext, authError);
  185. }
  186. // 스레드 그룹으로 나누어서
  187. var response = await _service.SetLabels(req);
  188. return Results.Ok(new ApiResponseModel<List<ResponseFile>>()
  189. {
  190. success = true,
  191. errorCode = 0,
  192. errorMessage = GlobalConstants.API_RESULT_SUCCESS,
  193. result = response,
  194. });
  195. });
  196. }
  197. [HttpPost("set-labels3")]
  198. [SwaggerResponse(200, type: typeof(ApiResponseModel<List<ResponseFile>>))]
  199. public async Task<IResult> SetFileLabels3([FromBody] RequestMultiFileSet req)
  200. {
  201. return await CreateResponseAsync(async () =>
  202. {
  203. GlobalConstants.SetAuthorization(HttpContext, GlobalConstants.API_FILE_SET_LABELS, req.apiKey, req);
  204. HttpContext.Items[GlobalConstants.API_REQUEST] = (RequestBase)req;
  205. int authError = _authService.CheckApiKeyValidation(HttpContext, req.apiKey, GlobalConstants.API_FILE_SET_LABELS);
  206. if (authError != 0)
  207. {
  208. throw ResponseApiKeyValidationError(HttpContext, authError);
  209. }
  210. // 단일 쓰레드 방식
  211. var result = await _service.SetLabels3(req);
  212. HttpContext.Items[GlobalConstants.API_RESULT_CODE] = GlobalConstants.API_RESULT_SUCCESS_CODE;
  213. HttpContext.Items[GlobalConstants.API_RESULT_MESSAGE] = GlobalConstants.API_RESULT_SUCCESS;
  214. return Results.Ok(new ApiResponseModel<List<ResponseFile>>()
  215. {
  216. success = true,
  217. errorCode = 0,
  218. errorMessage = GlobalConstants.API_RESULT_SUCCESS,
  219. result = result,
  220. });
  221. });
  222. }
  223. [HttpPost("set-labels4")]
  224. [SwaggerResponse(200, type: typeof(ApiResponseModel<List<ResponseFile>>))]
  225. public async Task<IResult> SetFileLabels4([FromBody] RequestMultiFileSet req)
  226. {
  227. return await CreateResponseAsync(async () =>
  228. {
  229. GlobalConstants.SetAuthorization(HttpContext, GlobalConstants.API_FILE_SET_LABELS, req.apiKey, req);
  230. HttpContext.Items[GlobalConstants.API_REQUEST] = (RequestBase)req;
  231. int authError = _authService.CheckApiKeyValidation(HttpContext, req.apiKey, GlobalConstants.API_FILE_SET_LABELS);
  232. if (authError != 0)
  233. {
  234. throw ResponseApiKeyValidationError(HttpContext, authError);
  235. }
  236. // 단일 쓰레드 방식
  237. var result = await _service.SetLabels4(req);
  238. HttpContext.Items[GlobalConstants.API_RESULT_CODE] = GlobalConstants.API_RESULT_SUCCESS_CODE;
  239. HttpContext.Items[GlobalConstants.API_RESULT_MESSAGE] = GlobalConstants.API_RESULT_SUCCESS;
  240. return Results.Ok(new ApiResponseModel<List<ResponseFile>>()
  241. {
  242. success = true,
  243. errorCode = 0,
  244. errorMessage = GlobalConstants.API_RESULT_SUCCESS,
  245. result = result,
  246. });
  247. });
  248. }
  249. [HttpPost("delete-label")]
  250. [SwaggerResponse(200, type: typeof(ApiResponseModel<ResponseFile>))]
  251. public async Task<IResult> DelFileLabel([FromBody] RequestFileDel req)
  252. {
  253. return await CreateResponseAsync(async () =>
  254. {
  255. GlobalConstants.SetAuthorization(HttpContext, GlobalConstants.API_FILE_DELETE_LABEL, req.apiKey, req);
  256. HttpContext.Items[GlobalConstants.API_REQUEST] = (RequestBase)req;
  257. int authError = _authService.CheckApiKeyValidation(HttpContext, req.apiKey, GlobalConstants.API_FILE_DELETE_LABEL);
  258. if (authError != 0)
  259. {
  260. throw ResponseApiKeyValidationError(HttpContext, authError);
  261. }
  262. var response = await _service.DelLabel(req);
  263. return Results.Ok(ResponseSuccess(HttpContext, response));
  264. });
  265. }
  266. [HttpPost("delete-labels")]
  267. [SwaggerResponse(200, type: typeof(ApiResponseModel<ResponseFile>))]
  268. public async Task<IResult> DelFileLabels([FromBody] RequestMultiFileDel req)
  269. {
  270. return await CreateResponseAsync(async () =>
  271. {
  272. var start = Stopwatch.GetTimestamp();
  273. _log.LogInformation("DelFileLabels Request Start: {0} EA.", req.files.Count);
  274. GlobalConstants.SetAuthorization(HttpContext, GlobalConstants.API_FILE_DELETE_LABELS, req.apiKey, req);
  275. HttpContext.Items[GlobalConstants.API_REQUEST] = (RequestBase)req;
  276. int authError = _authService.CheckApiKeyValidation(HttpContext, req.apiKey, GlobalConstants.API_FILE_DELETE_LABELS);
  277. if (authError != 0)
  278. {
  279. throw ResponseApiKeyValidationError(HttpContext, authError);
  280. }
  281. DateTime dateTime = DateTime.Now;
  282. string? remoteIpAddr = HttpContext.Connection.RemoteIpAddress?.ToString();
  283. string guid = GlobalConstants.GetApiGuid(HttpContext);
  284. int jobs = req.files.Count;
  285. List<ResponseFile> result = new List<ResponseFile>();
  286. var tasks = new List<Task<ResponseFile>>();
  287. foreach (var obj in req.files)
  288. {
  289. RequestFileDel reqSet = new RequestFileDel
  290. {
  291. apiKey = req.apiKey,
  292. email = req.email,
  293. decryptKey = req.decryptKey,
  294. comment = req.comment,
  295. file = new RequestFile
  296. {
  297. dispFileName = obj.dispFileName,
  298. realFileName = obj.realFileName,
  299. }
  300. };
  301. tasks.Add(_service.DelLabel(reqSet));
  302. }
  303. await Task.WhenAll(tasks);
  304. foreach (var task in tasks)
  305. {
  306. result.Add(task.Result);
  307. #if false
  308. _aipDbLoggingService.Send(new FileJobLog
  309. {
  310. FileId = guid,
  311. ApiGuid = guid,
  312. ApiId = GlobalConstants.API_FILE_DELETE_LABEL,
  313. ServerIpAddr = remoteIpAddr,
  314. JobResult = task.Result.errorCode,
  315. JobMessage = task.Result.errorMessage,
  316. FileName = task.Result.dispFileName,
  317. FileExt = Path.GetExtension(task.Result.dispFileName),
  318. FileOwner = task.Result.FileOwner,
  319. FileLabelGuid = task.Result.FileLabelGuid,
  320. FileProtectionGuid = task.Result.FileProtectionGuid,
  321. FileSize = task.Result.FileSize,
  322. NewFileName = task.Result.NewFileName,
  323. NewFileExt = Path.GetExtension(task.Result.NewFileName),
  324. NewFileOwner = task.Result.NewFileOwner,
  325. NewFileLabelGuid = task.Result.NewFileLabelGuid,
  326. NewFileProtectionGuid = task.Result.NewFileProtectionGuid,
  327. NewFileSize = task.Result.NewFileSize,
  328. JobOwner = req.email,
  329. ApiKey = req.apiKey,
  330. DecryptKey = req.decryptKey,
  331. JobTime = TimeUtils.GetElapsedMilliseconds(dateTime, task.Result.endDateTime),
  332. TimeStamp = task.Result.endDateTime
  333. });
  334. #endif
  335. }
  336. HttpContext.Items[GlobalConstants.API_RESULT_CODE] = GlobalConstants.API_RESULT_SUCCESS_CODE;
  337. HttpContext.Items[GlobalConstants.API_RESULT_MESSAGE] = GlobalConstants.API_RESULT_SUCCESS;
  338. _log.LogInformation("DelFileLabels Request ..End: {0} EA. {1} ms.", req.files.Count, TimeUtils.GetElapsedMilliseconds(start));
  339. return Results.Ok(new ApiResponseModel<List<ResponseFile>>()
  340. {
  341. success = true,
  342. errorCode = 0,
  343. errorMessage = GlobalConstants.API_RESULT_SUCCESS,
  344. result = result,
  345. });
  346. });
  347. }
  348. [HttpPost("set-protection")]
  349. [SwaggerResponse(200, type: typeof(ApiResponseModel<ResponseFile>))]
  350. public async Task<IResult> SetFileProtection([FromBody] RequestFileSet req)
  351. {
  352. return await CreateResponseAsync(async () =>
  353. {
  354. GlobalConstants.SetAuthorization(HttpContext, GlobalConstants.API_FILE_SET_PROTECTION, req.apiKey, req);
  355. HttpContext.Items[GlobalConstants.API_REQUEST] = (RequestBase)req;
  356. int authError = _authService.CheckApiKeyValidation(HttpContext, req.apiKey, GlobalConstants.API_FILE_SET_PROTECTION);
  357. if (authError != 0)
  358. {
  359. throw ResponseApiKeyValidationError(HttpContext, authError);
  360. }
  361. var response = await _service.SetProtection(req);
  362. return Results.Ok(ResponseSuccess(HttpContext, response));
  363. });
  364. }
  365. [HttpPost("delete-protection")]
  366. [SwaggerResponse(200, type: typeof(ApiResponseModel<ResponseFile>))]
  367. public async Task<IResult> DelFileProtection([FromBody] RequestFileDel req)
  368. {
  369. return await CreateResponseAsync(async () =>
  370. {
  371. GlobalConstants.SetAuthorization(HttpContext, GlobalConstants.API_FILE_DELETE_PROTECTIN, req.apiKey, req);
  372. HttpContext.Items[GlobalConstants.API_REQUEST] = (RequestBase)req;
  373. int authError = _authService.CheckApiKeyValidation(HttpContext, req.apiKey, GlobalConstants.API_FILE_DELETE_PROTECTIN);
  374. if (authError != 0)
  375. {
  376. throw ResponseApiKeyValidationError(HttpContext, authError);
  377. }
  378. var response = await _service.RemoveProtection(req);
  379. return Results.Ok(ResponseSuccess(HttpContext, response));
  380. });
  381. }
  382. [HttpPost("set-label-protection")]
  383. [SwaggerResponse(200, type: typeof(ApiResponseModel<ResponseFile>))]
  384. public async Task<IResult> SetFileLabelProtection([FromBody] RequestFileAllSet req)
  385. {
  386. return await CreateResponseAsync(async () =>
  387. {
  388. GlobalConstants.SetAuthorization(HttpContext, GlobalConstants.API_FILE_SET_LABEL_PROTECTION, req.apiKey, req);
  389. HttpContext.Items[GlobalConstants.API_REQUEST] = (RequestBase)req;
  390. int authError = _authService.CheckApiKeyValidation(HttpContext, req.apiKey, GlobalConstants.API_FILE_SET_LABEL_PROTECTION);
  391. if (authError != 0)
  392. {
  393. throw ResponseApiKeyValidationError(HttpContext, authError);
  394. }
  395. var response = await _service.SetLabelProtection(req);
  396. return Results.Ok(ResponseSuccess(HttpContext, response));
  397. });
  398. }
  399. [HttpPost("delete-label-protection")]
  400. [SwaggerResponse(200, type: typeof(ApiResponseModel<ResponseFile>))]
  401. public async Task<IResult> DelFileLabelProtection([FromBody] RequestFileDel req)
  402. {
  403. return await CreateResponseAsync(async () =>
  404. {
  405. GlobalConstants.SetAuthorization(HttpContext, GlobalConstants.API_FILE_DELETE_LABEL_PROTECTION, req.apiKey, req);
  406. HttpContext.Items[GlobalConstants.API_REQUEST] = (RequestBase)req;
  407. int authError = _authService.CheckApiKeyValidation(HttpContext, req.apiKey, GlobalConstants.API_FILE_DELETE_LABEL_PROTECTION);
  408. if (authError != 0)
  409. {
  410. throw ResponseApiKeyValidationError(HttpContext, authError);
  411. }
  412. var response = await _service.RemoveLabelProtection(req);
  413. return Results.Ok(ResponseSuccess(HttpContext, response));
  414. });
  415. }
  416. [HttpPost("encrypt")]
  417. [SwaggerResponse(200, type: typeof(ApiResponseModel<ResponseFile>))]
  418. public async Task<IResult> EncryptFile([Required] IFormFile file, [Required] string apiKey, [Required] string email)
  419. {
  420. return await CreateResponseAsync(async () =>
  421. {
  422. RequestBase req = new RequestBase
  423. {
  424. apiKey = apiKey,
  425. email = email,
  426. decryptKey = string.Empty,
  427. apiGuid = string.Empty
  428. };
  429. GlobalConstants.SetAuthorization(HttpContext, GlobalConstants.API_FILE_ENCRYPT, apiKey, req);
  430. HttpContext.Items[GlobalConstants.API_REQUEST] = (RequestBase)req;
  431. int authError = _authService.CheckApiKeyValidation(HttpContext, req.apiKey, GlobalConstants.API_FILE_ENCRYPT);
  432. if (authError != 0)
  433. {
  434. throw ResponseApiKeyValidationError(HttpContext, authError);
  435. }
  436. var response = await _service.EncryptFile(file, req);
  437. return Results.Ok(ResponseSuccess(HttpContext, response));
  438. });
  439. }
  440. [HttpPost("decrypt")]
  441. [SwaggerResponse(200, type: typeof(ApiResponseModel<ResponseFile>))]
  442. public async Task<IResult> DecryptFile([Required] IFormFile file, [Required] string apiKey, [Required] string email)
  443. {
  444. return await CreateResponseAsync(async () =>
  445. {
  446. RequestBase req = new RequestBase
  447. {
  448. apiKey = apiKey,
  449. email = email,
  450. decryptKey = string.Empty,
  451. apiGuid = string.Empty
  452. };
  453. GlobalConstants.SetAuthorization(HttpContext, GlobalConstants.API_FILE_DECRYPT, apiKey, req);
  454. HttpContext.Items[GlobalConstants.API_REQUEST] = (RequestBase)req;
  455. int authError = _authService.CheckApiKeyValidation(HttpContext, req.apiKey, GlobalConstants.API_FILE_DECRYPT);
  456. if (authError != 0)
  457. {
  458. throw ResponseApiKeyValidationError(HttpContext, authError);
  459. }
  460. var response = await _service.DecryptFile(file, req);
  461. return Results.Ok(ResponseSuccess(HttpContext, response));
  462. });
  463. }
  464. }