Closed vbombaerts closed 1 year ago
Vérifier si l'appel est fait en POST
Réponse de Xavier : Oui, l'appel se fait en POST comme décrit dans la doc. En paramètre, passe le même token que nous avons reçu pour la recherche.
Bonjour, Je confirme bien que l'appel est fait en POST. Mais attention, c'est sur l'environnement metawal de test que nous avons constaté ce problème. Nous ne testons pas sur l'environnement de production actuellement.
A priori pas différence entre prod et test sur ce point:
curl 'https://metawal4.test.wallonie.be/geonetwork/srv/api/records/82a3db7f-092c-4e9a-a97e-b92b31eeafe1/popularity' \
-X 'POST' \
-H 'Cookie: XSRF-TOKEN=c909f0ec-5ec6-42e5-827e-5c5dfa774fe8; JSESSIONID=AD766D21A51B54FEC755BE8664D38029; serverTime=1674548051302; sessionExpiry=1674548051302; serverTime=1646397007222; sessionExpiry=1646397007222' \
-H 'X-XSRF-TOKEN: c909f0ec-5ec6-42e5-827e-5c5dfa774fe8' \
--insecure
* Trying 157.164.189.202:443...
* Connected to metawal4.test.wallonie.be (157.164.189.202) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1..... certificate chain (19), continuing anyway.
> POST /geonetwork/srv/api/records/82a3db7f-092c-4e9a-a97e-b92b31eeafe1/popularity HTTP/1.1
> Host: metawal4.test.wallonie.be
> User-Agent: curl/7.74.0
> Accept: */*
> Cookie: XSRF-TOKEN=c909f0ec-5ec6-42e5-827e-5c5dfa774fe8; JSESSIONID=AD766D21A51B54FEC755BE8664D38029; serverTime=1674548051302; sessionExpiry=1674548051302; serverTime=1646397007222; sessionExpiry=1646397007222
> X-XSRF-TOKEN: c909f0ec-5ec6-42e5-827e-5c5dfa774fe8
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 201 201
< Date: Tue, 24 Jan 2023 08:16:40 GMT
< Server: Apache
< X-Frame-Options: SAMEORIGIN
< Set-Cookie: serverTime=1674548200878;path=/geonetwork
< Set-Cookie: sessionExpiry=1674548200878;path=/geonetwork
< Content-Length: 0
<
* Connection #0 to host metawal4.test.wallonie.be left intact
Via postman, j'ai également une erreur 403
Peut-être vérifier les redirections... et les accès suite à celles-ci
Information complémentaire, on nous a demandé de passer par l'url de base suivante : /geonetwork/geoportailwal/api/
Autre remarque, nous ne passons aucun JSESSIONID dans notre requête, uniquement le X-XSRF-TOKEN
Dans ce cas, il faut sans doute ajouter une exception ici https://github.com/SPW-DIG/metawal-core-geonetwork/blob/metawal-4.2.1/web/src/main/webapp/WEB-INF/config-security/config-security-core.xml#L371. @davinciagf tu peux tester ?
Modification poussée sur l'env de test et testée avec succès via postman (url testée : https://metawal4.test.wallonie.be/geonetwork/srv/api/records/06b19952-4103-471a-8d07-82a47edd7a11/popularity via une requête post)
Comme indiqué, pour notre part, on nous a demandé d'utiliser l'url de base https://metawal4.test.wallonie.be/geonetwork/geoportailwal/api/
A présent, nous avons une erreur 404 https://metawal4.test.wallonie.be/geonetwork/geoportailwal/api/records/fcf1d004-bdbc-48e2-acf8-1e9a6d7dfca4/popularity
J'ai fait une mise à jour et la requête passe sur postman (https://metawal4.test.wallonie.be/geonetwork/geoportailwal/api/records/06b19952-4103-471a-8d07-82a47edd7a11/popularity) : Attention, l'uuid référencé dans la requête de @xdebehogne ne semble pas un uuid référencé dans Metawal en test: fcf1d004-bdbc-48e2-acf8-1e9a6d7dfca4
Message de Xavier : L’appel vers le WS semble fonctionner à présent mais j’ai beau invalider et resynchroniser la fiche, le compteur ne change pas ! L’indexation des fiches par ES est-elle faite dès l’appel vers cette méthode ou y-a-t-il un délai ?
@xdebehogne quelle requête utilises-tu pour visualiser la popularité? J'ai testé la requête suivante : https://metawal4.test.wallonie.be/geonetwork/geoportailwal/api/records/2ca3142f-6fb2-4f01-8142-75b014108f23/popularity et la popularité est bien augmentée dans ES et si je vais sur la fiche la popularité a bien été modifiée.
Suite à discussion avec l'équipe Géoportail @davinciagf peux-tu développer le GET sur la popularity ?
POST adapté pour renvoyer le chiffre de popularité et GET développé. Voir https://github.com/geonetwork/core-geonetwork/pull/6824
A tester côté GP.
Le GET retourne une erreur 400 via swagger. Il retourne une réponse directement dans le navigateur
Le POST retourne une erreur 400
curl 'https://metawal4.test.wallonie.be/geonetwork/geoportailwal/api/records/82a3db7f-092c-4e9a-a97e-b92b31eeafe1/popularity' -X 'POST' -H 'X-XSRF-TOKEN: c909f0ec-5ec6-42e5-827e-5c5dfa774fe8' --insecure -v
* Trying 157.164.189.202:443...
* TCP_NODELAY set
* Connected to metawal4.test.wallonie.be (157.164.189.202) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
* CAfile: /etc/ssl/certs/ca-certificates.crt
CApath: /etc/ssl/certs
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.2 (IN), TLS handshake, Certificate (11):
* TLSv1.2 (IN), TLS handshake, Server key exchange (12):
* TLSv1.2 (IN), TLS handshake, Server finished (14):
* TLSv1.2 (OUT), TLS handshake, Client key exchange (16):
* TLSv1.2 (OUT), TLS change cipher, Change cipher spec (1):
* TLSv1.2 (OUT), TLS handshake, Finished (20):
* TLSv1.2 (IN), TLS handshake, Finished (20):
* SSL connection using TLSv1.2 / ECDHE-RSA-AES256-GCM-SHA384
* ALPN, server did not agree to a protocol
* Server certificate:
* subject: C=BE; ST=Namur; L=Namur; O=Service Public de Wallonie; OU=DTIC; CN=metawal4.test.wallonie.be
* start date: May 27 11:04:55 2021 GMT
* expire date: May 27 11:04:55 2023 GMT
* issuer: DC=intra; DC=wallonie; CN=SPW-CA-SUB
* SSL certificate verify result: self signed certificate in certificate chain (19), continuing anyway.
> POST /geonetwork/geoportailwal/api/records/82a3db7f-092c-4e9a-a97e-b92b31eeafe1/popularity HTTP/1.1
> Host: metawal4.test.wallonie.be
> User-Agent: curl/7.68.0
> Accept: */*
> X-XSRF-TOKEN: c909f0ec-5ec6-42e5-827e-5c5dfa774fe8
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 400 400
< Date: Mon, 06 Mar 2023 12:01:31 GMT
< Server: Apache
< X-Frame-Options: SAMEORIGIN
< Set-Cookie: XSRF-TOKEN=f18694ab-b46b-4f44-836b-ca0ae701441c;path=/geonetwork
< Content-Length: 0
< Connection: close
<
* Closing connection 0
* TLSv1.2 (OUT), TLS alert, close notify (256):
Alors que cela fonctionne dans un navigateur, l'appel suivant ne passe pas avec WGET ou CURL
wget https://metawal4.test.wallonie.be/geonetwork/srv/api/records/82a3db7f-092c-4e9a-a97e-b92b31eeafe1/popularity --no-check-certificate
--2023-03-06 13:06:30-- https://metawal4.test.wallonie.be/geonetwork/srv/api/records/82a3db7f-092c-4e9a-a97e-b92b31eeafe1/popularity
Resolving metawal4.test.wallonie.be (metawal4.test.wallonie.be)... 157.164.189.202
Connecting to metawal4.test.wallonie.be (metawal4.test.wallonie.be)|157.164.189.202|:443... connected.
WARNING: cannot verify metawal4.test.wallonie.be's certificate, issued by ‘CN=SPW-CA-SUB,DC=wallonie,DC=intra’:
Self-signed certificate encountered.
HTTP request sent, awaiting response... 400 400
2023-03-06 13:06:30 ERROR 400: 400.
Je n'ai pas reproduit :
Merci d'utiliser les mêmes commandes que nous pour reproduire l'erreur ! Dans votre capture d'écran vous ajouter un header "accept" : Est-il nécessaire ? Dans votre capture d'écran, où injectez-vous le header X-XSRF-TOKEN ? Cette méthode est-elle accessible sans token ?
N'hésite pas interroger la doc swagger de metawal
Le header "accept" est nécessaire. Pour le header X-XSRF-TOKEN , tu peux le rajouter via
-H "X-XSRF-TOKEN: ca37a4bd-455c-4989-b6eb-7ec05eb71bd0"
au niveau du curl (dans l'exemple précédant, je ne l'avais pas introduit )
Exemple avec le header X-XSRF-TOKEN:
OK côté GP
Message de l'équipe de dev géoportail : Lorsque je fais appel à l'API, je me chope un 403 (Access denied) /geonetwork/geoportailwal/api/records/{metadatauuid}/popularity