ApiFileController.java 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250
  1. package com.aip.gateway.api.controller;
  2. import com.aip.gateway.api.model.request.*;
  3. import com.aip.gateway.api.model.response.ApiResponseModel;
  4. import com.aip.gateway.api.repository.AppRepository;
  5. import com.aip.gateway.api.repository.GlobalConstants;
  6. import com.aip.gateway.api.service.IApiFileService;
  7. import io.swagger.annotations.ApiOperation;
  8. import io.swagger.v3.oas.annotations.Operation;
  9. import io.swagger.v3.oas.annotations.Parameter;
  10. import io.swagger.v3.oas.annotations.responses.ApiResponse;
  11. import io.swagger.v3.oas.annotations.tags.Tag;
  12. import jakarta.servlet.http.HttpServletRequest;
  13. import jakarta.validation.Valid;
  14. import lombok.RequiredArgsConstructor;
  15. import lombok.extern.slf4j.Slf4j;
  16. import org.springframework.http.MediaType;
  17. import org.springframework.http.ResponseEntity;
  18. import org.springframework.validation.annotation.Validated;
  19. import org.springframework.web.bind.annotation.*;
  20. import org.springframework.web.multipart.MultipartFile;
  21. @Slf4j
  22. @Tag(name = "03.ApiFile", description = "FILE AIP API")
  23. @RestController
  24. @RequiredArgsConstructor
  25. @CrossOrigin
  26. @Validated
  27. @RequestMapping(GlobalConstants.API_FILE)
  28. public class ApiFileController extends BaseController {
  29. private final AppRepository appRepo;
  30. private final IApiFileService service;
  31. @Operation(summary = "01.File Info", description = "AIP File Information Query.")
  32. @ApiResponse(responseCode = "200", description = "AIP File Information query Success.")
  33. @ApiOperation(value = "File Info", response = ApiResponseModel.class)
  34. @PostMapping(value = "info", produces = {"application/json; charset=utf8"})
  35. public ResponseEntity<ApiResponseModel> getFileInfo(
  36. @Parameter(name = "req", description = "File 정보 요청 데이터", required = true)
  37. @RequestBody @Valid final RequestFile req, HttpServletRequest request)
  38. {
  39. try {
  40. GlobalConstants.setAuthorization(request, GlobalConstants.API_FILE_INFO, req.getApiKey(), req);
  41. int authError = this.appRepo.checkApiKeyValidation(req.getApiKey(), getRemoteIP(request), GlobalConstants.API_FILE_INFO);
  42. if (authError != 0) {
  43. return responseApiKeyValidationError(request, authError);
  44. }
  45. return responseSuccess(request, this.service.getInfo(req));
  46. }
  47. catch (Exception e) {
  48. log.error("exception: {}/info, {}", GlobalConstants.API_FILE, e.getMessage());
  49. return responseException(request, e);
  50. }
  51. }
  52. @Operation(summary = "02.File AIP Label 설정", description = "File AIP Label Set.")
  53. @ApiResponse(responseCode = "200", description = "File AIP Label set success.")
  54. @ApiOperation(value = "File AIP Label 설정", response = ApiResponseModel.class, responseContainer = "ArrayList")
  55. @PostMapping(value = "set-label", produces = {"application/json; charset=utf8"})
  56. public ResponseEntity<ApiResponseModel> setLabel(
  57. @Parameter(name = "req", description = "File AIP Label 설정 요청 데이터", required = true)
  58. @RequestBody @Valid final RequestFileSet req, HttpServletRequest request)
  59. {
  60. try {
  61. GlobalConstants.setAuthorization(request, GlobalConstants.API_FILE_SET_LABEL, req.getApiKey(), req);
  62. int authError = this.appRepo.checkApiKeyValidation(req.getApiKey(), getRemoteIP(request), GlobalConstants.API_FILE_SET_LABEL);
  63. if (authError != 0) {
  64. return responseApiKeyValidationError(request, authError);
  65. }
  66. return responseSuccess(request, this.service.setLabel(req));
  67. }
  68. catch (Exception e) {
  69. log.error("exception: {}/set-label, {}", GlobalConstants.API_FILE, e.getMessage());
  70. return responseException(request, e);
  71. }
  72. }
  73. @Operation(summary = "03.File AIP Label Delete", description = "File AIP Label Delete.")
  74. @ApiResponse(responseCode = "200", description = "File AIP Label delete success.")
  75. @ApiOperation(value = "File AIP Label 해제", response = ApiResponseModel.class, responseContainer = "ArrayList")
  76. @PostMapping(value = "delete-label", produces = {"application/json; charset=utf8"})
  77. public ResponseEntity<ApiResponseModel> delLabel(
  78. @Parameter(name = "req", description = "File AIP Label 해제 요청 데이터", required = true)
  79. @RequestBody @Valid final RequestFileDel req, HttpServletRequest request)
  80. {
  81. try {
  82. GlobalConstants.setAuthorization(request, GlobalConstants.API_FILE_DELETE_LABEL, req.getApiKey(), req);
  83. int authError = this.appRepo.checkApiKeyValidation(req.getApiKey(), getRemoteIP(request), GlobalConstants.API_FILE_DELETE_LABEL);
  84. if (authError != 0) {
  85. return responseApiKeyValidationError(request, authError);
  86. }
  87. return responseSuccess(request, this.service.delLabel(req));
  88. }
  89. catch (Exception e) {
  90. log.error("exception: {}/delete-label, {}", GlobalConstants.API_FILE, e.getMessage());
  91. return responseException(request, e);
  92. }
  93. }
  94. @Operation(summary = "04.File AIP Protection 설정", description = "File AIP Protection AIP.")
  95. @ApiResponse(responseCode = "200", description = "File AIP Protection set success.")
  96. @ApiOperation(value = "File AIP Protection 설정", response = ApiResponseModel.class, responseContainer = "ArrayList")
  97. @PostMapping(value = "set-protection", produces = {"application/json; charset=utf8"})
  98. public ResponseEntity<ApiResponseModel> setProtection(
  99. @Parameter(name = "req", description = "File AIP Protection 설정 요청 데이터", required = true)
  100. @RequestBody @Valid final RequestFileSet req, HttpServletRequest request)
  101. {
  102. try {
  103. GlobalConstants.setAuthorization(request, GlobalConstants.API_FILE_SET_PROTECTION, req.getApiKey(), req);
  104. int authError = this.appRepo.checkApiKeyValidation(req.getApiKey(), getRemoteIP(request), GlobalConstants.API_FILE_SET_PROTECTION);
  105. if (authError != 0) {
  106. return responseApiKeyValidationError(request, authError);
  107. }
  108. return responseSuccess(request, this.service.setProtection(req));
  109. }
  110. catch (Exception e) {
  111. log.error("exception: {}/set-protection, {}", GlobalConstants.API_FILE, e.getMessage());
  112. return responseException(request, e);
  113. }
  114. }
  115. @Operation(summary = "05.File AIP Protection Delete", description = "File AIP Protection Delete.")
  116. @ApiResponse(responseCode = "200", description = "File AIP Protection delete success.")
  117. @ApiOperation(value = "File AIP Protection 해제", response = ApiResponseModel.class, responseContainer = "ArrayList")
  118. @PostMapping(value = "delete-protection", produces = {"application/json; charset=utf8"})
  119. public ResponseEntity<ApiResponseModel> delProtection(
  120. @Parameter(name = "req", description = "File AIP Protection 해제 요청 데이터", required = true)
  121. @RequestBody @Valid final RequestFileDel req, HttpServletRequest request)
  122. {
  123. try {
  124. GlobalConstants.setAuthorization(request, GlobalConstants.API_FILE_DELETE_PROTECTIN, req.getApiKey(), req);
  125. int authError = this.appRepo.checkApiKeyValidation(req.getApiKey(), getRemoteIP(request), GlobalConstants.API_FILE_DELETE_PROTECTIN);
  126. if (authError != 0) {
  127. return responseApiKeyValidationError(request, authError);
  128. }
  129. return responseSuccess(request, this.service.delProtection(req));
  130. }
  131. catch (Exception e) {
  132. log.error("exception: {}/delete-protection, {}", GlobalConstants.API_FILE, e.getMessage());
  133. return responseException(request, e);
  134. }
  135. }
  136. @Operation(summary = "06.File AIP Label Or Protection 설정", description = "File AIP Label Or Protection AIP.")
  137. @ApiResponse(responseCode = "200", description = "File AIP Label Or Protection set success.")
  138. @ApiOperation(value = "File AIP Label Or Protection 설정", response = ApiResponseModel.class, responseContainer = "ArrayList")
  139. @PostMapping(value = "set-label-protection", produces = {"application/json; charset=utf8"})
  140. public ResponseEntity<ApiResponseModel> setLabelProtection(
  141. @Parameter(name = "req", description = "File AIP Label Or Protection 설정 요청 데이터", required = true)
  142. @RequestBody @Valid final RequestFileAllSet req, HttpServletRequest request)
  143. {
  144. try {
  145. GlobalConstants.setAuthorization(request, GlobalConstants.API_FILE_SET_LABEL_PROTECTION, req.getApiKey(), req);
  146. int authError = this.appRepo.checkApiKeyValidation(req.getApiKey(), getRemoteIP(request), GlobalConstants.API_FILE_SET_LABEL_PROTECTION);
  147. if (authError != 0) {
  148. return responseApiKeyValidationError(request, authError);
  149. }
  150. return responseSuccess(request, this.service.setLabelProtection(req));
  151. }
  152. catch (Exception e) {
  153. log.error("exception: {}/set-label-protection, {}", GlobalConstants.API_FILE, e.getMessage());
  154. return responseException(request, e);
  155. }
  156. }
  157. @Operation(summary = "07.File AIP Label Or Protection Delete", description = "File AIP Label Or Protection Delete.")
  158. @ApiResponse(responseCode = "200", description = "File AIP Label Or Protection delete success.")
  159. @ApiOperation(value = "File AIP Label Or Protection 해제", response = ApiResponseModel.class, responseContainer = "ArrayList")
  160. @PostMapping(value = "delete-label-protection", produces = {"application/json; charset=utf8"})
  161. public ResponseEntity<ApiResponseModel> delLabelProtection(
  162. @Parameter(name = "req", description = "File AIP Label Or Protection 해제 요청 데이터", required = true)
  163. @RequestBody @Valid final RequestFileDel req, HttpServletRequest request)
  164. {
  165. try {
  166. GlobalConstants.setAuthorization(request, GlobalConstants.API_FILE_DELETE_LABEL_PROTECTION, req.getApiKey(), req);
  167. int authError = this.appRepo.checkApiKeyValidation(req.getApiKey(), getRemoteIP(request), GlobalConstants.API_FILE_DELETE_LABEL_PROTECTION);
  168. if (authError != 0) {
  169. return responseApiKeyValidationError(request, authError);
  170. }
  171. return responseSuccess(request, this.service.delLabelProtection(req));
  172. }
  173. catch (Exception e) {
  174. log.error("exception: {}/delete-label-protection, {}", GlobalConstants.API_FILE, e.getMessage());
  175. return responseException(request, e);
  176. }
  177. }
  178. // https://www.callicoder.com/spring-boot-file-upload-download-rest-api-example/
  179. @Operation(summary = "08.Encrypt File", description = "Encrypt File.")
  180. @ApiResponse(responseCode = "200", description = "Encrypt File set success.")
  181. @ApiOperation(value = "Encrypt File", response = ApiResponseModel.class, responseContainer = "ArrayList")
  182. @PostMapping(value = "encrypt", consumes = {MediaType.MULTIPART_FORM_DATA_VALUE}, produces = {MediaType.APPLICATION_JSON_VALUE})
  183. public ResponseEntity<ApiResponseModel> encryptFile(
  184. @Parameter(description = "multipart/form-data 형식의 파일을 input 으로 받습니다. 이때 key 값은 multipartFile 입니다.")
  185. @RequestParam("file") MultipartFile file,
  186. @RequestParam("apiKey") String apiKey,
  187. @RequestParam("email") String email, HttpServletRequest request)
  188. {
  189. try {
  190. RequestBase baseReq = RequestBase.builder()
  191. .apiKey(apiKey)
  192. .decryptKey("")
  193. .email(email)
  194. .apiGuid("")
  195. .build();
  196. GlobalConstants.setAuthorization(request, GlobalConstants.API_FILE_ENCRYPT, apiKey, baseReq);
  197. int authError = this.appRepo.checkApiKeyValidation(apiKey, getRemoteIP(request), GlobalConstants.API_FILE_ENCRYPT);
  198. if (authError != 0) {
  199. return responseApiKeyValidationError(request, authError);
  200. }
  201. return responseSuccess(request, this.service.encryptFile(file, baseReq));
  202. }
  203. catch (Exception e) {
  204. log.error("exception: {}/encrypt, {}", GlobalConstants.API_FILE, e.getMessage());
  205. return responseException(request, e);
  206. }
  207. }
  208. @Operation(summary = "09.Decrypt File", description = "Decrypt File.")
  209. @ApiResponse(responseCode = "200", description = "Decrypt File set success.")
  210. @ApiOperation(value = "Decrypt File", response = ApiResponseModel.class, responseContainer = "ArrayList")
  211. @PostMapping(value = "decrypt", consumes = {MediaType.MULTIPART_FORM_DATA_VALUE}, produces = {MediaType.APPLICATION_JSON_VALUE})
  212. public ResponseEntity<ApiResponseModel> decryptFile(
  213. @Parameter(description = "multipart/form-data 형식의 파일을 input 으로 받습니다. 이때 key 값은 multipartFile 입니다.")
  214. @RequestParam("file") MultipartFile file,
  215. @RequestParam("apiKey") String apiKey,
  216. @RequestParam("email") String email, HttpServletRequest request)
  217. {
  218. try {
  219. RequestBase baseReq = RequestBase.builder()
  220. .apiKey(apiKey)
  221. .decryptKey("")
  222. .email(email)
  223. .apiGuid("")
  224. .build();
  225. GlobalConstants.setAuthorization(request, GlobalConstants.API_FILE_DECRYPT, apiKey, baseReq);
  226. int authError = this.appRepo.checkApiKeyValidation(apiKey, getRemoteIP(request), GlobalConstants.API_FILE_DECRYPT);
  227. if (authError != 0) {
  228. return responseApiKeyValidationError(request, authError);
  229. }
  230. return responseSuccess(request, this.service.decryptFile(file, baseReq));
  231. }
  232. catch (Exception e) {
  233. log.error("exception: {}/decrypt, {}", GlobalConstants.API_FILE, e.getMessage());
  234. return responseException(request, e);
  235. }
  236. }
  237. }