1
0
Fork 0
mirror of https://github.com/YunoHost-Apps/baikal_ynh.git synced 2024-09-03 18:16:11 +02:00

add new helper 'is_url_handled_rewrited' + use it

This commit is contained in:
Gofannon 2019-02-06 16:18:05 +01:00
parent 1057d7150c
commit 70646d5675
3 changed files with 55 additions and 33 deletions

View file

@ -13,16 +13,25 @@ is_url_handled() {
[[ ! ${output[0]} =~ \/yunohost\/sso\/ && ${output[1]} != 404 ]] [[ ! ${output[0]} =~ \/yunohost\/sso\/ && ${output[1]} != 404 ]]
} }
is_url_handled_custom() { is_url_handled_rewrited() {
local output=($(curl -k -s -o /dev/null \ local url="$1"
-w 'x%{redirect_url} %{http_code}' "$1")) # Try to get the url with curl, and keep the http code and an eventual redirection url.
echo "¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤" local curl_output="$(curl --insecure --silent --output /dev/null \
echo "contenu variable 'output' : $output" --write-out '%{http_code};%{redirect_url}' "$url")"
echo "¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤"
# It's handled if it does not redirect to the SSO nor return 404 # Cut the output and keep only the first part to keep the http code
[[ ! ${output[0]} =~ \/yunohost\/sso\/ && ${output[1]} != 404 ]] local http_code="${curl_output%%;*}"
#[[ ! ${output[0]} =~ \/yunohost\/sso\/ ]] && [[ ${output[1]} != 404 ]] # Do the same thing but keep the second part, the redirection url
#[[ ! ${output[0]} =~ \/yunohost\/sso\/ ]] local redirection="${curl_output#*;}"
# Return 1 if the url isn't handled.
# Return 1 if the url has returned 404
if [ "$http_code" = "404" ]; then
return 1
# Return 1 if the url is redirected to the SSO
elif [[ $redirection =~ "/yunohost/sso" ]]; then
return 1
fi
} }
is_url_handled_rewrited() { is_url_handled_rewrited() {

View file

@ -30,6 +30,21 @@ app=$YNH_APP_INSTANCE_NAME
# CHECK IF THE APP CAN BE INSTALLED WITH THESE ARGS # CHECK IF THE APP CAN BE INSTALLED WITH THESE ARGS
#================================================= #=================================================
# Stop installation if another app serves "https://${domain}/.well-known/caldav"
## Waiting for Yunohost to handles this kind of conflict
## See https://github.com/YunoHost-Apps/baikal_ynh/issues/17
error_text="Baikal cannot be installed because of a conflit with another application, Nextcloud usually. This app handles the location where you want to install Baikal (https://${domain}/.well-known/caldav). You can either install Baikal on another domain, subdomain or move Nextcloud to another location"
if is_url_handled_rewrited "https://${domain}/.well-known/caldav"; then
ynh_die "$error_text"
fi
# Same test for path "/.well-known/carddav"
if is_url_handled_rewrited "https://${domain}/.well-known/carddav"; then
ynh_die "$error_text"
fi
# Normalize the url path syntax # Normalize the url path syntax
path_url=$(ynh_normalize_url_path $path_url) path_url=$(ynh_normalize_url_path $path_url)
@ -70,22 +85,6 @@ ynh_setup_source "$final_path"
# NGINX CONFIGURATION # NGINX CONFIGURATION
#================================================= #=================================================
# Exits if another app serves "https://${domain}/.well-known/caldav" and display an error message for user
# Waiting for Yunohost to handles this kind of conflict https://github.com/YunoHost-Apps/baikal_ynh/issues/17
echo "je suis devant le if"
if is_url_handled_custom "https://${domain}/.well-known/caldav" ; then
echo "je passe dans le if"
ynh_die "Baikal cannot be installed because of a conflit with another application, Nextcloud usually. This app handles the location where you want to install Baikal (https://${domain}/.well-known/caldav). You can either install Baikal on another domain, subdomain or move Nextcloud to another location"
fi
# Taken from https://github.com/YunoHost-Apps/nextcloud_ynh/blob/962cc61ec8ffb045d89dd460cf8b55778d862ffc/scripts/install
# Commented for now
#
# Handle root path, avoid double slash.
# Temporary fix, in waiting for an upgrade of the helper. (#361)
#path_url_slash_less=${path_url%/}
#ynh_replace_string "__PATH__/" "$path_url_slash_less/" "../conf/nginx.conf"
# Create a dedicated nginx config # Create a dedicated nginx config
ynh_add_nginx_config ynh_add_nginx_config

View file

@ -64,19 +64,33 @@ ynh_setup_source "$final_path"
# NGINX CONFIGURATION # NGINX CONFIGURATION
#================================================= #=================================================
ynh_backup_if_checksum_is_different "/etc/nginx/conf.d/$domain.d/$app.conf"
# Delete current nginx configuration to be able to check if .well-known is already served. # Delete current nginx configuration to be able to check if .well-known is already served.
ynh_remove_nginx_config ynh_remove_nginx_config
ynh_app_setting_delete $app "checksum__etc_nginx_conf.d_$domain.d_$app.conf" || true ynh_app_setting_delete $app "checksum__etc_nginx_conf.d_$domain.d_$app.conf" || true
# Do not serve .well-known if it's already served on the domain # Do not serve .well-known if it's already served on the domain
if is_url_handled "https://${domain}/.well-known/caldav" ; then #if is_url_handled_rewrited "https://${domain}/.well-known/caldav" ; then
sed -ri '/^location = \/\.well\-known\/(caldav|carddav) \{/,/\}/d' \ # sed -ri '/^location = \/\.well\-known\/(caldav|carddav) \{/,/\}/d' \
"../conf/nginx.conf" # "../conf/nginx.conf"
#fi
# Stop installation if another app serves "https://${domain}/.well-known/caldav"
## Waiting for Yunohost to handles this kind of conflict
## See https://github.com/YunoHost-Apps/baikal_ynh/issues/17
error_text="Baikal cannot be installed because of a conflit with another application, Nextcloud usually. This app handles the location where you want to install Baikal (https://${domain}/.well-known/caldav). You can either install Baikal on another domain, subdomain or move Nextcloud to another location"
if is_url_handled_rewrited "https://${domain}/.well-known/caldav"; then
ynh_die "$error_text"
fi
# Same test for path "/.well-known/carddav"
if is_url_handled_rewrited "https://${domain}/.well-known/carddav"; then
ynh_die "$error_text"
fi fi
# Handle root path, avoid double slash.
# Temporary fix, in waiting for an upgrade of the helper. (#361)
#path_url_slash_less=${path_url%/}
#ynh_replace_string "__PATH__/" "$path_url_slash_less/" "../conf/nginx.conf"
# Create a dedicated nginx config # Create a dedicated nginx config
ynh_add_nginx_config ynh_add_nginx_config