ApiStreamService.cs 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357
  1. using AipGateway.API.Application.Interfaces.Services;
  2. using AipGateway.API.Application.Utils;
  3. using AipGateway.API.Domain.Models.App;
  4. using AipGateway.API.Domain.Models.Request;
  5. using AipGateway.API.Domain.Models.Response;
  6. using AipGateway.AIP.Service.Services.Interfaces;
  7. using AipGateway.AIP.Service.Utils;
  8. namespace AipGateway.AIP.Service.Services
  9. {
  10. public class ApiStreamService : BaseService, IApiStreamService
  11. {
  12. private readonly ILogger<ApiStreamService> _log;
  13. public ApiStreamService(ILogger<ApiStreamService> log, IAipFileService aipFileService)
  14. : base(aipFileService)
  15. {
  16. _log = log;
  17. }
  18. public async Task<ResponseInfo> GetInfo(RequestStreamInfo req)
  19. {
  20. //string tempOrgFileName = _aipFileService.GetRequestFileName(req.apiGuid + AipFileUtils.getExtension(req.dispFileName));
  21. string actualFileName = _aipFileService.GetActualFileName(req.apiGuid + AipFileUtils.getExtension(req.stream.dispFileName));
  22. try
  23. {
  24. string? newFileExt = _aipFileService.GetSupportedFileType(req.stream.dispFileName);
  25. if (newFileExt == null)
  26. {
  27. return new ResponseInfo
  28. {
  29. errorCode = 102,
  30. errorMessage = "지원하지 않는 파일형식 입니다.",
  31. };
  32. }
  33. var task = Task.Run(() =>
  34. {
  35. using (var stream = new MemoryStream(Convert.FromBase64String(req.stream.fileData)))
  36. {
  37. return ResponseGetFileInfo(_aipFileService.aipFileManager.GetFileInfo(stream, actualFileName), req.stream.dispFileName);
  38. }
  39. });
  40. ResponseInfo result = await task;
  41. return result;
  42. }
  43. catch (Exception e)
  44. {
  45. return ResponseInfoException(e);
  46. }
  47. finally
  48. {
  49. FileUtils.DeleteFile(actualFileName);
  50. }
  51. }
  52. public async Task<ResponseStream> SetLabel(RequestStreamSet req)
  53. {
  54. CheckAip check = CheckAipRequest(req.apiGuid, req.stream.dispFileName, "", true, 1);
  55. if (check.errorCode != 0)
  56. {
  57. return new ResponseStream
  58. {
  59. errorCode = check.errorCode,
  60. errorMessage = check.errorMessage,
  61. dispFileName = check.dispFileName,
  62. };
  63. }
  64. try
  65. {
  66. var task = Task.Run(() =>
  67. {
  68. using (var stream = new MemoryStream(Convert.FromBase64String(req.stream.fileData)))
  69. {
  70. SetFileInfo fileInfo = _aipFileService.aipFileManager.SetLabel(stream, check.actualFileName, req.email, req.aipGuid, "", req.comment);
  71. return ResponseSetStream(fileInfo, req.stream.dispFileName, Path.GetFileName(fileInfo.newFileName));
  72. }
  73. });
  74. ResponseStream result = await task;
  75. return result;
  76. }
  77. catch (Exception e)
  78. {
  79. return ResponseStreamException(e, req.stream.dispFileName);
  80. }
  81. finally
  82. {
  83. FileUtils.DeleteFile(check.actualFileName);
  84. }
  85. }
  86. public async Task<ResponseStream> DelLabel(RequestStreamDel req)
  87. {
  88. CheckAip check = CheckAipRequest(req.apiGuid, req.stream.dispFileName, "", true, 2);
  89. if (check.errorCode != 0)
  90. {
  91. return new ResponseStream
  92. {
  93. errorCode = check.errorCode,
  94. errorMessage = check.errorMessage,
  95. dispFileName = check.dispFileName,
  96. };
  97. }
  98. try
  99. {
  100. var task = Task.Run(() =>
  101. {
  102. using (var stream = new MemoryStream(Convert.FromBase64String(req.stream.fileData)))
  103. {
  104. SetFileInfo fileInfo = _aipFileService.aipFileManager.DeleteLabel(stream, check.actualFileName, req.email, req.comment);
  105. return ResponseSetStream(fileInfo, req.stream.dispFileName, Path.GetFileName(fileInfo.newFileName));
  106. }
  107. });
  108. ResponseStream result = await task;
  109. return result;
  110. }
  111. catch (Exception e)
  112. {
  113. return ResponseStreamException(e, req.stream.dispFileName);
  114. }
  115. finally
  116. {
  117. FileUtils.DeleteFile(check.actualFileName);
  118. }
  119. }
  120. public async Task<ResponseStream> SetProtection(RequestStreamSet req)
  121. {
  122. CheckAip check = CheckAipRequest(req.apiGuid, req.stream.dispFileName, "", true, 3);
  123. if (check.errorCode != 0)
  124. {
  125. return new ResponseStream
  126. {
  127. errorCode = check.errorCode,
  128. errorMessage = check.errorMessage,
  129. dispFileName = check.dispFileName,
  130. };
  131. }
  132. try
  133. {
  134. var task = Task.Run(() =>
  135. {
  136. using (var stream = new MemoryStream(Convert.FromBase64String(req.stream.fileData)))
  137. {
  138. SetFileInfo fileInfo = _aipFileService.aipFileManager.SetProtection(stream, check.actualFileName, req.email, req.aipGuid, req.comment);
  139. return ResponseSetStream(fileInfo, req.stream.dispFileName, Path.GetFileName(fileInfo.newFileName));
  140. }
  141. });
  142. ResponseStream result = await task;
  143. return result;
  144. }
  145. catch (Exception e)
  146. {
  147. return ResponseStreamException(e, req.stream.dispFileName);
  148. }
  149. finally
  150. {
  151. FileUtils.DeleteFile(check.actualFileName);
  152. }
  153. }
  154. public async Task<ResponseStream> DelProtection(RequestStreamDel req)
  155. {
  156. CheckAip check = CheckAipRequest(req.apiGuid, req.stream.dispFileName, "", true, 4);
  157. if (check.errorCode != 0)
  158. {
  159. return new ResponseStream
  160. {
  161. errorCode = check.errorCode,
  162. errorMessage = check.errorMessage,
  163. dispFileName = check.dispFileName,
  164. };
  165. }
  166. try
  167. {
  168. var task = Task.Run(() =>
  169. {
  170. using (var stream = new MemoryStream(Convert.FromBase64String(req.stream.fileData)))
  171. {
  172. SetFileInfo fileInfo = _aipFileService.aipFileManager.DeleteLabel(stream, check.actualFileName, req.email, req.comment);
  173. return ResponseSetStream(fileInfo, req.stream.dispFileName, Path.GetFileName(fileInfo.newFileName));
  174. }
  175. });
  176. ResponseStream result = await task;
  177. return result;
  178. }
  179. catch (Exception e)
  180. {
  181. return ResponseStreamException(e, req.stream.dispFileName);
  182. }
  183. finally
  184. {
  185. FileUtils.DeleteFile(check.actualFileName);
  186. }
  187. }
  188. public async Task<ResponseStream> SetLabelProtection(RequestStreamAllSet req)
  189. {
  190. CheckAip check = CheckAipRequest(req.apiGuid, req.stream.dispFileName, "", true, 3);
  191. if (check.errorCode != 0)
  192. {
  193. return new ResponseStream
  194. {
  195. errorCode = check.errorCode,
  196. errorMessage = check.errorMessage,
  197. dispFileName = check.dispFileName,
  198. };
  199. }
  200. try
  201. {
  202. var task = Task.Run(() =>
  203. {
  204. using (var stream = new MemoryStream(Convert.FromBase64String(req.stream.fileData)))
  205. {
  206. SetFileInfo fileInfo = _aipFileService.aipFileManager.SetLabel(stream, check.actualFileName, req.email, req.aipGuid, req.templateGuid, req.comment);
  207. return ResponseSetStream(fileInfo, req.stream.dispFileName, Path.GetFileName(fileInfo.newFileName));
  208. }
  209. });
  210. ResponseStream result = await task;
  211. return result;
  212. }
  213. catch (Exception e)
  214. {
  215. return ResponseStreamException(e, req.stream.dispFileName);
  216. }
  217. finally
  218. {
  219. FileUtils.DeleteFile(check.actualFileName);
  220. }
  221. }
  222. public async Task<ResponseStream> DelLabelProtection(RequestStreamDel req)
  223. {
  224. CheckAip check = CheckAipRequest(req.apiGuid, req.stream.dispFileName, "", true, 4);
  225. if (check.errorCode != 0)
  226. {
  227. return new ResponseStream
  228. {
  229. errorCode = check.errorCode,
  230. errorMessage = check.errorMessage,
  231. dispFileName = check.dispFileName,
  232. };
  233. }
  234. try
  235. {
  236. var task = Task.Run(() =>
  237. {
  238. using (var stream = new MemoryStream(Convert.FromBase64String(req.stream.fileData)))
  239. {
  240. SetFileInfo fileInfo = _aipFileService.aipFileManager.DeleteLabel(stream, check.actualFileName, req.email, req.comment, true);
  241. return ResponseSetStream(fileInfo, req.stream.dispFileName, Path.GetFileName(fileInfo.newFileName));
  242. }
  243. });
  244. ResponseStream result = await task;
  245. return result;
  246. }
  247. catch (Exception e)
  248. {
  249. return ResponseStreamException(e, req.stream.dispFileName);
  250. }
  251. finally
  252. {
  253. FileUtils.DeleteFile(check.actualFileName);
  254. }
  255. }
  256. public async Task<ResponseStream> EncryptFile(IFormFile file, RequestBase baseReq)
  257. {
  258. CheckMultipartFile check = ValidateMultipartFile(file, baseReq.apiGuid);
  259. try
  260. {
  261. if (check.errorCode != 0)
  262. {
  263. return new ResponseStream
  264. {
  265. errorCode = check.errorCode,
  266. errorMessage = check.errorMessage,
  267. dispFileName = check.dispFileName,
  268. };
  269. }
  270. string savedFileName = _aipFileService.GetRequestFileName(check.saveFileName);
  271. RequestStreamSet req = new RequestStreamSet
  272. {
  273. apiKey = baseReq.apiKey,
  274. email = baseReq.email,
  275. apiGuid = baseReq.apiGuid,
  276. decryptKey = string.Empty,
  277. stream = new RequestStream
  278. {
  279. dispFileName = check.dispFileName,
  280. fileData = FileUtils.GetFileData(savedFileName),
  281. },
  282. aipGuid = _aipFileService.aipSetting.SetLabelId,
  283. comment = "EncryptFile"
  284. };
  285. ResponseStream result = await SetLabel(req);
  286. return result;
  287. }
  288. catch (Exception e)
  289. {
  290. return ResponseStreamException(e, file.FileName);
  291. }
  292. finally
  293. {
  294. AipFileUtils.delete(_aipFileService.GetRequestFileName(check.saveFileName));
  295. }
  296. }
  297. public async Task<ResponseStream> DecryptFile(IFormFile file, RequestBase baseReq)
  298. {
  299. CheckMultipartFile check = ValidateMultipartFile(file, baseReq.apiGuid);
  300. try
  301. {
  302. if (check.errorCode != 0)
  303. {
  304. return new ResponseStream
  305. {
  306. errorCode = check.errorCode,
  307. errorMessage = check.errorMessage,
  308. dispFileName = check.dispFileName,
  309. };
  310. }
  311. string savedFileName = _aipFileService.GetRequestFileName(check.saveFileName);
  312. RequestStreamDel req = new RequestStreamDel
  313. {
  314. apiKey = baseReq.apiKey,
  315. email = baseReq.email,
  316. apiGuid = baseReq.apiGuid,
  317. decryptKey = string.Empty,
  318. stream = new RequestStream
  319. {
  320. dispFileName = check.dispFileName,
  321. fileData = FileUtils.GetFileData(savedFileName),
  322. },
  323. comment = "DecryptFile"
  324. };
  325. ResponseStream result = await DelLabel(req);
  326. return result;
  327. }
  328. catch (Exception e)
  329. {
  330. return ResponseStreamException(e, file.FileName);
  331. }
  332. finally
  333. {
  334. AipFileUtils.delete(_aipFileService.GetRequestFileName(check.saveFileName));
  335. }
  336. }
  337. }
  338. }