This commit is contained in:
ericgaspar 2021-08-22 08:58:18 +02:00
parent a42766ca97
commit 72f60aa736
6 changed files with 65 additions and 20 deletions

View file

@ -2,7 +2,7 @@
It could be an invisible redirect, an external link, another app on your local network, a reverse proxy to an app or a Docker container... Some apps can be even be protected behind your panel (meaning that you will have to log-in to access them). The only limit is your imagination - and NGINX ;). It could be an invisible redirect, an external link, another app on your local network, a reverse proxy to an app or a Docker container... Some apps can be even be protected behind your panel (meaning that you will have to log-in to access them). The only limit is your imagination - and NGINX ;).
This app only adds a Nginx configuration file with `redirect` or `proxy_pass` rule, and a YunoHost tile. Nothing more. This app only adds a NGINX configuration file with `redirect` or `proxy_pass` rule, and a YunoHost tile. Nothing more.
## Redirect type ## Redirect type

49
doc/DISCLAIMER_fr.md Normal file
View file

@ -0,0 +1,49 @@
**Ajoutez un lien sur votre panneau d'utilisateur redirigeant vers une autre page ou application, qui peut être protégée derrière votre panneau pour certains**.
Il peut s'agir d'une redirection invisible, d'un lien externe, d'une autre application sur votre réseau local, d'un reverse proxy vers une application ou un conteneur Docker... Certaines applications peuvent même être protégées derrière votre panneau (ce qui signifie que vous devrez vous connecter- pour y accéder). La seule limite est votre imagination - et NGINX ;).
Cette application ajoute uniquement un fichier de configuration NGINX avec la règle `redirect` ou `proxy_pass` et une tuile YunoHost. Rien de plus.
## Type de redirection
### Redirection visible
La barre d'adresse du visiteur va changer. Utile pour ajouter un lien utilisateur vers un autre site Web
votre-domaine.com -> autre-domaine.net
vous-domaine.com/foo -> autre-domaine.net/bar
### Redirection invisible (proxy)
La barre d'adresse du visiteur restera la même. Principalement utilisé pour servir le serveur Web local pour une application personnelle.
vous-domaine.com/foo -> http://172.0.0.1:8080/app
**IMPORTANT :** le fichier `redirect.conf` devra peut-être être mis à jour en fonction de votre situation !
**AVERTISSEMENT :** De nombreuses applications ne prennent pas en charge la redirection vers un chemin différent en raison de liens relatifs ! Cela signifie que certaines applications hébergées par exemple sur http://127.0.0.1:5050/app/ DOIVENT être redirigées vers http://domain.tld/app/ et NON vers http://domain.tld/someotherapp/
*Exemple concret :* le conteneur Odoo Docker fonctionne sur http://127.0.0.1:8069/. Vous ne pourrez pas le rediriger vers http://domain.tld/odoo/ ! Il faut le rediriger vers la racine, donc par exemple http://odoo.domain.tld/
## Redirection publique ou privée
En cas de redirection privée, l'application sera disponible uniquement pour les utilisateurs connectés. Cela peut être utile si vous souhaitez protéger derrière le SSO une application de votre réseau local ou du serveur (par exemple, un conteneur Docker ou une application qui n'a pas de gestion des utilisateurs ou de protection par mot de passe).
**IMPORTANT :** Assurez-vous que l'application que vous souhaitez protéger NE PEUT PAS être accessible via son port ou un autre lien direct. Sinon, votre application ne sera protégée que dans YunoHost mais sera toujours disponible via son lien direct. Dans le cas d'un conteneur Docker, le port du conteneur devra être local (par exemple, -p 127.0.0.1:9000:9000).
## Exemples de cas
- **Création d'une tuile pour un conteneur Docker** avec un port local (par exemple, -p 127.0.0.1:PORT:PORT) : redirection proxy vers http://127.0.0.1:PORT-OF-THE-CONTAINER/
- **Redirection vers un site externe** : redirection visible vers l'URL
- [CozyCloud derrière YunoHost ?](https://forum.cozy.io/t/cozy-cloud-sous-yunohost/616/11)
- **Créer une vignette et protéger les applications difficiles à packager nativement (ou pour le prototypage)**
**_N'hésitez pas à [partager vos exemples de cas et vos fichiers Nginx personnalisés sur le forum](https://forum.yunohost.org/t/2182)._**
## Crédits
Inspiré du travail de [scith](https://github.com/scith).

View file

@ -3,7 +3,7 @@
"id": "redirect", "id": "redirect",
"packaging_format": 1, "packaging_format": 1,
"description": { "description": {
"en": "Create a redirection or a proxy to another path.", "en": "Create a redirection or a proxy to another path",
"fr": "Créer une redirection ou un proxy vers un autre emplacement" "fr": "Créer une redirection ou un proxy vers un autre emplacement"
}, },
"version": "1.0.0~ynh5", "version": "1.0.0~ynh5",
@ -55,10 +55,10 @@
"fr": "Type de redirection" "fr": "Type de redirection"
}, },
"choices": { "choices": {
"public_302" : "Visible redirect (302, temporary). Everybody will be able to access it.", "public_302": "Visible redirect (302, temporary). Everybody will be able to access it.",
"public_301" : "Visible redirect (301, permanent). Everybody will be able to access it.", "public_301": "Visible redirect (301, permanent). Everybody will be able to access it.",
"public_proxy": "Proxy, invisible (nginx proxy_pass). Everybody will be able to access it.", "public_proxy": "Proxy, invisible (NGINX proxy_pass). Everybody will be able to access it.",
"private_proxy": "Proxy, invisible (nginx proxy_pass). Only accessible for allowed users." "private_proxy": "Proxy, invisible (NGINX proxy_pass). Only accessible for allowed users."
}, },
"default": "public_302" "default": "public_302"
} }

