PnX-SI / gn_module_export

Module GeoNature d'export
GNU General Public License v3.0
7 stars 10 forks source link

Swagger API - Curl Authentification #186

Closed pierre56 closed 1 year ago

pierre56 commented 1 year ago

Swagger API - Curl Authentification

Contexte

Le GMB et Bretagne Vivante utilisent tout 2 le module de saisie chiro : https://github.com/PnX-SI/protocoles_suivi/tree/master/suivi_colo_chiro_gmb

Le référentiel géographique des sites chiro sur la Bretagne a été créé de manière conjointe au fil des années, la saisie des suivis se fait pour le moment sur le geonature du GMB mais nous souhaitons aussi pouvoir saisir sur notre geonature a terme.

La contrainte étant d'avoir le mm référentiel géographique a jour dans chaque geonature. Pour faciliter le travail et éviter les échanges bilatéraux, il a été décidé que la modification ou ajout de site se ferait exclusivement dans celui du GMB.

Ce que je souhaite faire, c'est exploiter le module d'export afin de rendre accessible le référentiel via l'api.

Vue export site provenant de monitoring

create materialized view gn_exports.vm_export_ref_geo_site_chiro as
(
    select 
    jsonb_build_object( 
    't_modules' , row_to_json( tm.*),
    'cor_site_module' , row_to_json(csm.*), 
    't_base_sites' , row_to_json( tbs.*),
    't_site_complements', row_to_json(tsc.*), 
    't_sites_groups', row_to_json(tsg.*) 
) as sites_chiro
from gn_commons.t_modules tm 
join gn_monitoring.cor_site_module csm on tm.id_module = csm.id_module 
join gn_monitoring.t_base_sites tbs on csm.id_base_site = tbs.id_base_site 
join gn_monitoring.t_site_complements tsc on tsc.id_base_site =tbs.id_base_site 
join gn_monitoring.t_sites_groups tsg on tsg.id_sites_group =tsc.id_sites_group 
where tm.module_code = 'suivi_colo_chiro_gmb' --'POPAmphibien'
)

Cette requete sql me permet en logique d'avoir au format json tout les éléments des sites contenus dans le schema monitoring, en passant en variable uniquement le nom du module monitoring.

Par la suite, je vais faire un script pour intégrer cette table dans un schéma "_imports_ref_geo" via un cron. Les sites seront ajoutées ou modifié dans les bonnes tables via upsert avec un trigger basé sur l'uuid du site et la date de création/modification.

Erreur rencontrée

Je n'ai toujours pas réussi a récupérer les données a partir de curl, malgré de nombreuses tentatives

tentatives

curl -X GET "https://geonature.bretagne-vivante.org/api/exports/api/5" -H "accept: application/json"
curl -X GET "https://geonature.bretagne-vivante.org/api/exports/api/5" -H "accept: application/json" -H "Authorization: gmb_key"

curl  -u "testeur:mdp_test" -X GET "https://geonature.bretagne-vivante.org/api/exports/api/5"  -H "Authorization: gmb_key" 
curl  -u "testeur:mdp_test" -X GET "https://geonature.bretagne-vivante.org/api/exports/api/5" -H "accept: application/json" -H "Authorization: gmb_key"

Logs


curl -X GET "https://geonature.bretagne-vivante.org/api/exports/api/5" -H  "accept: application/json" -H  "Authorization: gmb_key"
{"code": 401, "description": "The server could not verify that you are authorized to access the URL requested. You either supplied the wrong credentials (e.g. a bad password), or your browser doesn't understand how to supply the credentials required.", "name": "Unauthorized"}

curl  -u "testeur:mdp_test" -X GET "https://geonature.bretagne-vivante.org/api/exports/api/5"  -H "Authorization: gmb_key"
<!doctype html>
<html lang=en>
<title>Redirecting...</title>
<h1>Redirecting...</h1>
<p>You should be redirected automatically to the target URL: <a href="https://geonature.bretagne-vivante.org/#/login?next=%2Fexports%2Fapi%2F5%3F">https://geonature.bretagne-vivante.org/#/login?next=%2Fexports%2Fapi%2F5%3F</a>. If not, click the link.

Exemple fonctionnel ?

J'ai vu les discussions sur la refonte du module et j'imagine que cela va impacter le fonctionnement futur (en mieux avec le token), mais auriez vous un exemple fonctionnel actuellement pour curl ? Ou un moyen alternatif d'exploiter l'url ?

je voudrais au moins savoir si ce que je veux faire est faisable, a terme j'aimerais utiliser l'api pour alimenter des shiny ou diffuser des référentiels bretons partagés avec les autres associations.

Merci 😄

TheoLechemia commented 1 year ago

Bonjour, Effectivement, les évolution du module d'export permettront de rendre accessible des exports via un token ou mais également de les ouvrir sans authentification (mode public). Actuellement, il est nécessaire de se loguer à GeoNature (via la route <URL_GEONATURE>/api/auth/login) de récupérer le token renvoyé, puis de le passer dans le curl ensuite. La route de login est un post qui attend un json : {login: "foo", password: "bar"}

pierre56 commented 1 year ago

Merci pour le retour @TheoLechemia :D

Mais entre le moment où j'ai fini de rédigé ce ticket et ta réponse. Je me suis rendu compte que V1.5 était sortie y a 3 semaines. ça aurait du être mon premier réflexe de vérifier...

Mais après maj du module, ce que je voulais faire est fonctionnel ✌️

Accessible sans authent pour le moment : https://geonature.bretagne-vivante.org/api/exports/api/5

ça va me permettre de continuer mon projet et faire des tests, je planquerais derrière un token quand il y aura de la vrai donnée dedans.

Merci pour le super boulot 👍