From b49a2e0af18e52818f199b803eb5e07a561f4979 Mon Sep 17 00:00:00 2001 From: Jimmy Monin Date: Sun, 27 Aug 2017 09:52:15 +0200 Subject: [PATCH] Add change_url script --- check_process | 1 + scripts/change_url | 122 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 123 insertions(+) create mode 100644 scripts/change_url diff --git a/check_process b/check_process index 4eafc80..043d27d 100644 --- a/check_process +++ b/check_process @@ -15,6 +15,7 @@ multi_instance=1 incorrect_path=1 port_already_use=0 + change_url=1 ;;; Levels Level 1=auto Level 2=auto diff --git a/scripts/change_url b/scripts/change_url new file mode 100644 index 0000000..52a8a5e --- /dev/null +++ b/scripts/change_url @@ -0,0 +1,122 @@ +#!/bin/bash + +#================================================= +# GENERIC STARTING +#================================================= +# IMPORT GENERIC HELPERS +#================================================= + +source _common.sh +source /usr/share/yunohost/helpers + +#================================================= +# RETRIEVE ARGUMENTS +#================================================= + +old_domain=$YNH_APP_OLD_DOMAIN +old_path=$YNH_APP_OLD_PATH + +new_domain=$YNH_APP_NEW_DOMAIN +new_path=$YNH_APP_NEW_PATH + +app=$YNH_APP_INSTANCE_NAME + +#================================================= +# LOAD SETTINGS +#================================================= + +db_name=$(ynh_app_setting_get "$app" db_name) +db_pwd=$(ynh_app_setting_get "$app" mysqlpwd) +db_user="$db_name" + +#================================================= +# CHECK PATHS SYNTAX +#================================================= + +test -n "$old_path" || old_path="/" +test -n "$new_path" || new_path="/" +new_path=$(ynh_normalize_url_path $new_path) +old_path=$(ynh_normalize_url_path $old_path) + +#================================================= +# CHECK WHICH PARTS SHOULD BE CHANGED +#================================================= + +change_domain=0 +if [ "$old_domain" != "$new_domain" ] +then + change_domain=1 +fi + +change_path=0 +if [ "$old_path" != "$new_path" ] +then + change_path=1 +fi + +#================================================= +# STANDARD MODIFICATIONS +#================================================= +# MODIFY URL IN NGINX CONF FILE +#================================================= + +nginx_conf_path=/etc/nginx/conf.d/$old_domain.d/$app.conf + +# Change the path in the nginx config file +if [ $change_path -eq 1 ] +then + if [ "$new_path" = "/" ] && [ "$old_path" != "/" ] ; then + # Replace path in several location occurrences based on different recognition patterns + sudo sed --in-place "s@location $old_path/ {\$@location / {@" "$nginx_conf_path" + ynh_replace_string "location ~ ^$old_path" "location ~ ^" "$nginx_conf_path" + ynh_replace_string "location $old_path {" "location / {" "$nginx_conf_path" + ynh_replace_string "rewrite ^ $old_path" "rewrite ^ " "$nginx_conf_path" + + # Move #for-subdir comment at the beginning of the line (line not needed for "/" path) + sudo sed --in-place "s/\(.*\) #for-subdir/#for-subdir \1/g" "$nginx_conf_path" + elif [ "$new_path" != "/" ] && [ "$old_path" = "/" ] ; then + # Move #for-subdir comment at the end of the line (line needed for "/path" path) + sudo sed --in-place "s/#for-subdir\(.*\)/\1 #for-subdir/g" "$nginx_conf_path" + + # Replace path in several location occurrences based on different recognition patterns + sudo sed --in-place "s@location / {\$@location $new_path/ {@" "$nginx_conf_path" + ynh_replace_string "location ~ ^" "location ~ ^$new_path" "$nginx_conf_path" + ynh_replace_string "location / {" "location $new_path {" "$nginx_conf_path" + ynh_replace_string "rewrite ^ /" "rewrite ^ $new_path/" "$nginx_conf_path" + else + # Replace locations starting with old_path + # Look for every possible patterns for location (see https://nginx.org/en/docs/http/ngx_http_core_module.html#location) + sudo sed --in-place "s@location\( \(=\|~\|~\*\|\^~\)\)\? \(\^\)\?$old_path@location\1 \3$new_path@" "$nginx_conf_path" + # Replace path in "rewrite" directive + ynh_replace_string "rewrite ^ $old_path" "rewrite ^ $new_path" "$nginx_conf_path" + fi +fi + +# Change the domain for nginx +if [ $change_domain -eq 1 ] +then + sudo mv $nginx_conf_path /etc/nginx/conf.d/$new_domain.d/$app.conf +fi + +#================================================= +# SPECIFIC MODIFICATIONS +#================================================= + +# Configure Wallabag instance URL +ynh_mysql_connect_as "$db_name" "$db_pwd" "$db_user" <<< "UPDATE craue_config_setting SET value = 'https://$new_domain$new_path' WHERE name = 'wallabag_url'" + +# If "Download images locally" option has been enabled in Internal Settings +download_images_enabled=$(ynh_mysql_connect_as "$db_name" "$db_pwd" "$db_user" <<< "SELECT value from craue_config_setting WHERE name='download_images_enabled '" | tail -n 1) +if [ "$download_images_enabled" = "1" ] ; then + echo "Updating images URL; this operation may take a while..." + # Query/replace the domain/path in every entry.content in mysql database + ynh_mysql_connect_as "$db_name" "$db_pwd" "$db_user" <<< "UPDATE entry SET content = REPLACE(content, '$old_domain$old_path', '$new_domain$new_path');" +fi + +#================================================= +# GENERIC FINALIZATION +#================================================= +# RELOAD NGINX +#================================================= + +sudo systemctl reload nginx