SPW-DIG / metawal-core-geonetwork

Metawal - Catalogue pour l'information géographique de Wallonie
http://metawal.wallonie.be
GNU General Public License v2.0
3 stars 1 forks source link

INSPIRE Reference Validator API endpoint - add API key #661

Closed vbombaerts closed 2 years ago

vbombaerts commented 2 years ago

Ajout de la clé d'API pour la validation INSPIRE. Attention : il existe des limitations d'utilisation. Il faudrait que Metawal en tienne compte en avertissant l'utilisateur et peut-être en gérant ces limitations (peut-être en paramètre dans l'interface d'admin pour les adapter facilement si jamais le JRC les change).

The API endpoint is located at https://yzyiqfakm4.execute-api.eu-west-1.amazonaws.com/validator. This location will be modified in the future to substitute the current domain name of the Validator. Please use this token as a value for the header 'X-API-key' in any POST request performed to the path /validator/v2/TestRuns to be able to create new TestRuns in the system. Please take into account that if you execute this operation without providing a valid API key, or you exceed the quota of 100 requests/week and the limitation of 1 request/second, the response of the API will return an error "403 Forbidden". If you encounter any issue with the integration of your systems with the API gateway, please report the issue on GitHub (without publicly disclosing your token).

fxprunayre commented 2 years ago

@davinciagf A déployer pour test avec ajout de la conf en base cf. https://github.com/SPW-DIG/metawal-core-geonetwork/commit/825f4b251e1d4ef912acaeb5e6e14ba840012b5e

vbombaerts commented 2 years ago

Pour le moment ça tourne sans donner de résultat. J'ai attendu 10-15 min. image

vbombaerts commented 2 years ago

Depuis l'interface d'édition : image

vbombaerts commented 2 years ago

Même après mise à jour des paramètres du validateur on a le même résultat. (càd pas de résultat) Par ailleurs, le macaron relatif à l'état de validation INSPIRE ne s'affiche pas dans l'interface de contribution.

fxprunayre commented 2 years ago

Par ailleurs, le macaron relatif à l'état de validation INSPIRE ne s'affiche pas dans l'interface de contribution.

Ce sera corrigé avec https://github.com/titellus/core-geonetwork/pull/50. Ca doit pas être systématique mais en effet.

Même après mise à jour des paramètres du validateur on a le même résultat. (càd pas de résultat)

En prod ou en valid ? En prod il manque la settings pour la clé - on n'a pas joué la migration ? cf. https://github.com/SPW-DIG/metawal-core-geonetwork/blob/metawal-4.0.x/web/src/main/webapp/WEB-INF/classes/setup/sql-metawal/migrate/4.0.6/migrate-mw.sql#L7

vbombaerts commented 2 years ago

