Open gildeluermoz opened 10 months ago
Salut Gil,
Les URL sont construites grâce à la fonction url_for
de Flask ici : https://github.com/PnX-SI/gn_module_export/blob/30433d41c9bbf9672e09e5b86caa705708a4837c/backend/gn_module_export/utils_export.py#L111) en lui forçant le extenal=True
pour qu'il construise une URL absolue. Flask utilise les info du server HTTP pour déduire le SERVER_NAME
dont il a besoin pour construire l'url voir https://flask.palletsprojects.com/en/3.0.x/api/#flask.Flask.url_for et https://flask.palletsprojects.com/en/3.0.x/config/#SERVER_NAME
Dans ton cas à mon avis c'est le ServerAlias
qui est utilisé, donc toujours l'adresse locale..
Mais comment lui forcer parfois l'URL locale et parfois l'URL externe, j'avoue que je sais pas trop
Pourquoi ne pas faire en sorte que les utilisateurs accèdent à GeoNature toujours à la même URL (geonature.mondomaine.fr/geonature) pour que ça soit plus simple pour eux ?
Théo,
Merci pour ces infos précieuses.
Etrange effectivement qu'en utilisant la constatne SERVER_NAME
ce soit ServerAlias
plutôt que ServerName
qui est retournée. Je creuse et je fais qq tests pour identifier une éventuelle solution et je vous fais un retour.
Mais question : est-ce qu'il ne serait pas pertinent d'utiliser plutôt current_app.config["API_ENDPOINT"]
pour contruire l'url de base de ce lien ?
Pourquoi ne pas faire en sorte que les utilisateurs accèdent à GeoNature toujours à la même URL (geonature.mondomaine.fr/geonature) pour que ça soit plus simple pour eux ?
Oui je suis d'accord et de toute manière pour le mobile c'est obligatoire. Mais ce choix ne me revient pas. Ils souhaitent un accès interne.
Mais question : est-ce qu'il ne serait pas pertinent d'utiliser plutôt current_app.config["API_ENDPOINT"] pour contruire l'url de base de ce lien ?
ça m'embête un peu de faire un truc custo plutôt que d'utiliser le mécanisme natif de Flask... Jusqu’à maintenant ce paramètre n'est utilisé que par le frontend pour interroger l'API. Mais si il y a vraiment pas d'autre solution, à voir..
Après analyse et travail avec @TheoLechemia sur les fichiers du backend construisant le lien, il ressort que la construction du lien est faite à partir de l'environnement server et notamment à partir de la variable HTTP_X_FORWARDED_HOST
C'est la librairie de Werkzeug proxy_fix.py
qui utilise cette variable HTTP_X_FORWARDED_HOST
pour modifier la variable SERVER_NAME
que url_for
utilise pour construire le lien.
Pourquoi ne pas faire en sorte que les utilisateurs accèdent à GeoNature toujours à la même URL (geonature.mondomaine.fr/geonature) pour que ça soit plus simple pour eux ?
En fait, pour ce qui me concerne, je ne suis pas dans le réseau local, j'accède à GeoNature depuis l'extérieur et le lien est mal formé quoiqu'il en soit. A priori le soucis vient du fait que le serveur est derrière un proxy qui redirige les requêtes externes en modifiant les entêtes des requêtes. Sur le navigateurs tu ne vois rien de tout ça. Par contre, on n'a pas bien su identifier si le lien est construit dans le contexte de la requête d'export ou pas. Ce qui est sûr c'est que toutes les autres requêtes de GeoNature en appel à l'api fonctionnent bien. On doit creuser encore le sujet avec @TheoLechemia pour identifier une piste de résolution.
GeoNature 2.12.3 est installé sur une machine dans un réseau local. En interne, les utilisateurs accèdde a geonature via cette url :
geonature.mastructure.local/geonature
Cette machine est aussi accessible depuis l'extérieur via un domaine :geonature.mondomaine.fr/geonature
Tout fonctionne bien pour les utilisateurs en interne comme en externe.MAIS sur le module d'export (qu'il soit généré depuis une connexion en interne comme en externe), le lien dans le mail est construit avec l'accès interne qui ne fonctionne pas de l'extérieur :
https://geonature.mastructure.local/geonature/api/media/exports/usr_generated/monfichier.csv
Je n'arrive pas à trouver quelle variable est utilisée pour contruire le lien. Dans le virtualhost apache, il y a
dans le /etc/hosts il y a
dans geonature.config.toml j'ai
J'ai essayé de changer ou de commenter les références à l'url en .local mais ça ne change rien, le lien est toujours construit avec l'url locale. Après chaque changement pour tester, je restart apache et le service geonature et le geonature-worker.
Est-ce que vous auriez une idée de comment est construit le lien et éventuellement où changer quoi pour obtenir un lien formaté avec l'url qui est sur le domaine (fonctionnel en interne comme en externe) ?
Merci