From c9a47fe85be25eda8b6ee556fa39bde2c99f14c7 Mon Sep 17 00:00:00 2001 From: David Lemaignent Date: Wed, 2 Oct 2024 14:41:07 +0200 Subject: [PATCH 1/3] fix error on empty share date --- .../org/esupportail/esupsignature/service/UserShareService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/esupportail/esupsignature/service/UserShareService.java b/src/main/java/org/esupportail/esupsignature/service/UserShareService.java index fe771725d..e0d9c69f2 100644 --- a/src/main/java/org/esupportail/esupsignature/service/UserShareService.java +++ b/src/main/java/org/esupportail/esupsignature/service/UserShareService.java @@ -118,7 +118,7 @@ public void addUserShare(User authUser, Boolean signWithOwnSign, Long[] form, Lo } Date beginDateDate = null; Date endDateDate = null; - if (beginDate != null && endDate != null) { + if (StringUtils.hasText(beginDate) && StringUtils.hasText(endDate)) { try { beginDateDate = new SimpleDateFormat(DATE_PATTERN).parse(beginDate); endDateDate = new SimpleDateFormat(DATE_PATTERN).parse(endDate); From 85df37a6d15eed57d6c84f88ea0d3131cc800467 Mon Sep 17 00:00:00 2001 From: David Lemaignent Date: Wed, 2 Oct 2024 16:04:19 +0200 Subject: [PATCH 2/3] fix error on empty fileinput --- src/main/resources/static/js/modules/ui/WizUi.js | 14 ++++++++------ .../resources/templates/admin/workflows/steps.html | 2 +- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/main/resources/static/js/modules/ui/WizUi.js b/src/main/resources/static/js/modules/ui/WizUi.js index 5ef3deb82..c54cd95b8 100644 --- a/src/main/resources/static/js/modules/ui/WizUi.js +++ b/src/main/resources/static/js/modules/ui/WizUi.js @@ -84,12 +84,14 @@ export class WizUi { self.files = self.input.fileinput('getFileList'); self.input.fileinput('upload'); } else { - self.input.on('filebatchselected', function(event) { - self.input.fileinput('upload'); - }); - self.input.fileinput('clear'); - self.input.fileinput('clearFileStack'); - self.input.fileinput('readFiles', self.files); + if(self.files.size() > 0) { + self.input.on('filebatchselected', function (event) { + self.input.fileinput('upload'); + }); + self.input.fileinput('clear'); + self.input.fileinput('clearFileStack'); + self.input.fileinput('readFiles', self.files); + } } } }); diff --git a/src/main/resources/templates/admin/workflows/steps.html b/src/main/resources/templates/admin/workflows/steps.html index d636931b9..4f1f40e7e 100644 --- a/src/main/resources/templates/admin/workflows/steps.html +++ b/src/main/resources/templates/admin/workflows/steps.html @@ -54,7 +54,7 @@
- Vous pouvez ajouter des étapes + Vous pouvez ajouter des étapes ou laisser le circuit vide pour initialiser les étapes via le web service
From d12e4bc5fc611515c02b4edf8267b923771be35a Mon Sep 17 00:00:00 2001 From: David Lemaignent Date: Wed, 2 Oct 2024 16:04:36 +0200 Subject: [PATCH 3/3] refactor ws http responses --- .../service/SignBookService.java | 2 +- .../service/WorkflowService.java | 2 +- .../web/controller/user/DataController.java | 16 ++--- .../user/NexuProcessController.java | 27 ++++---- .../web/controller/user/WizardController.java | 14 +---- .../web/ws/ExportWsController.java | 23 +++---- .../web/ws/FormWsController.java | 62 ++++++++----------- .../web/ws/SignRequestWsController.java | 58 +++++++---------- .../web/ws/WorkflowWsController.java | 22 +++---- .../wssecure/GlobalWsSecureController.java | 36 +++++------ 10 files changed, 101 insertions(+), 161 deletions(-) diff --git a/src/main/java/org/esupportail/esupsignature/service/SignBookService.java b/src/main/java/org/esupportail/esupsignature/service/SignBookService.java index 91a139ac3..2fa3dfd3d 100644 --- a/src/main/java/org/esupportail/esupsignature/service/SignBookService.java +++ b/src/main/java/org/esupportail/esupsignature/service/SignBookService.java @@ -763,7 +763,7 @@ public int countEmpty(String userEppn) { } @Transactional - public SignBook sendForSign(Long dataId, List steps, List targetEmails, List targetUrls, String userEppn, String authUserEppn, boolean forceSendEmail, Map formDatas, InputStream formReplaceInputStream, String signRequestParamsJsonString, String title, Boolean sendEmailAlert, String comment) throws EsupSignatureRuntimeException { + public SignBook sendForSign(Long dataId, List steps, List targetEmails, List targetUrls, String userEppn, String authUserEppn, boolean forceSendEmail, Map formDatas, InputStream formReplaceInputStream, String signRequestParamsJsonString, String title, Boolean sendEmailAlert, String comment) { List signRequestParamses = new ArrayList<>(); if (signRequestParamsJsonString != null) { signRequestParamses = signRequestParamsService.getSignRequestParamsesFromJson(signRequestParamsJsonString); diff --git a/src/main/java/org/esupportail/esupsignature/service/WorkflowService.java b/src/main/java/org/esupportail/esupsignature/service/WorkflowService.java index 9116e398a..afefc2450 100644 --- a/src/main/java/org/esupportail/esupsignature/service/WorkflowService.java +++ b/src/main/java/org/esupportail/esupsignature/service/WorkflowService.java @@ -190,7 +190,7 @@ public Workflow createWorkflow(User user) { } @Transactional - public Workflow addStepToWorkflow(Long id, SignType signType, Boolean allSignToComplete, Boolean changeable, WorkflowStepDto step, User user, boolean recipientsRequired) throws EsupSignatureRuntimeException { + public Workflow addStepToWorkflow(Long id, SignType signType, Boolean allSignToComplete, Boolean changeable, WorkflowStepDto step, User user, boolean recipientsRequired) { Workflow workflow; if (id != null && id != -1) { workflow = getById(id); diff --git a/src/main/java/org/esupportail/esupsignature/web/controller/user/DataController.java b/src/main/java/org/esupportail/esupsignature/web/controller/user/DataController.java index efc1bbe91..ca9797b2f 100644 --- a/src/main/java/org/esupportail/esupsignature/web/controller/user/DataController.java +++ b/src/main/java/org/esupportail/esupsignature/web/controller/user/DataController.java @@ -69,17 +69,11 @@ public ResponseEntity sendForm(@ModelAttribute("userEppn") String userEp logger.info("create form " + id); if(formService.isFormAuthorized(userEppn, authUserEppn, id)) { Data data = dataService.addData(id, userEppn); - try { - SignBook signBook = signBookService.sendForSign(data.getId(), steps, targetEmails, null, userEppn, authUserEppn, false, null, null, null, null, true, null); - return ResponseEntity.ok().body(signBook.getId().toString()); - } catch (EsupSignatureRuntimeException e) { - logger.warn(e.getMessage() + " for " + id); - } - } else { - logger.warn("form id " + id + " not autorized"); + SignBook signBook = signBookService.sendForSign(data.getId(), steps, targetEmails, null, userEppn, authUserEppn, false, null, null, null, null, true, null); + return ResponseEntity.ok().body(signBook.getId().toString()); } - return ResponseEntity.internalServerError().body("Formulaire non autorisé"); - + logger.warn("form id " + id + " not autorized"); + return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body("Formulaire non autorisé"); } @PostMapping("/form/{id}") @@ -111,7 +105,7 @@ public ResponseEntity getImagePdfAsByteArray(@PathVariable("id") Long id, httpServletResponse.setContentType(MediaType.IMAGE_PNG_VALUE); IOUtils.copy(in, httpServletResponse.getOutputStream()); in.close(); - return new ResponseEntity<>(HttpStatus.OK); + return ResponseEntity.ok().build(); } } \ No newline at end of file diff --git a/src/main/java/org/esupportail/esupsignature/web/controller/user/NexuProcessController.java b/src/main/java/org/esupportail/esupsignature/web/controller/user/NexuProcessController.java index 25a1e1ace..47517a07b 100644 --- a/src/main/java/org/esupportail/esupsignature/web/controller/user/NexuProcessController.java +++ b/src/main/java/org/esupportail/esupsignature/web/controller/user/NexuProcessController.java @@ -103,25 +103,20 @@ public GetDataToSignResponse getDataToSign(@ModelAttribute("userEppn") String us @ResponseBody public ResponseEntity signDocument(@ModelAttribute("userEppn") String userEppn, @ModelAttribute("authUserEppn") String authUserEppn, @RequestBody @Valid SignResponse signatureValue, - @RequestParam("id") Long id) throws EsupSignatureRuntimeException, IOException { + @RequestParam("id") Long id) throws EsupSignatureRuntimeException, IOException, EsupSignatureException { NexuSignature nexuSignature = nexuService.getNexuSignature(id); AbstractSignatureForm abstractSignatureForm = nexuService.getAbstractSignatureFormFromNexuSignature(nexuSignature); abstractSignatureForm.setSignatureValue(signatureValue.getSignatureValue()); - SignDocumentResponse responseJson = null; - try { - responseJson = nexuService.getSignDocumentResponse(id, signatureValue, abstractSignatureForm, userEppn, nexuSignature.getDocumentToSign()); - signRequestService.updateStatus(id, SignRequestStatus.signed, "Signature", null, "SUCCESS", null,null,null,null, userEppn, authUserEppn); - StepStatus stepStatus = signRequestService.applyEndOfSignRules(id, userEppn, authUserEppn, SignType.nexuSign, ""); - if(stepStatus.equals(StepStatus.last_end)) { - signBookService.completeSignRequest(id, authUserEppn, "Tous les documents sont signés"); - } else if (stepStatus.equals(StepStatus.completed)){ - signBookService.pendingSignRequest(id, null, userEppn, authUserEppn, false); - } - nexuService.delete(id); - return ResponseEntity.ok().body(responseJson); - } catch (EsupSignatureException e) { - return ResponseEntity.internalServerError().body(e.getMessage()); - } + SignDocumentResponse responseJson = nexuService.getSignDocumentResponse(id, signatureValue, abstractSignatureForm, userEppn, nexuSignature.getDocumentToSign()); + signRequestService.updateStatus(id, SignRequestStatus.signed, "Signature", null, "SUCCESS", null,null,null,null, userEppn, authUserEppn); + StepStatus stepStatus = signRequestService.applyEndOfSignRules(id, userEppn, authUserEppn, SignType.nexuSign, ""); + if(stepStatus.equals(StepStatus.last_end)) { + signBookService.completeSignRequest(id, authUserEppn, "Tous les documents sont signés"); + } else if (stepStatus.equals(StepStatus.completed)){ + signBookService.pendingSignRequest(id, null, userEppn, authUserEppn, false); + } + nexuService.delete(id); + return ResponseEntity.ok().body(responseJson); } @PostMapping(value = "/error") diff --git a/src/main/java/org/esupportail/esupsignature/web/controller/user/WizardController.java b/src/main/java/org/esupportail/esupsignature/web/controller/user/WizardController.java index 1562a45e7..52566bc2a 100644 --- a/src/main/java/org/esupportail/esupsignature/web/controller/user/WizardController.java +++ b/src/main/java/org/esupportail/esupsignature/web/controller/user/WizardController.java @@ -193,12 +193,7 @@ public ResponseEntity wizWorkflowSignAddStep(@ModelAttribute("userEppn") if(steps.get(0).getUserSignFirst() != null && steps.get(0).getUserSignFirst()) { signBookService.addUserSignFirstStep(signBookId, userEppn); } - try { - signBookService.addNewStepToSignBook(signBookId, steps, authUserEppn); - } catch (EsupSignatureRuntimeException e) { - logger.debug(e.getMessage()); - return ResponseEntity.internalServerError().build(); - } + signBookService.addNewStepToSignBook(signBookId, steps, authUserEppn); } model.addAttribute("signBook", signBook); model.addAttribute("close", close); @@ -242,12 +237,7 @@ public ResponseEntity wizXWorkflow(@PathVariable("workflowId") Long work User user = (User) model.getAttribute("user"); final Context context = new Context(Locale.FRENCH); Workflow workflow; - try { - workflow = workflowService.addStepToWorkflow(workflowId, steps.get(0).getSignType(), steps.get(0).getAllSignToComplete(), steps.get(0).getChangeable(), steps.get(0), user, false); - } catch (EsupSignatureRuntimeException e) { - logger.debug(e.getMessage()); - return ResponseEntity.internalServerError().build(); - } + workflow = workflowService.addStepToWorkflow(workflowId, steps.get(0).getSignType(), steps.get(0).getAllSignToComplete(), steps.get(0).getChangeable(), steps.get(0), user, false); model.addAttribute("workflow", workflow); model.asMap().forEach(context::setVariable); if(end != null && end) { diff --git a/src/main/java/org/esupportail/esupsignature/web/ws/ExportWsController.java b/src/main/java/org/esupportail/esupsignature/web/ws/ExportWsController.java index 878e03c70..5af0d504a 100644 --- a/src/main/java/org/esupportail/esupsignature/web/ws/ExportWsController.java +++ b/src/main/java/org/esupportail/esupsignature/web/ws/ExportWsController.java @@ -15,6 +15,7 @@ import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; +import java.io.IOException; import java.io.InputStream; import java.net.URLEncoder; import java.nio.charset.StandardCharsets; @@ -36,23 +37,17 @@ public class ExportWsController { @GetMapping(value = "/form/{name}/datas/csv", produces="text/csv") @PreAuthorize("@wsAccessTokenService.isAllAccess(#xApiKey)") - public ResponseEntity getFormDatasCsv(@PathVariable String name, @ModelAttribute("xApiKey") @Parameter(hidden = true) String xApiKey, HttpServletResponse response) { + public ResponseEntity getFormDatasCsv(@PathVariable String name, @ModelAttribute("xApiKey") @Parameter(hidden = true) String xApiKey, HttpServletResponse response) throws IOException { List
forms = formRepository.findFormByNameAndDeletedIsNullOrDeletedIsFalse(name); if (!forms.isEmpty()) { - try { - response.setContentType("text/csv; charset=utf-8"); - response.setHeader("Content-Disposition", "inline; filename=" + URLEncoder.encode(forms.get(0).getName(), StandardCharsets.UTF_8) + ".csv"); - InputStream csvInputStream = dataExportService.getCsvDatasFromForms(forms.stream().map(Form::getWorkflow).collect(Collectors.toList())); - IOUtils.copy(csvInputStream, response.getOutputStream()); - return ResponseEntity.ok().build(); - } catch (Exception e) { - logger.error("get file error", e); - } - } else { - logger.warn("form " + name + " not found"); - return ResponseEntity.notFound().build(); + response.setContentType("text/csv; charset=utf-8"); + response.setHeader("Content-Disposition", "inline; filename=" + URLEncoder.encode(forms.get(0).getName(), StandardCharsets.UTF_8) + ".csv"); + InputStream csvInputStream = dataExportService.getCsvDatasFromForms(forms.stream().map(Form::getWorkflow).collect(Collectors.toList())); + IOUtils.copy(csvInputStream, response.getOutputStream()); + return ResponseEntity.ok().build(); } - return ResponseEntity.internalServerError().build(); + logger.warn("form " + name + " not found"); + return ResponseEntity.notFound().build(); } @ResponseBody diff --git a/src/main/java/org/esupportail/esupsignature/web/ws/FormWsController.java b/src/main/java/org/esupportail/esupsignature/web/ws/FormWsController.java index 99f3c5851..0995745e5 100644 --- a/src/main/java/org/esupportail/esupsignature/web/ws/FormWsController.java +++ b/src/main/java/org/esupportail/esupsignature/web/ws/FormWsController.java @@ -16,7 +16,6 @@ import org.esupportail.esupsignature.dto.WorkflowStepDto; import org.esupportail.esupsignature.entity.Data; import org.esupportail.esupsignature.entity.SignBook; -import org.esupportail.esupsignature.exception.EsupSignatureRuntimeException; import org.esupportail.esupsignature.service.*; import org.esupportail.esupsignature.service.export.DataExportService; import org.slf4j.Logger; @@ -27,6 +26,7 @@ import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; +import java.io.IOException; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; @@ -129,25 +129,20 @@ public ResponseEntity start(@PathVariable Long id, createByEppn = eppn; } if(createByEppn == null) { - throw new EsupSignatureRuntimeException("Required request parameter 'createByEppn' for method parameter type String is not present"); + return ResponseEntity.badRequest().body("Required request parameter 'createByEppn' for method parameter type String is not present"); } - try { - Data data = dataService.addData(id, createByEppn); - TypeReference> type = new TypeReference<>(){}; - Map datas = new HashMap<>(); - if(formDatas != null) { - datas = objectMapper.readValue(formDatas, type); - } - SignBook signBook = signBookService.sendForSign(data.getId(), recipientService.convertRecipientJsonStringToWorkflowStepDtos(stepsJsonString), targetEmails, targetUrls, createByEppn, createByEppn, true, datas, null, signRequestParamsJsonString, title, sendEmailAlert, comment); - signBookService.addViewers(signBook.getId(), recipientsCCEmails); - if(json) { - return ResponseEntity.ok(signBook.getSignRequests().get(0).getId()); - } else { - return ResponseEntity.ok(signBook.getSignRequests().get(0).getId().toString()); - } - } catch (Exception e) { - logger.error(e.getMessage(), e); - return ResponseEntity.internalServerError().body("-1"); + Data data = dataService.addData(id, createByEppn); + TypeReference> type = new TypeReference<>(){}; + Map datas = new HashMap<>(); + if(formDatas != null) { + datas = objectMapper.readValue(formDatas, type); + } + SignBook signBook = signBookService.sendForSign(data.getId(), recipientService.convertRecipientJsonStringToWorkflowStepDtos(stepsJsonString), targetEmails, targetUrls, createByEppn, createByEppn, true, datas, null, signRequestParamsJsonString, title, sendEmailAlert, comment); + signBookService.addViewers(signBook.getId(), recipientsCCEmails); + if(json) { + return ResponseEntity.ok(signBook.getSignRequests().get(0).getId()); + } else { + return ResponseEntity.ok(signBook.getSignRequests().get(0).getId().toString()); } } @@ -181,7 +176,7 @@ public ResponseEntity startWithDoc(@PathVariable Long id, @RequestParam(required = false) @Parameter(description = "Retour au format json (facultatif, false par défaut)") Boolean json, @RequestParam(required = false) @Parameter(description = "commentaire") String comment, @ModelAttribute("xApiKey") @Parameter(hidden = true) String xApiKey - ) { + ) throws IOException { if(json == null) { json = false; } @@ -192,22 +187,17 @@ public ResponseEntity startWithDoc(@PathVariable Long id, steps = recipientService.convertRecipientEmailsToStep(recipientEmails); } Data data = dataService.addData(id, createByEppn); - try { - TypeReference> type = new TypeReference<>(){}; - Map datas = new HashMap<>(); - if(formDatas != null) { - datas.putAll(objectMapper.readValue(formDatas, type)); - } - SignBook signBook = signBookService.sendForSign(data.getId(), steps, targetEmails, targetUrls, createByEppn, createByEppn, true, datas, multipartFiles[0].getInputStream(), signRequestParamsJsonString, title, sendEmailAlert, comment); - signRequestService.addAttachement(attachementMultipartFiles, null, signBook.getSignRequests().get(0).getId(), createByEppn); - if(json) { - return ResponseEntity.ok(signBook.getSignRequests().get(0).getId()); - } else { - return ResponseEntity.ok(signBook.getSignRequests().get(0).getId().toString()); - } - } catch (Exception e) { - logger.error(e.getMessage(), e); - return ResponseEntity.internalServerError().body("-1"); + TypeReference> type = new TypeReference<>(){}; + Map datas = new HashMap<>(); + if(formDatas != null) { + datas.putAll(objectMapper.readValue(formDatas, type)); + } + SignBook signBook = signBookService.sendForSign(data.getId(), steps, targetEmails, targetUrls, createByEppn, createByEppn, true, datas, multipartFiles[0].getInputStream(), signRequestParamsJsonString, title, sendEmailAlert, comment); + signRequestService.addAttachement(attachementMultipartFiles, null, signBook.getSignRequests().get(0).getId(), createByEppn); + if(json) { + return ResponseEntity.ok(signBook.getSignRequests().get(0).getId()); + } else { + return ResponseEntity.ok(signBook.getSignRequests().get(0).getId().toString()); } } diff --git a/src/main/java/org/esupportail/esupsignature/web/ws/SignRequestWsController.java b/src/main/java/org/esupportail/esupsignature/web/ws/SignRequestWsController.java index b3e4d1078..2278b0a27 100644 --- a/src/main/java/org/esupportail/esupsignature/web/ws/SignRequestWsController.java +++ b/src/main/java/org/esupportail/esupsignature/web/ws/SignRequestWsController.java @@ -1,6 +1,7 @@ package org.esupportail.esupsignature.web.ws; import com.fasterxml.jackson.core.JsonProcessingException; +import com.google.zxing.WriterException; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.media.ArraySchema; @@ -24,6 +25,7 @@ import org.esupportail.esupsignature.service.SignRequestService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.security.access.prepost.PreAuthorize; @@ -31,6 +33,7 @@ import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; +import java.io.IOException; import java.util.List; import java.util.Map; @@ -101,7 +104,7 @@ public ResponseEntity create(@Parameter(description = "Multipart stream du fi @RequestParam(required = false) @Parameter(deprecated = true, description = "Forcer la signature de tous les documents") Boolean forceAllSign, @RequestParam(required = false) @Parameter(deprecated = true, description = "Type de signature", schema = @Schema(allowableValues = {"visa", "pdfImageStamp", "certSign", "nexuSign"}), examples = {@ExampleObject(value = "visa"), @ExampleObject(value = "pdfImageStamp"), @ExampleObject(value = "certSign"), @ExampleObject(value = "nexuSign")}) String signType, @RequestParam(required = false) @Parameter(deprecated = true, description = "EPPN du créateur/propriétaire de la demande (ancien nom)") String eppn - ) { + ) throws EsupSignatureException { if(json == null) { json = false; } @@ -128,17 +131,15 @@ public ResponseEntity create(@Parameter(description = "Multipart stream du fi workflowStepDtos = recipientService.convertRecipientJsonStringToWorkflowStepDtos(stepsJsonString); } if(workflowStepDtos != null) { - try { - Map signBookStringMap = signBookService.createAndSendSignBook(title, multipartFiles, pending, workflowStepDtos, createByEppn, true, forceAllSign, targetUrl); - List signRequestIds = signBookStringMap.keySet().stream().flatMap(sb -> sb.getSignRequests().stream().map(signRequest -> signRequest.getId().toString())).toList(); - if(json) { - return ResponseEntity.ok(signRequestIds); - } else { - return ResponseEntity.ok(org.apache.commons.lang.StringUtils.join(signRequestIds, ",")); - } - } catch (EsupSignatureException e) { - logger.error(e.getMessage(), e); - return ResponseEntity.internalServerError().body("-1"); + Map signBookStringMap = signBookService.createAndSendSignBook(title, multipartFiles, pending, workflowStepDtos, createByEppn, true, forceAllSign, targetUrl); + List signRequestIds = signBookStringMap.keySet().stream().flatMap(sb -> sb.getSignRequests().stream().map(signRequest -> signRequest.getId().toString())).toList(); + if(signRequestIds.isEmpty()) { + return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("-1"); + } + if(json) { + return ResponseEntity.ok(signRequestIds); + } else { + return ResponseEntity.ok(org.apache.commons.lang.StringUtils.join(signRequestIds, ",")); } } return ResponseEntity.internalServerError().body("-1"); @@ -220,14 +221,9 @@ public ResponseEntity deleteSignBook(@PathVariable Long id, @Operation(security = @SecurityRequirement(name = "x-api-key"), description = "Récupérer le dernier fichier signé d'une demande", responses = @ApiResponse(responseCode = "200", content = @Content(schema = @Schema(implementation = byte[].class), mediaType = "application/pdf"))) @PreAuthorize("@wsAccessTokenService.readWorkflowAccess(#id, #xApiKey)") public ResponseEntity getLastFileFromSignRequest(@PathVariable("id") Long id, - @ModelAttribute("xApiKey") @Parameter(hidden = true) String xApiKey, HttpServletResponse httpServletResponse) { - try { - signRequestService.getToSignFileResponse(id, "form-data", httpServletResponse); - return ResponseEntity.ok().build(); - } catch (Exception e) { - logger.error(e.getMessage(), e); - } - return ResponseEntity.internalServerError().build(); + @ModelAttribute("xApiKey") @Parameter(hidden = true) String xApiKey, HttpServletResponse httpServletResponse) throws IOException, EsupSignatureException { + signRequestService.getToSignFileResponse(id, "form-data", httpServletResponse); + return ResponseEntity.ok().build(); } @GetMapping(value = "/get-last-file-and-report/{id}") @@ -242,7 +238,7 @@ public ResponseEntity getLastFileAndReport(@PathVariable("id") Long id, } catch (Exception e) { logger.error(e.getMessage(), e); } - return ResponseEntity.internalServerError().build(); + return ResponseEntity.notFound().build(); } @GetMapping(value = "/print-with-code/{id}") @@ -250,27 +246,17 @@ public ResponseEntity getLastFileAndReport(@PathVariable("id") Long id, @Operation(security = @SecurityRequirement(name = "x-api-key"), description = "Récupérer le dernier fichier signé d'une demande avec un datamatrix apposé dessus", responses = @ApiResponse(responseCode = "200", content = @Content(schema = @Schema(implementation = byte[].class), mediaType = "application/pdf"))) @PreAuthorize("@wsAccessTokenService.readWorkflowAccess(#id, #xApiKey)") public ResponseEntity printWithCode(@PathVariable("id") Long id, - @ModelAttribute("xApiKey") @Parameter(hidden = true) String xApiKey, HttpServletResponse httpServletResponse) { - try { - signRequestService.getToSignFileResponseWithCode(id, httpServletResponse); - return ResponseEntity.ok().build(); - } catch (Exception e) { - logger.error(e.getMessage(), e); - } - return ResponseEntity.internalServerError().build(); + @ModelAttribute("xApiKey") @Parameter(hidden = true) String xApiKey, HttpServletResponse httpServletResponse) throws IOException, WriterException { + signRequestService.getToSignFileResponseWithCode(id, httpServletResponse); + return ResponseEntity.ok().build(); } @GetMapping(value = "/all", produces = MediaType.APPLICATION_JSON_VALUE) @ResponseBody @Operation(security = @SecurityRequirement(name = "x-api-key"), description = "Récupérer toutes les demandes", responses = @ApiResponse(responseCode = "200", content = @Content(schema = @Schema(implementation = List.class), mediaType = "application/pdf"))) @PreAuthorize("@wsAccessTokenService.isAllAccess(#xApiKey)") - public ResponseEntity getAllSignRequests(@ModelAttribute("xApiKey") @Parameter(hidden = true) String xApiKey) { - try { - return ResponseEntity.ok(signRequestService.getAllToJSon()); - } catch (Exception e) { - logger.error(e.getMessage(), e); - } - return ResponseEntity.internalServerError().build(); + public ResponseEntity getAllSignRequests(@ModelAttribute("xApiKey") @Parameter(hidden = true) String xApiKey) throws JsonProcessingException { + return ResponseEntity.ok(signRequestService.getAllToJSon()); } @GetMapping(value = "/return-test") diff --git a/src/main/java/org/esupportail/esupsignature/web/ws/WorkflowWsController.java b/src/main/java/org/esupportail/esupsignature/web/ws/WorkflowWsController.java index 542d97180..b6d75cb4c 100644 --- a/src/main/java/org/esupportail/esupsignature/web/ws/WorkflowWsController.java +++ b/src/main/java/org/esupportail/esupsignature/web/ws/WorkflowWsController.java @@ -12,13 +12,13 @@ import org.esupportail.esupsignature.dto.WorkflowDto; import org.esupportail.esupsignature.dto.WorkflowStepDto; import org.esupportail.esupsignature.entity.SignRequestParams; -import org.esupportail.esupsignature.exception.EsupSignatureRuntimeException; import org.esupportail.esupsignature.service.RecipientService; import org.esupportail.esupsignature.service.SignBookService; import org.esupportail.esupsignature.service.SignRequestParamsService; import org.esupportail.esupsignature.service.WorkflowService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.security.access.prepost.PreAuthorize; @@ -103,7 +103,7 @@ public ResponseEntity start(@PathVariable Long id, json = false; } if(createByEppn == null) { - throw new EsupSignatureRuntimeException("Required request parameter 'createByEppn' for method parameter type String is not present"); + return ResponseEntity.badRequest().body("Required request parameter 'createByEppn' for method parameter type String is not present"); } if(recipientEmails == null && recipientsEmails != null && !recipientsEmails.isEmpty()) { recipientEmails = recipientsEmails; @@ -118,16 +118,14 @@ public ResponseEntity start(@PathVariable Long id, if (signRequestParamsJsonString != null) { signRequestParamses = signRequestParamsService.getSignRequestParamsesFromJson(signRequestParamsJsonString); } - try { - List signRequestIds = signBookService.startWorkflow(id, multipartFiles, createByEppn, title, steps, targetEmails, targetUrls, signRequestParamses, scanSignatureFields, sendEmailAlert, comment); - if(json) { - return ResponseEntity.ok(signRequestIds); - } else { - return ResponseEntity.ok(org.apache.commons.lang.StringUtils.join(signRequestIds, ",")); - } - } catch (EsupSignatureRuntimeException e) { - logger.error(e.getMessage(), e); - return ResponseEntity.internalServerError().body("-1"); + List signRequestIds = signBookService.startWorkflow(id, multipartFiles, createByEppn, title, steps, targetEmails, targetUrls, signRequestParamses, scanSignatureFields, sendEmailAlert, comment); + if(signRequestIds.isEmpty()) { + return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("-1"); + } + if(json) { + return ResponseEntity.ok(signRequestIds); + } else { + return ResponseEntity.ok(org.apache.commons.lang.StringUtils.join(signRequestIds, ",")); } } diff --git a/src/main/java/org/esupportail/esupsignature/web/wssecure/GlobalWsSecureController.java b/src/main/java/org/esupportail/esupsignature/web/wssecure/GlobalWsSecureController.java index ee86d2028..3b0b876f1 100644 --- a/src/main/java/org/esupportail/esupsignature/web/wssecure/GlobalWsSecureController.java +++ b/src/main/java/org/esupportail/esupsignature/web/wssecure/GlobalWsSecureController.java @@ -17,6 +17,7 @@ import org.esupportail.esupsignature.service.utils.StepStatus; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.security.access.prepost.PreAuthorize; @@ -73,20 +74,15 @@ public ResponseEntity sign(@ModelAttribute("userEppn") String userEppn, @RequestParam(value = "formData", required = false) String formData, @RequestParam(value = "password", required = false) String password, @RequestParam(value = "certType", required = false) String certType, - HttpSession httpSession) { + HttpSession httpSession) throws IOException { Object userShareString = httpSession.getAttribute("userShareId"); Long userShareId = null; if(userShareString != null) userShareId = Long.valueOf(userShareString.toString()); - try { - StepStatus stepStatus = signBookService.initSign(signRequestId, signRequestParamsJsonString, comment, formData, password, certType, userShareId, userEppn, authUserEppn); - if(stepStatus.equals(StepStatus.nexu_redirect)) { - return ResponseEntity.ok().body("initNexu"); - } - return ResponseEntity.ok().build(); - } catch (Exception e) { - logger.warn(e.getMessage(), e); - return ResponseEntity.internalServerError().body(e.getMessage()); + StepStatus stepStatus = signBookService.initSign(signRequestId, signRequestParamsJsonString, comment, formData, password, certType, userShareId, userEppn, authUserEppn); + if(stepStatus.equals(StepStatus.nexu_redirect)) { + return ResponseEntity.ok().body("initNexu"); } + return ResponseEntity.ok().build(); } @PreAuthorize("@preAuthorizeService.signRequestView(#signRequestId, #userEppn, #authUserEppn)") @@ -106,7 +102,7 @@ public ResponseEntity getLastFile(@ModelAttribute("userEppn") String userE } catch (Exception e) { logger.error("get file error", e); } - return ResponseEntity.internalServerError().build(); + return ResponseEntity.notFound().build(); } @PreAuthorize("@preAuthorizeService.documentView(#documentId, #userEppn, #authUserEppn)") @@ -125,7 +121,7 @@ public ResponseEntity getLastFileFromSignRequestInLine(@ModelAttribute("us } catch (Exception e) { logger.error(e.getMessage(), e); } - return ResponseEntity.internalServerError().build(); + return ResponseEntity.notFound().build(); } @PreAuthorize("@preAuthorizeService.signRequestView(#id, #userEppn, #authUserEppn)") @@ -137,7 +133,7 @@ public ResponseEntity getLastFileFromSignRequestPdf(@ModelAttribute("userE } catch (Exception e) { logger.error(e.getMessage(), e); } - return ResponseEntity.internalServerError().build(); + return ResponseEntity.notFound().build(); } @PreAuthorize("@preAuthorizeService.signRequestView(#id, #userEppn, #authUserEppn)") @@ -149,7 +145,7 @@ public ResponseEntity getLastFileReport(@ModelAttribute("userEppn") String } catch (Exception e) { logger.error("get file error", e); } - return ResponseEntity.internalServerError().build(); + return ResponseEntity.notFound().build(); } @PreAuthorize("@preAuthorizeService.signBookView(#id, #userEppn, #authUserEppn)") @@ -209,7 +205,7 @@ public ResponseEntity printWithCode(@ModelAttribute("userEppn") String use } catch (Exception e) { logger.error(e.getMessage(), e); } - return ResponseEntity.internalServerError().build(); + return ResponseEntity.notFound().build(); } @PreAuthorize("@preAuthorizeService.signBookCreator(#signBookId, #userEppn)") @@ -218,14 +214,10 @@ public ResponseEntity printWithCode(@ModelAttribute("userEppn") String use public ResponseEntity addDocumentToNewSignRequest(@PathVariable("signBookId") Long signBookId, @ModelAttribute("userEppn") String userEppn, @ModelAttribute("authUserEppn") String authUserEppn, @RequestParam("multipartFiles") MultipartFile[] multipartFiles) throws EsupSignatureIOException { logger.info("start add documents"); if(globalProperties.getPdfOnly() && Arrays.stream(multipartFiles).anyMatch(m -> !Objects.equals(m.getContentType(), "application/pdf"))) { - return ResponseEntity.internalServerError().body("Seul les fichiers PDF sont autorisés"); - } - try { - signBookService.addDocumentsToSignBook(signBookId, multipartFiles, authUserEppn); - return ResponseEntity.ok().body(signBookId.toString()); - } catch (Exception e) { - return ResponseEntity.internalServerError().body(e.getMessage()); + return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body("Seul les fichiers PDF sont autorisés"); } + signBookService.addDocumentsToSignBook(signBookId, multipartFiles, authUserEppn); + return ResponseEntity.ok().body(signBookId.toString()); } @PreAuthorize("@preAuthorizeService.signBookManage(#id, #authUserEppn)")