On est en test. Ils ont passé l'appli en prod avant qu'on donne le go :(

vbombaerts commented 2 years ago

On a le même message que si on avait configuré avec l'ancienne adresse du validateur. La nouvelle adresse est-elle bien prise en compte ?

fxprunayre commented 2 years ago

Ok si upload, Pas ok si validation par portail INSPIRE

fxprunayre commented 2 years ago

Ok si upload, Pas ok si validation par portail INSPIRE

A priori, on envoie bien la clé dans le mode portail: image

C'est difficile à tester en local, car le validateur ne peux pas accéder à notre machine.

Avec curl, on a dépassé notre quota du mois :/

J'ajoute l'affichage de l'erreur dans l'éditeur

image

vbombaerts commented 2 years ago

J'ai envoyé un message au support pour une indulgence.

vbombaerts commented 2 years ago

Re testé ce jour en env. de test. Pas d'erreur dans l'interface. Le timer tourne et s'arrête mais aucun statut de validation au final. image

Dans la console, le résultat de la requête est 400

{message: "IOException", code: "runtime_exception",…}
code: "runtime_exception"
description: "Error while creating test on validator side. Status is: 200 (OK). Error: {\"error\":\"unable to find valid certification path to requested target\",\"timestamp\":\"1634894743863\",\"url\":\"http://inspire.ec.europa.eu/validator/v2/TestRuns\",\"stacktrace\":[\"sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target\",\"\\tat sun.security.provider.certpath.SunCertPathBuilder.build(SunCertPathBuilder.java:146)\",\"\\tat sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:131)\",\"\\tat java.security.cert.CertPathBuilder.build(CertPathBuilder.java:280)\",\"\\tat sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:382)\",\" [wrapped] sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target\",\"\\tat sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:387)\",\"\\tat sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:292)\",\"\\tat sun.security.validator.Validator.validate(Validator.java:260)\",\"\\tat sun.security.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:324)\",\"\\tat sun.security.ssl.X509TrustManagerImpl.checkTrusted(X509TrustManagerImpl.java:229)\",\"\\tat sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:124)\",\"\\tat sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1491)\",\" [wrapped] javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target\",\"\\tat sun.security.ssl.Alerts.getSSLException(Alerts.java:192)\",\"\\tat sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1949)\",\"\\tat sun.security.ssl.Handshaker.fatalSE(Handshaker.java:302)\",\"\\tat sun.security.ssl.Handshaker.fatalSE(Handshaker.java:296)\",\"\\tat sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1509)\",\"\\tat sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:216)\",\"\\tat sun.security.ssl.Handshaker.processLoop(Handshaker.java:979)\",\"\\tat sun.security.ssl.Handshaker.process_record(Handshaker.java:914)\",\"\\tat sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1062)\",\"\\tat sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1375)\",\"\\tat sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1403)\",\"\\tat sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1387)\",\"\\tat sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:559)\",\"\\tat sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185)\",\"\\tat sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1513)\",\"\\tat sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1441)\",\"\\tat java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:480)\",\"\\tat sun.net.www.protocol.https.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:338)\",\"\\tat de.interactive_instruments.UriUtils.followRedirects(UriUtils.java:902)\",\"\\tat de.interactive_instruments.UriUtils.openHttpGetConnection(UriUtils.java:876)\",\"\\tat de.interactive_instruments.UriUtils.proposeFilename(UriUtils.java:730)\",\"\\tat de.interactive_instruments.etf.webapp.dto.SimpleTestObject.toTestObject(SimpleTestObject.java:126)\",\"\\tat de.interactive_instruments.etf.webapp.dto.StartTestRunRequest.toTestRun(StartTestRunRequest.java:114)\",\"\\tat de.interactive_instruments.etf.webapp.controller.TestRunController.start(TestRunController.java:474)\",\" [wrapped] de.interactive_instruments.etf.webapp.controller.LocalizableApiError: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target\",\"\\tat de.interactive_instruments.etf.webapp.controller.TestRunController.start(TestRunController.java:521)\",\"\\tat sun.reflect.GeneratedMethodAccessor260.invoke(Unknown Source)\",\"\\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\",\"\\tat java.lang.reflect.Method.invoke(Method.java:497)\",\"\\tat org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205)\",\"\\tat org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:133)\",\"\\tat org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:97)\",\"\\tat org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827)\",\"\\tat org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738)\",\"\\tat org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)\",\"\\tat org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:967)\",\" [wrapped] org.springframework.web.util.NestedServletException: Handler dispatch failed; nested exception is de.interactive_instruments.etf.webapp.controller.LocalizableApiError: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target\",\"\\tat org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:982)\",\"\\tat org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901)\",\"\\tat org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)\",\"\\tat org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:872)\",\"\\tat javax.servlet.http.HttpServlet.service(HttpServlet.java:707)\",\"\\tat org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)\",\"\\tat javax.servlet.http.HttpServlet.service(HttpServlet.java:790)\",\"\\tat org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:821)\",\"\\tat org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1685)\",\"\\tat de.interactive_instruments.etf.webapp.filter.ApiFilter.doFilterInternal(ApiFilter.java:89)\",\"\\tat org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)\",\"\\tat org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:347)\",\"\\tat org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:263)\",\"\\tat org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1668)\",\"\\tat org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:581)\",\"\\tat org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)\",\"\\tat org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:548)\",\"\\tat org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:226)\",\"\\tat org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1158)\",\"\\tat org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:511)\",\"\\tat org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185)\",\"\\tat org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1090)\",\"\\tat org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)\",\"\\tat org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:213)\",\"\\tat org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:109)\",\"\\tat org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:119)\",\"\\tat org.eclipse.jetty.server.Server.handle(Server.java:517)\",\"\\tat org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:308)\",\"\\tat org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:242)\",\"\\tat org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:261)\",\"\\tat org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:95)\",\"\\tat org.eclipse.jetty.io.SelectChannelEndPoint$2.run(SelectChannelEndPoint.java:75)\",\"\\tat org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.produceAndRun(ExecuteProduceConsume.java:213)\",\"\\tat org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.run(ExecuteProduceConsume.java:147)\",\"\\tat org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:654)\",\"\\tat org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:572)\",\"\\tat java.lang.Thread.run(Thread.java:745)\"]}"
message: "IOException"
davinciagf commented 2 years ago

Vérifier le cache (js et css) pour l'affichage du message.

vbombaerts commented 2 years ago

image

et

image

vbombaerts commented 2 years ago

Validation directe OK en single et en batch Validation via portail INSPIRE wallon pas OK en single et en batch.

vbombaerts commented 2 years ago

Environnement de valid : validation directe OK. via portail KO.

vbombaerts commented 2 years ago

Environnement de prod : validation directe OK et via portail OK !

vbombaerts commented 2 years ago

Impossible de valider une fiche. Je reçois le message suivant : image

J'ai vérifié la configuration. L'adresse du validateur et le numéro de clé n'étaient pas encodés correctement. J'ai modifié et j'ai toujours la même erreur.

L'adresse du service de validation a-t-elle changé ? https://y9tuozgmmc.execute-api.eu-west-1.amazonaws.com/validator/v2/

J'ai requêté cette adresse directement dans le navigateur et j'ai obtenu la réponse suivante : {"message": "Network error communicating with endpoint"}

vbombaerts commented 2 years ago

Erreur d'adresse. L'adresse indiquée sur leur github n'est pas la bonne. Bonne adresse : https://yzyiqfakm4.execute-api.eu-west-1.amazonaws.com/validator

Et maintenant j'ai ça comme erreur : image

davinciagf commented 2 years ago

Le serveur du validateur semble hs image

vbombaerts commented 2 years ago

Error while creating test on validator side. Status is: 500 (Internal Server Error). Error: {"error":"The test run initialization failed due to an internal error. Please contact a system administrator.","timestamp":"1639137854143","url":"http://inspire-validator.eu-west-1.elasticbeanstalk.com:8080/validator/v2/TestRuns","id":"l.internal.testrun.initialization.error","stacktrace":["java.util.concurrent.RejectedExecutionException: Task java.util.concurrent.FutureTask@6680bf07 rejected from java.util.concurrent.ThreadPoolExecutor@80cbfca[Running, pool size = 4, active threads = 4, queued tasks = 12, completed tasks = 255]","\tat java.util.concurrent.ThreadPoolExecutor$AbortPolicy.rejectedExecution(ThreadPoolExecutor.java:2047)","\tat java.util.concurrent.ThreadPoolExecutor.reject(ThreadPoolExecutor.java:823)","\tat java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1369)","\tat java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:134)","\tat de.interactive_instruments.etf.testdriver.TaskPoolRegistry.submitTask(TaskPoolRegistry.java:162)","\tat de.interactive_instruments.etf.webapp.controller.TestRunController.initAndSubmit(TestRunController.java:258)"," [wrapped] de.interactive_instruments.etf.webapp.controller.LocalizableApiError: java.util.concurrent.RejectedExecutionException: Task java.util.concurrent.FutureTask@6680bf07 rejected from java.util.concurrent.ThreadPoolExecutor@80cbfca[Running, pool size = 4, active threads = 4, queued tasks = 12, completed tasks = 255]","\tat de.interactive_instruments.etf.webapp.controller.TestRunController.initAndSubmit(TestRunController.java:260)","\tat de.interactive_instruments.etf.webapp.controller.TestRunController.start(TestRunController.java:510)","\tat sun.reflect.GeneratedMethodAccessor180.invoke(Unknown Source)","\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)","\tat java.lang.reflect.Method.invoke(Method.java:497)","\tat org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205)","\tat org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:133)","\tat org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:97)","\tat org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827)","\tat org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738)","\tat org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)","\tat org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:967)"," [wrapped] org.springframework.web.util.NestedServletException: Handler dispatch failed; nested exception is de.interactive_instruments.etf.webapp.controller.LocalizableApiError: java.util.concurrent.RejectedExecutionException: Task java.util.concurrent.FutureTask@6680bf07 rejected from java.util.concurrent.ThreadPoolExecutor@80cbfca[Running, pool size = 4, active threads = 4, queued tasks = 12, completed tasks = 255]","\tat org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:982)","\tat org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901)","\tat org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)","\tat org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:872)","\tat javax.servlet.http.HttpServlet.service(HttpServlet.java:707)","\tat org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)","\tat javax.servlet.http.HttpServlet.service(HttpServlet.java:790)","\tat org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:821)","\tat org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1685)","\tat de.interactive_instruments.etf.webapp.filter.ApiFilter.doFilterInternal(ApiFilter.java:89)","\tat org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)","\tat org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:347)","\tat org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:263)","\tat org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1668)","\tat org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:581)","\tat org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)","\tat org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:548)","\tat org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:226)","\tat org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1158)","\tat org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:511)","\tat org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185)","\tat org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1090)","\tat org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)","\tat org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:213)","\tat org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:109)","\tat org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:119)","\tat org.eclipse.jetty.server.Server.handle(Server.java:517)","\tat org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:308)","\tat org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:242)","\tat org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:261)","\tat org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:95)","\tat org.eclipse.jetty.io.SelectChannelEndPoint$2.run(SelectChannelEndPoint.java:75)","\tat org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.produceAndRun(ExecuteProduceConsume.java:213)","\tat org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.run(ExecuteProduceConsume.java:147)","\tat org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:654)","\tat org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:572)","\tat java.lang.Thread.run(Thread.java:745)"]}

vbombaerts commented 2 years ago

Le serveur du validateur semble hs image

Oui, c'était la mauvaise adresse. Mais ça ne marche pas mieux maintenant avec la bonne adresse... A mon avis, c'est surchargé.

vbombaerts commented 2 years ago

https://inspire.ec.europa.eu/validator/swagger-ui.html#!/1._Service_Status/getStatusUsingGET

Apparemment serveur de test down côté JRC.

vbombaerts commented 2 years ago

Je suis passé sur l'instance de staging. Ca tourne pour le moment. http://staging-inspire-validator.eu-west-1.elasticbeanstalk.com/validator/