ApiFileController.cs 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259
  1. using AipGateway.API.Application;
  2. using AipGateway.API.Application.Interfaces.Services;
  3. using AipGateway.API.Domain.Models.Request;
  4. using AipGateway.API.Domain.Models.Response;
  5. using Azure;
  6. using Microsoft.AspNetCore.Mvc;
  7. using Newtonsoft.Json;
  8. using Swashbuckle.AspNetCore.Annotations;
  9. using System.ComponentModel.DataAnnotations;
  10. using System.Diagnostics;
  11. namespace AipGateway.AIP.Service.Controllers
  12. {
  13. [ApiController]
  14. [Route("/api/v1/file")]
  15. [Produces("application/json")]
  16. public class ApiFileController : BaseController
  17. {
  18. private readonly ILogger<ApiFileController> _log;
  19. private readonly IApiFileService _service;
  20. public ApiFileController(ILogger<ApiFileController> log, IApiFileService apiFileService)
  21. {
  22. _log = log;
  23. _service = apiFileService;
  24. }
  25. [HttpPost("info")]
  26. [SwaggerResponse(200, type: typeof(ApiResponseModel<ResponseInfo>))]
  27. public async Task<IResult> GetFileInfo([FromBody] RequestFileInfo req)
  28. {
  29. return await CreateResponseAsync(async () =>
  30. {
  31. GlobalConstants.SetAuthorization(HttpContext, GlobalConstants.API_FILE_INFO, req.apiKey, req);
  32. HttpContext.Items[GlobalConstants.API_REQUEST] = (RequestBase)req;
  33. var response = await _service.GetInfo(req);
  34. return Results.Ok(ResponseSuccess(HttpContext, response));
  35. });
  36. }
  37. [HttpPost("set-label")]
  38. [SwaggerResponse(200, type: typeof(ApiResponseModel<ResponseFile>))]
  39. public async Task<IResult> SetFileLabel([FromBody] RequestFileSet req)
  40. {
  41. _log.LogError("Request: [{0}], {1}", HttpContext.Request.Headers.Date, JsonConvert.SerializeObject(req));
  42. return await CreateResponseAsync(async () =>
  43. {
  44. GlobalConstants.SetAuthorization(HttpContext, GlobalConstants.API_FILE_SET_LABEL, req.apiKey, req);
  45. HttpContext.Items[GlobalConstants.API_REQUEST] = (RequestBase)req;
  46. var response = await _service.SetLabel(req);
  47. _log.LogError("Response: {0}", JsonConvert.SerializeObject(response));
  48. return Results.Ok(ResponseSuccess(HttpContext, response));
  49. });
  50. }
  51. [HttpPost("set-labels")]
  52. [SwaggerResponse(200, type: typeof(ApiResponseModel<List<ResponseFile>>))]
  53. public async Task<IResult> SetFileLabels([FromBody] RequestMultiFileSet req)
  54. {
  55. return await CreateResponseAsync(async () =>
  56. {
  57. GlobalConstants.SetAuthorization(HttpContext, GlobalConstants.API_FILE_SET_LABELS, req.apiKey, req);
  58. HttpContext.Items[GlobalConstants.API_REQUEST] = (RequestBase)req;
  59. int jobs = req.files.Count;
  60. List<ResponseFile> result = new List<ResponseFile>();
  61. var tasks = new List<Task<ResponseFile>>();
  62. foreach (var obj in req.files)
  63. {
  64. RequestFileSet reqSet = new RequestFileSet {
  65. apiKey = req.apiKey,
  66. email = req.email,
  67. decryptKey = req.decryptKey,
  68. aipGuid = req.aipGuid,
  69. comment = req.comment,
  70. file = new RequestFile
  71. {
  72. dispFileName = obj.dispFileName,
  73. realFileName = obj.realFileName,
  74. }
  75. };
  76. tasks.Add(_service.SetLabel(reqSet));
  77. }
  78. await Task.WhenAll(tasks);
  79. foreach (var task in tasks)
  80. {
  81. result.Add(task.Result);
  82. }
  83. HttpContext.Items[GlobalConstants.API_RESULT_CODE] = 0;
  84. HttpContext.Items[GlobalConstants.API_RESULT_MESSAGE] = GlobalConstants.API_RESULT_SUCCESS;
  85. return Results.Ok(new ApiResponseModel<List<ResponseFile>>()
  86. {
  87. success = true,
  88. errorCode = 0,
  89. errorMessage = GlobalConstants.API_RESULT_SUCCESS,
  90. result = result,
  91. });
  92. });
  93. }
  94. [HttpPost("delete-label")]
  95. [SwaggerResponse(200, type: typeof(ApiResponseModel<ResponseFile>))]
  96. public async Task<IResult> DelFileLabel([FromBody] RequestFileDel req)
  97. {
  98. return await CreateResponseAsync(async () =>
  99. {
  100. GlobalConstants.SetAuthorization(HttpContext, GlobalConstants.API_FILE_DELETE_LABEL, req.apiKey, req);
  101. HttpContext.Items[GlobalConstants.API_REQUEST] = (RequestBase)req;
  102. var response = await _service.DelLabel(req);
  103. return Results.Ok(ResponseSuccess(HttpContext, response));
  104. });
  105. }
  106. [HttpPost("delete-labels")]
  107. [SwaggerResponse(200, type: typeof(ApiResponseModel<ResponseFile>))]
  108. public async Task<IResult> DelFileLabels([FromBody] RequestMultiFileDel req)
  109. {
  110. return await CreateResponseAsync(async () =>
  111. {
  112. Stopwatch sw = new Stopwatch();
  113. sw.Start();
  114. _log.LogInformation("*** Start DelFileLabels: {0} EA.", req.files.Count);
  115. GlobalConstants.SetAuthorization(HttpContext, GlobalConstants.API_FILE_DELETE_LABELS, req.apiKey, req);
  116. HttpContext.Items[GlobalConstants.API_REQUEST] = (RequestBase)req;
  117. int ii = 0;
  118. int jobs = req.files.Count;
  119. List<ResponseFile> result = new List<ResponseFile>();
  120. var tasks = new Task<ResponseFile>[jobs];
  121. foreach (var obj in req.files)
  122. {
  123. RequestFileDel reqSet = new RequestFileDel
  124. {
  125. apiKey = req.apiKey,
  126. email = req.email,
  127. decryptKey = req.decryptKey,
  128. comment = req.comment,
  129. file = new RequestFile
  130. {
  131. dispFileName = obj.dispFileName,
  132. realFileName = obj.realFileName,
  133. }
  134. };
  135. tasks[ii++] = _service.DelLabel(reqSet);
  136. }
  137. await Task.WhenAll(tasks);
  138. foreach (var task in tasks)
  139. {
  140. result.Add(task.Result);
  141. }
  142. HttpContext.Items[GlobalConstants.API_RESULT_CODE] = 0;
  143. HttpContext.Items[GlobalConstants.API_RESULT_MESSAGE] = GlobalConstants.API_RESULT_SUCCESS;
  144. sw.Stop();
  145. _log.LogInformation("*** ...End SetFileLabels: {0} EA. {1,6} ms.", req.files.Count, sw.ElapsedMilliseconds.ToString("#,##0"));
  146. return Results.Ok(new ApiResponseModel<List<ResponseFile>>()
  147. {
  148. success = true,
  149. errorCode = 0,
  150. errorMessage = GlobalConstants.API_RESULT_SUCCESS,
  151. result = result,
  152. });
  153. });
  154. }
  155. [HttpPost("set-protection")]
  156. [SwaggerResponse(200, type: typeof(ApiResponseModel<ResponseFile>))]
  157. public async Task<IResult> SetFileProtection([FromBody] RequestFileSet req)
  158. {
  159. return await CreateResponseAsync(async () =>
  160. {
  161. GlobalConstants.SetAuthorization(HttpContext, GlobalConstants.API_FILE_SET_PROTECTION, req.apiKey, req);
  162. HttpContext.Items[GlobalConstants.API_REQUEST] = (RequestBase)req;
  163. var response = await _service.SetProtection(req);
  164. return Results.Ok(ResponseSuccess(HttpContext, response));
  165. });
  166. }
  167. [HttpPost("delete-protection")]
  168. [SwaggerResponse(200, type: typeof(ApiResponseModel<ResponseFile>))]
  169. public async Task<IResult> DelFileProtection([FromBody] RequestFileDel req)
  170. {
  171. return await CreateResponseAsync(async () =>
  172. {
  173. GlobalConstants.SetAuthorization(HttpContext, GlobalConstants.API_FILE_DELETE_PROTECTIN, req.apiKey, req);
  174. HttpContext.Items[GlobalConstants.API_REQUEST] = (RequestBase)req;
  175. var response = await _service.DelProtection(req);
  176. return Results.Ok(ResponseSuccess(HttpContext, response));
  177. });
  178. }
  179. [HttpPost("set-label-protection")]
  180. [SwaggerResponse(200, type: typeof(ApiResponseModel<ResponseFile>))]
  181. public async Task<IResult> SetFileLabelProtection([FromBody] RequestFileAllSet req)
  182. {
  183. return await CreateResponseAsync(async () =>
  184. {
  185. GlobalConstants.SetAuthorization(HttpContext, GlobalConstants.API_FILE_SET_LABEL_PROTECTION, req.apiKey, req);
  186. HttpContext.Items[GlobalConstants.API_REQUEST] = (RequestBase)req;
  187. var response = await _service.SetLabelProtection(req);
  188. return Results.Ok(ResponseSuccess(HttpContext, response));
  189. });
  190. }
  191. [HttpPost("delete-label-protection")]
  192. [SwaggerResponse(200, type: typeof(ApiResponseModel<ResponseFile>))]
  193. public async Task<IResult> DelFileLabelProtection([FromBody] RequestFileDel req)
  194. {
  195. return await CreateResponseAsync(async () =>
  196. {
  197. GlobalConstants.SetAuthorization(HttpContext, GlobalConstants.API_FILE_DELETE_LABEL_PROTECTION, req.apiKey, req);
  198. HttpContext.Items[GlobalConstants.API_REQUEST] = (RequestBase)req;
  199. var response = await _service.DelLabelProtection(req);
  200. return Results.Ok(ResponseSuccess(HttpContext, response));
  201. });
  202. }
  203. [HttpPost("encrypt")]
  204. [SwaggerResponse(200, type: typeof(ApiResponseModel<ResponseFile>))]
  205. public async Task<IResult> EncryptFile([Required] IFormFile file, [Required] string apiKey, [Required] string email)
  206. {
  207. return await CreateResponseAsync(async () =>
  208. {
  209. RequestBase req = new RequestBase
  210. {
  211. apiKey = apiKey,
  212. email = email,
  213. decryptKey = string.Empty,
  214. apiGuid = string.Empty
  215. };
  216. GlobalConstants.SetAuthorization(HttpContext, GlobalConstants.API_FILE_ENCRYPT, apiKey, req);
  217. HttpContext.Items[GlobalConstants.API_REQUEST] = (RequestBase)req;
  218. var response = await _service.EncryptFile(file, req);
  219. return Results.Ok(ResponseSuccess(HttpContext, response));
  220. });
  221. }
  222. [HttpPost("decrypt")]
  223. [SwaggerResponse(200, type: typeof(ApiResponseModel<ResponseFile>))]
  224. public async Task<IResult> DecryptFile([Required] IFormFile file, [Required] string apiKey, [Required] string email)
  225. {
  226. return await CreateResponseAsync(async () =>
  227. {
  228. RequestBase req = new RequestBase
  229. {
  230. apiKey = apiKey,
  231. email = email,
  232. decryptKey = string.Empty,
  233. apiGuid = string.Empty
  234. };
  235. GlobalConstants.SetAuthorization(HttpContext, GlobalConstants.API_FILE_DECRYPT, apiKey, req);
  236. HttpContext.Items[GlobalConstants.API_REQUEST] = (RequestBase)req;
  237. var response = await _service.DecryptFile(file, req);
  238. return Results.Ok(ResponseSuccess(HttpContext, response));
  239. });
  240. }
  241. }
  242. }