View file

@ -22,7 +22,7 @@ ynh_print_info --message="Loading installation settings..."
# Retrieve arguments # Retrieve arguments
app=$YNH_APP_INSTANCE_NAME app=$YNH_APP_INSTANCE_NAME
domain=$(ynh_app_setting_get $app domain) domain=$(ynh_app_setting_get --app=$app --key=domain)
#================================================= #=================================================
# BACKUP THE NGINX CONFIGURATION # BACKUP THE NGINX CONFIGURATION

View file

@ -21,10 +21,10 @@ ynh_abort_if_errors
# Retrieve arguments # Retrieve arguments
app=$YNH_APP_INSTANCE_NAME app=$YNH_APP_INSTANCE_NAME
domain=$(ynh_app_setting_get "$app" domain) domain=$(ynh_app_setting_get --app=$app --key=domain)
path_url=$(ynh_app_setting_get "$app" path) path_url=$(ynh_app_setting_get --app=$app --key=path)
redirect_type=$(ynh_app_setting_get "$app" redirect_type) redirect_type=$(ynh_app_setting_get --app=$app --key=redirect_type)
redirect_path=$(ynh_app_setting_get "$app" redirect_path) redirect_path=$(ynh_app_setting_get --app=$app --key=redirect_path)
# Validate redirect path # Validate redirect path
url_regex='(https?|ftp|file)://[-A-Za-z0-9\+&@#/%?=~_|!:,.;]*[-A-Za-z0-9\+&@#/%=~_|]' url_regex='(https?|ftp|file)://[-A-Za-z0-9\+&@#/%?=~_|!:,.;]*[-A-Za-z0-9\+&@#/%=~_|]'
@ -41,10 +41,6 @@ ynh_restore_file "$NGINX_CONF"
# SETUP SSOWAT # SETUP SSOWAT
#================================================= #=================================================
if [[ "$is_public" -eq 0 ]]
then # Remove the public access
ynh_app_setting_delete "$app" skipped_uris
fi
# Make app public if necessary # Make app public if necessary
if [ "$redirect_type" != "private_proxy" ] if [ "$redirect_type" != "private_proxy" ]
then then

View file

@ -15,10 +15,10 @@ source /usr/share/yunohost/helpers
# Retrieve arguments # Retrieve arguments
app=$YNH_APP_INSTANCE_NAME app=$YNH_APP_INSTANCE_NAME
domain=$(ynh_app_setting_get "$app" domain) domain=$(ynh_app_setting_get --app=$app --key=domain)
path_url=$(ynh_app_setting_get "$app" path) path_url=$(ynh_app_setting_get --app=$app --key=path)
redirect_type=$(ynh_app_setting_get "$app" redirect_type) redirect_type=$(ynh_app_setting_get --app=$app --key=redirect_type)
redirect_path=$(ynh_app_setting_get "$app" redirect_path) redirect_path=$(ynh_app_setting_get --app=$app --key=redirect_path)
#================================================= #=================================================
# ENSURE DOWNWARD COMPATIBILITY # ENSURE DOWNWARD COMPATIBILITY
@ -43,7 +43,7 @@ then
fi fi
if [ "$is_public" = "0" ] && [ "$redirect_type" != "proxy" ]; then if [ "$is_public" = "0" ] && [ "$redirect_type" != "proxy" ]; then
echo "WARNING: You previously had a 'supposedly' private 301 or 302 redirection ... but it was found that it was public all along and it is not easy to create such a private redirection. Your 301 or 302 redirection will be re-flagged as public..." >&2 echo "WARNING: You previously had a 'supposedly' private 301 or 302 redirection... but it was found that it was public all along and it is not easy to create such a private redirection. Your 301 or 302 redirection will be re-flagged as public..." >&2
is_public=1 is_public=1
fi fi