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

Incrément de popularité - access denied #796

Closed vbombaerts closed 1 year ago

vbombaerts commented 1 year ago

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

fxprunayre commented 1 year ago

Vérifier si l'appel est fait en POST

image

vbombaerts commented 1 year ago

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.

xdebehogne commented 1 year ago

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.

fxprunayre commented 1 year ago

A priori pas différence entre prod et test sur ce point:

image

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
davinciagf commented 1 year ago

Via postman, j'ai également une erreur 403 image

Peut-être vérifier les redirections... et les accès suite à celles-ci

xdebehogne commented 1 year ago

Information complémentaire, on nous a demandé de passer par l'url de base suivante : /geonetwork/geoportailwal/api/

ex: https://metawal4.test.wallonie.be/geonetwork/geoportailwal/api/records/82a3db7f-092c-4e9a-a97e-b92b31eeafe1/popularity

Autre remarque, nous ne passons aucun JSESSIONID dans notre requête, uniquement le X-XSRF-TOKEN

fxprunayre commented 1 year ago

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 ?

davinciagf commented 1 year ago

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) image

xdebehogne commented 1 year ago

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

davinciagf commented 1 year ago

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) : image 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

vbombaerts commented 1 year ago

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 ?

davinciagf commented 1 year ago

@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.

vbombaerts commented 1 year ago

Suite à discussion avec l'équipe Géoportail @davinciagf peux-tu développer le GET sur la popularity ?

vbombaerts commented 1 year ago

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.

vbombaerts commented 1 year ago

Le GET retourne une erreur 400 via swagger. Il retourne une réponse directement dans le navigateur

vbombaerts commented 1 year ago

Le POST retourne une erreur 400

xdebehogne commented 1 year ago
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):
xdebehogne commented 1 year ago

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.
davinciagf commented 1 year ago

Je n'ai pas reproduit : image

xdebehogne commented 1 year ago

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 ?

davinciagf commented 1 year ago

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 ) image

Exemple avec le header X-XSRF-TOKEN: image

vbombaerts commented 1 year ago

OK côté GP