From 5b21d3fb0c53caf2e3cf1457af21099b072fc058 Mon Sep 17 00:00:00 2001 From: Marcin Ireneusz Trycz Date: Wed, 12 Jun 2019 09:30:52 +0200 Subject: [PATCH] [skip ci] prova cache npm --- .gitlab-ci.yml | 2 +- .jhipster/ExternalMessage.json | 8 ++ .../cnr/si/config/ExtenalMessageSender.java | 86 +++++++++++++++++-- .../it/cnr/si/domain/ExternalMessage.java | 24 +++++- ...rocessAccordiInternazionaliDomande_v1.java | 3 +- .../listeners/cnr/acquisti/EndAcquisti.java | 2 +- .../acquisti/ManageProcessAcquisti_v1.java | 2 +- .../si/service/ExternalMessageService.java | 12 +-- ...320102314_added_entity_ExternalMessage.xml | 6 +- .../external-message-detail.html | 4 + .../external-message-dialog.html | 29 ++++++- .../external-message.state.js | 3 + .../external-message/external-messages.html | 2 + src/main/webapp/i18n/en/externalMessage.json | 3 +- src/main/webapp/i18n/it/externalMessage.json | 3 +- .../ExternalMessageGatlingTest.scala | 2 +- .../rest/ExternalMessageResourceIntTest.java | 56 ++++++++++-- 17 files changed, 219 insertions(+), 28 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index bb505c21a..6cb1dc2a2 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -96,7 +96,7 @@ release_artifact: script: - git checkout -B "$CI_BUILD_REF_NAME" # mi metto in condizione del push per l'utente con la deploy key - - git remote set-url --push origin git@git.si.cnr.it:$CI_PROJECT_PATH + - git remote set-url --push origin https://git@git.si.cnr.it:documentale/sprint-flows - mvn -Dresume=false release:prepare release:perform -Pprod -DpushChanges=false -DlocalCheckout=true - git push --tags - git commit --amend -m "[ci skip] prepare for next development iteration" diff --git a/.jhipster/ExternalMessage.json b/.jhipster/ExternalMessage.json index 23a9c9111..aa9166c8f 100644 --- a/.jhipster/ExternalMessage.json +++ b/.jhipster/ExternalMessage.json @@ -42,6 +42,14 @@ { "fieldName": "lastErrorMessage", "fieldType": "String" + }, + { + "fieldName": "application", + "fieldType": "ExternalApplication", + "fieldValues": "ABIL,SIGLA,ACE,MISSIONI,ATTESTATI,GENERIC", + "fieldValidateRules": [ + "required" + ] } ], "changelogDate": "20190320102314", diff --git a/src/main/java/it/cnr/si/config/ExtenalMessageSender.java b/src/main/java/it/cnr/si/config/ExtenalMessageSender.java index 2e204de58..4a16a8522 100644 --- a/src/main/java/it/cnr/si/config/ExtenalMessageSender.java +++ b/src/main/java/it/cnr/si/config/ExtenalMessageSender.java @@ -1,21 +1,30 @@ package it.cnr.si.config; import it.cnr.si.domain.ExternalMessage; +import it.cnr.si.domain.enumeration.ExternalApplication; import it.cnr.si.domain.enumeration.ExternalMessageStatus; import it.cnr.si.service.ExternalMessageService; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.context.annotation.Configuration; -import org.springframework.http.HttpEntity; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; +import org.springframework.core.env.Environment; +import org.springframework.http.*; +import org.springframework.http.client.ClientHttpRequestExecution; +import org.springframework.http.client.ClientHttpRequestInterceptor; +import org.springframework.http.client.ClientHttpResponse; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.util.MultiValueMap; import org.springframework.web.client.RestTemplate; import javax.annotation.PostConstruct; import javax.inject.Inject; +import java.io.IOException; +import java.net.URI; +import java.util.HashMap; +import java.util.List; +import java.util.Map; @EnableScheduling @Configuration @@ -25,12 +34,37 @@ public class ExtenalMessageSender { @Inject private ExternalMessageService externalMessageService; - - private RestTemplate restTemplate; + @Inject + private Environment env; @PostConstruct public void init() { - restTemplate = new RestTemplate(); + + // ABIL + + RestTemplate abilTemplate = new RestTemplate(); + List interceptors = abilTemplate.getInterceptors(); + interceptors.add(new AbilRequestInterceptor()); + abilTemplate.setInterceptors(interceptors); + +// ResourceOwnerPasswordResourceDetails resource = new ResourceOwnerPasswordResourceDetails(); +// resource.setUsername(env.getProperty("cnr.abil.username", String.class)); +// resource.setPassword(env.getProperty("cnr.abil.password", String.class)); +// +// resource.setScope(Arrays.asList("read", "write")); +// resource.setAccessTokenUri(env.getProperty("cnr.abil.accessTokenUri", String.class)); +//// resource.setClientId("cnr.abil.clientId"); +//// resource.setClientSecret(env.getProperty("cnr.abil.clientSecret", String.class)); +// +// DefaultOAuth2ClientContext clientContext = new DefaultOAuth2ClientContext(); +// RestTemplate abil = new OAuth2RestTemplate(resource, clientContext); + + ExternalApplication.ABIL.setTemplate(abilTemplate); + + // GENERIC + + ExternalApplication.GENERIC.setTemplate(new RestTemplate()); + } @Scheduled(fixedDelay = 600000, initialDelay = 10000) // 10m @@ -52,7 +86,9 @@ private void send(ExternalMessage msg) { ResponseEntity response = null; try { - response = restTemplate.exchange( + RestTemplate template = msg.getApplication().getTemplate(); + + response = template.exchange( msg.getUrl(), msg.getVerb().value(), new HttpEntity<>(msg.getPayload()), @@ -86,6 +122,42 @@ else if (response.getBody() == null) } } + + private class AbilRequestInterceptor implements ClientHttpRequestInterceptor { + + private String id_token = null; + + @Override + public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution) throws IOException { + + request.getHeaders().add("Authorization", "Bearer "+ id_token); + ClientHttpResponse response = execution.execute(request, body); + + if ( response.getStatusCode() == HttpStatus.FORBIDDEN || response.getStatusCode() == HttpStatus.UNAUTHORIZED) { + + Map auth = new HashMap<>(); + auth.put("username", env.getProperty("cnr.abil.username")); + auth.put("password", env.getProperty("cnr.abil.password")); + MultiValueMap headers = new HttpHeaders(); + headers.add(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE); + RequestEntity entity = new RequestEntity( + auth, + headers, + HttpMethod.POST, + URI.create(env.getProperty("cnr.abil.loginUrl"))); + + ResponseEntity resp = new RestTemplate().exchange(entity, Map.class); + + this.id_token = (String) resp.getBody().get("id_token"); + + request.getHeaders().add("Authorization", "Bearer "+ id_token); + response = execution.execute(request, body); + } + + + return response; + } + } } diff --git a/src/main/java/it/cnr/si/domain/ExternalMessage.java b/src/main/java/it/cnr/si/domain/ExternalMessage.java index f106960ea..21d02fd37 100644 --- a/src/main/java/it/cnr/si/domain/ExternalMessage.java +++ b/src/main/java/it/cnr/si/domain/ExternalMessage.java @@ -12,6 +12,8 @@ import it.cnr.si.domain.enumeration.ExternalMessageStatus; +import it.cnr.si.domain.enumeration.ExternalApplication; + /** * A ExternalMessage. */ @@ -44,12 +46,18 @@ public class ExternalMessage implements Serializable { @Column(name = "status", nullable = false) private ExternalMessageStatus status; - @Column(name = "retries") + @NotNull + @Column(name = "retries", nullable = false) private Integer retries; @Column(name = "last_error_message") private String lastErrorMessage; + @NotNull + @Enumerated(EnumType.STRING) + @Column(name = "application", nullable = false) + private ExternalApplication application; + public Long getId() { return id; } @@ -136,6 +144,19 @@ public void setLastErrorMessage(String lastErrorMessage) { this.lastErrorMessage = lastErrorMessage; } + public ExternalApplication getApplication() { + return application; + } + + public ExternalMessage application(ExternalApplication application) { + this.application = application; + return this; + } + + public void setApplication(ExternalApplication application) { + this.application = application; + } + @Override public boolean equals(Object o) { if (this == o) { @@ -166,6 +187,7 @@ public String toString() { ", status='" + status + "'" + ", retries='" + retries + "'" + ", lastErrorMessage='" + lastErrorMessage + "'" + + ", application='" + application + "'" + '}'; } } diff --git a/src/main/java/it/cnr/si/flows/ng/listeners/cnr/accordiInternazionaliDomande/ManageProcessAccordiInternazionaliDomande_v1.java b/src/main/java/it/cnr/si/flows/ng/listeners/cnr/accordiInternazionaliDomande/ManageProcessAccordiInternazionaliDomande_v1.java index 96fc961d4..c5cccdb26 100644 --- a/src/main/java/it/cnr/si/flows/ng/listeners/cnr/accordiInternazionaliDomande/ManageProcessAccordiInternazionaliDomande_v1.java +++ b/src/main/java/it/cnr/si/flows/ng/listeners/cnr/accordiInternazionaliDomande/ManageProcessAccordiInternazionaliDomande_v1.java @@ -17,7 +17,6 @@ import it.cnr.si.flows.ng.service.FlowsAttachmentService; import it.cnr.si.flows.ng.service.FlowsPdfService; import it.cnr.si.flows.ng.service.FlowsProcessInstanceService; -import it.cnr.si.flows.ng.service.FlowsTaskService; import it.cnr.si.flows.ng.service.ProtocolloDocumentoService; import it.cnr.si.service.ExternalMessageService; import it.cnr.si.domain.enumeration.ExternalMessageVerb; @@ -78,7 +77,7 @@ public void restToApplicazioneAccordiBilaterali(DelegateExecution execution, Sta put("stato", statoDomanda.name().toString()); } }; - externalMessageService.createExternalMessage(urlAccordiBilaterali, ExternalMessageVerb.POST, abilPayload); + externalMessageService.createExternalMessage(urlAccordiBilaterali, ExternalMessageVerb.POST, abilPayload, null); } diff --git a/src/main/java/it/cnr/si/flows/ng/listeners/cnr/acquisti/EndAcquisti.java b/src/main/java/it/cnr/si/flows/ng/listeners/cnr/acquisti/EndAcquisti.java index dd6fcdfe9..74e573fd4 100644 --- a/src/main/java/it/cnr/si/flows/ng/listeners/cnr/acquisti/EndAcquisti.java +++ b/src/main/java/it/cnr/si/flows/ng/listeners/cnr/acquisti/EndAcquisti.java @@ -15,7 +15,7 @@ public class EndAcquisti { public void onEvent(ActivitiEvent event) { if (event.getType() == ActivitiEventType.PROCESS_COMPLETED) { - externalMessageService.createExternalMessage("url", ExternalMessageVerb.POST, new HashMap()); + externalMessageService.createExternalMessage("url", ExternalMessageVerb.POST, new HashMap(), null); } } } diff --git a/src/main/java/it/cnr/si/flows/ng/listeners/cnr/acquisti/ManageProcessAcquisti_v1.java b/src/main/java/it/cnr/si/flows/ng/listeners/cnr/acquisti/ManageProcessAcquisti_v1.java index 9d023b9ca..5486ec596 100644 --- a/src/main/java/it/cnr/si/flows/ng/listeners/cnr/acquisti/ManageProcessAcquisti_v1.java +++ b/src/main/java/it/cnr/si/flows/ng/listeners/cnr/acquisti/ManageProcessAcquisti_v1.java @@ -699,7 +699,7 @@ public void notify(DelegateExecution execution) throws Exception { //TODO implementare le url a seconda del contesto String urlSigla = "www.google.it"; Map siglaPayload = createSiglaPayload(execution); - externalMessageService.createExternalMessage(urlSigla, ExternalMessageVerb.POST, siglaPayload); + externalMessageService.createExternalMessage(urlSigla, ExternalMessageVerb.POST, siglaPayload, null); prepareFilesToSigla(execution); };break; case "end-stipulato-end": { diff --git a/src/main/java/it/cnr/si/service/ExternalMessageService.java b/src/main/java/it/cnr/si/service/ExternalMessageService.java index 28fcdf9c7..fadce6f5c 100644 --- a/src/main/java/it/cnr/si/service/ExternalMessageService.java +++ b/src/main/java/it/cnr/si/service/ExternalMessageService.java @@ -1,7 +1,7 @@ package it.cnr.si.service; -import com.google.gson.Gson; import it.cnr.si.domain.ExternalMessage; +import it.cnr.si.domain.enumeration.ExternalApplication; import it.cnr.si.domain.enumeration.ExternalMessageStatus; import it.cnr.si.domain.enumeration.ExternalMessageVerb; import it.cnr.si.repository.ExternalMessageRepository; @@ -78,14 +78,16 @@ public void delete(Long id) { externalMessageRepository.delete(id); } - public void createExternalMessage(String url, ExternalMessageVerb verb, Map payload) { + public void createExternalMessage(String url, ExternalMessageVerb verb, Map payload, ExternalApplication app) { - JSONObject payloadString = new JSONObject(payload); - - ExternalMessage msg = new ExternalMessage(); + if (app != null) + msg.setApplication(app); + else + msg.setApplication(ExternalApplication.GENERIC); + msg.setUrl(url); msg.setVerb(verb); msg.setPayload(payloadString.toString()); diff --git a/src/main/resources/config/liquibase/cnr/changelog/20190320102314_added_entity_ExternalMessage.xml b/src/main/resources/config/liquibase/cnr/changelog/20190320102314_added_entity_ExternalMessage.xml index 45626259b..b9acd0ee3 100644 --- a/src/main/resources/config/liquibase/cnr/changelog/20190320102314_added_entity_ExternalMessage.xml +++ b/src/main/resources/config/liquibase/cnr/changelog/20190320102314_added_entity_ExternalMessage.xml @@ -44,7 +44,11 @@ - + + + + + diff --git a/src/main/webapp/app/entities/external-message/external-message-detail.html b/src/main/webapp/app/entities/external-message/external-message-detail.html index ea0e3c6ac..d076f1a15 100644 --- a/src/main/webapp/app/entities/external-message/external-message-detail.html +++ b/src/main/webapp/app/entities/external-message/external-message-detail.html @@ -28,6 +28,10 @@

External Message {{vm.externalMessage.lastErrorMessage}} +
Application
+
+ {{vm.externalMessage.application}} +