diff --git a/actions.json b/actions.json deleted file mode 100644 index e506b49..0000000 --- a/actions.json +++ /dev/null @@ -1,20 +0,0 @@ -[{ - "id": "public_private", - "name": "Move to public or private", - "command": "/bin/bash scripts/actions/public_private", - "user": "root", - "accepted_return_codes": [0], - "description": { - "en": "Change the public access of the app." - }, - "arguments": [ - { - "name": "is_public", - "type": "boolean", - "ask": { - "en": "Is it a public app ?" - }, - "default": true - } - ] -}] diff --git a/actions.toml b/actions.toml new file mode 100644 index 0000000..676b926 --- /dev/null +++ b/actions.toml @@ -0,0 +1,14 @@ +[public_private] +name = "Move to public or private" +command = "/bin/bash scripts/actions/public_private" +# user = "root" # optional +# cwd = "/" # optional +# accepted_return_codes = [0, 1, 2, 3] # optional +accepted_return_codes = [0] +description = "Change the public access of the app." + + [public_private.arguments] + [public_private.arguments.is_public] + type = "boolean" + ask = "Is it a public app ?" + default = true diff --git a/check_process b/check_process index 7db9279..98ced26 100644 --- a/check_process +++ b/check_process @@ -7,6 +7,16 @@ language="fr" market=1 is_public=1 (PUBLIC|public=1|private=0) + ; Actions + is_public=0|1 + ; Config_panel + main.is_public.is_public=0|1 + main.overwrite_files.overwrite_nginx=0|1 + main.overwrite_files.overwrite_phpfpm=0|1 + main.global_config.email_type=0|1 + main.php_fpm_config.footprint=low|medium|high + main.php_fpm_config.free_footprint=20 + main.php_fpm_config.usage=low|medium|high ; Checks pkg_linter=1 setup_sub_dir=1 @@ -21,6 +31,8 @@ incorrect_path=1 port_already_use=0 change_url=1 + actions=1 + config_panel=1 ;;; Levels Level 5=auto ;;; Options diff --git a/config_panel.json b/config_panel.json deleted file mode 100644 index e605e61..0000000 --- a/config_panel.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "name": "Leed configuration panel", - "version": "0.1", - "panel": [{ - "name": "Leed configuration", - "id": "main", - "sections": [{ - "name": "Public access", - "id": "is_public", - "options": [{ - "name": "Is it a public app ?", - "id": "is_public", - "type": "bool", - "default": true - }] - }, - { - "name": "Overwriting config files", - "id": "overwrite_files", - "options": [{ - "name": "Overwrite the nginx config file ?", - "help": "If the file is overwritten, a backup will be created.", - "id": "overwrite_nginx", - "type": "bool", - "default": true - }, - { - "name": "Overwrite the php-fpm config file ?", - "help": "If the file is overwritten, a backup will be created.", - "id": "overwrite_phpfpm", - "type": "bool", - "default": true - }] - }, - { - "name": "Global configuration", - "id": "global_config", - "options": [{ - "name": "Send HTML email to admin ?", - "help": "Allow app scripts to send HTML mails instead of plain text.", - "id": "email_type", - "type": "bool", - "default": true - }] - }, - { - "name": "PHP-FPM configuration", - "id": "php_fpm_config", - "options": [{ - "name": "Memory footprint of the service ?", - "help": "low <= 20Mb per pool. medium between 20Mb and 40Mb per pool. high > 40Mb per pool. Use specific to set a value with the following option.\n
We can't use a choices field for now. In the meantime please choose between one of this values:\n
low, medium, high, specific.", - "id": "footprint", - "type": "text", - "//": "\"choices\" : [\"low\", \"medium\", \"high\", \"specific\"]", - "default" : "low" - }, - { - "name": "Memory footprint of the service ?", - "help": "Free field to specify exactly the footprint in Mb if you don't want to use one of the three previous values.", - "id": "free_footprint", - "type": "number", - "default": 0 - }, - { - "name": "Expected usage of the service ?", - "help": "low: Personal usage, behind the sso. No RAM footprint when not used, but the impact on the processor can be high if many users are using the service.\n
medium: Low usage, few people or/and publicly accessible. Low RAM footprint, medium processor footprint when used.\n
high: High usage, frequently visited website. High RAM footprint, but lower on processor usage and quickly responding.\n
We can't use a choices field for now. In the meantime please choose between one of this values:\n
low, medium, high.", - "id": "usage", - "type": "text", - "//": "\"choices\" : [\"low\", \"medium\", \"high\"]", - "default" : "low" - }] - }] - } -] -} diff --git a/config_panel.toml b/config_panel.toml new file mode 100644 index 0000000..575c7a4 --- /dev/null +++ b/config_panel.toml @@ -0,0 +1,62 @@ +version = "0.1" +name = "Leed configuration panel" + +[main] +name = "Leed configuration" + + [main.is_public] + name = "Public access" + + [main.is_public.is_public] + ask = "Is it a public website ?" + type = "boolean" + default = true + help = "A public Leed will be accessible for third party apps.
By turning on 'anonymous readers' in Leed configuration, you can made your feeds public." + + + [main.overwrite_files] + name = "Overwriting config files" + + [main.overwrite_files.overwrite_nginx] + ask = "Overwrite the nginx config file ?" + type = "boolean" + default = true + help = "If the file is overwritten, a backup will be created." + + [main.overwrite_files.overwrite_phpfpm] + ask = "Overwrite the php-fpm config file ?" + type = "boolean" + default = true + help = "If the file is overwritten, a backup will be created." + + + [main.global_config] + name = "Global configuration" + + [main.global_config.email_type] + ask = "Send HTML email to admin ?" + type = "boolean" + default = true + help = "Allow app scripts to send HTML mails instead of plain text." + + + [main.php_fpm_config] + name = "PHP-FPM configuration" + + [main.php_fpm_config.footprint] + ask = "Memory footprint of the service ?" + choices = ["low", "medium", "high", "specific"] + default = "low" + help = "low <= 20Mb per pool. medium between 20Mb and 40Mb per pool. high > 40Mb per pool.
Use specific to set a value with the following option." + + [main.php_fpm_config.free_footprint] + ask = "Memory footprint of the service ?" + type = "number" + default = "0" + help = "Free field to specify exactly the footprint in Mb if you don't want to use one of the three previous values." + + [main.php_fpm_config.usage] + ask = "Expected usage of the service ?" + choices = ["low", "medium", "high"] + default = "low" + help = "low: Personal usage, behind the sso. No RAM footprint when not used, but the impact on the processor can be high if many users are using the service.
medium: Low usage, few people or/and publicly accessible. Low RAM footprint, medium processor footprint when used.
high: High usage, frequently visited website. High RAM footprint, but lower on processor usage and quickly responding." diff --git a/scripts/actions/public_private b/scripts/actions/public_private index ebe0cc8..2385e25 100755 --- a/scripts/actions/public_private +++ b/scripts/actions/public_private @@ -9,6 +9,13 @@ source scripts/_common.sh source /usr/share/yunohost/helpers +#================================================= +# MANAGE SCRIPT FAILURE +#================================================= + +# Exit if an error occurs during the execution of the script +ynh_abort_if_errors + #================================================= # RETRIEVE ARGUMENTS #================================================= diff --git a/scripts/config b/scripts/config index f0785cc..8e28361 100644 --- a/scripts/config +++ b/scripts/config @@ -29,24 +29,19 @@ final_path=$(ynh_app_setting_get --app=$app --key=final_path) # is_public old_is_public="$(ynh_app_setting_get --app=$app --key=is_public)" -old_is_public=$(bool_to_true_false $old_is_public) is_public="${YNH_CONFIG_MAIN_IS_PUBLIC_IS_PUBLIC:-$old_is_public}" - # Overwrite nginx configuration old_overwrite_nginx="$(ynh_app_setting_get --app=$app --key=overwrite_nginx)" -old_overwrite_nginx=$(bool_to_true_false $old_overwrite_nginx) overwrite_nginx="${YNH_CONFIG_MAIN_OVERWRITE_FILES_OVERWRITE_NGINX:-$old_overwrite_nginx}" # Overwrite php-fpm configuration old_overwrite_phpfpm="$(ynh_app_setting_get --app=$app --key=overwrite_phpfpm)" -old_overwrite_phpfpm=$(bool_to_true_false $old_overwrite_phpfpm) overwrite_phpfpm="${YNH_CONFIG_MAIN_OVERWRITE_FILES_OVERWRITE_PHPFPM:-$old_overwrite_phpfpm}" # Type of admin mail configuration old_admin_mail_html="$(ynh_app_setting_get --app=$app --key=admin_mail_html)" -old_admin_mail_html=$(bool_to_true_false $old_admin_mail_html) admin_mail_html="${YNH_CONFIG_MAIN_GLOBAL_CONFIG_EMAIL_TYPE:-$old_admin_mail_html}" @@ -60,6 +55,7 @@ if [ "$fpm_footprint" -eq "$fpm_footprint" ] 2> /dev/null then # If fpm_footprint is an integer, that's a numeric value for the footprint old_free_footprint=$fpm_footprint + fpm_footprint=specific else old_free_footprint=0 fi @@ -75,18 +71,18 @@ fpm_usage="${YNH_CONFIG_MAIN_PHP_FPM_CONFIG_USAGE:-$old_fpm_usage}" show_config() { # here you are supposed to read some config file/database/other then print the values - # echo "YNH_CONFIG_${PANEL_ID}_${SECTION_ID}_${OPTION_ID}=value" + # ynh_return "YNH_CONFIG_${PANEL_ID}_${SECTION_ID}_${OPTION_ID}=value" - echo "YNH_CONFIG_MAIN_IS_PUBLIC_IS_PUBLIC=$is_public" + ynh_return "YNH_CONFIG_MAIN_IS_PUBLIC_IS_PUBLIC=$is_public" - echo "YNH_CONFIG_MAIN_OVERWRITE_FILES_OVERWRITE_NGINX=$overwrite_nginx" - echo "YNH_CONFIG_MAIN_OVERWRITE_FILES_OVERWRITE_PHPFPM=$overwrite_phpfpm" + ynh_return "YNH_CONFIG_MAIN_OVERWRITE_FILES_OVERWRITE_NGINX=$overwrite_nginx" + ynh_return "YNH_CONFIG_MAIN_OVERWRITE_FILES_OVERWRITE_PHPFPM=$overwrite_phpfpm" - echo "YNH_CONFIG_MAIN_GLOBAL_CONFIG_EMAIL_TYPE=$admin_mail_html" + ynh_return "YNH_CONFIG_MAIN_GLOBAL_CONFIG_EMAIL_TYPE=$admin_mail_html" - echo "YNH_CONFIG_MAIN_PHP_FPM_CONFIG_FOOTPRINT=$fpm_footprint" - echo "YNH_CONFIG_MAIN_PHP_FPM_CONFIG_FREE_FOOTPRINT=$free_footprint" - echo "YNH_CONFIG_MAIN_PHP_FPM_CONFIG_USAGE=$fpm_usage" + ynh_return "YNH_CONFIG_MAIN_PHP_FPM_CONFIG_FOOTPRINT=$fpm_footprint" + ynh_return "YNH_CONFIG_MAIN_PHP_FPM_CONFIG_FREE_FOOTPRINT=$free_footprint" + ynh_return "YNH_CONFIG_MAIN_PHP_FPM_CONFIG_USAGE=$fpm_usage" } #================================================= @@ -99,23 +95,24 @@ apply_config() { # MODIFY PUBLIC ACCESSIBILITY #================================================= - # Change public accessibility - if [ "$is_public" = "true" ] - then - yunohost app action run $app public_private --args is_public=1 - else - yunohost app action run $app public_private --args is_public=0 - fi + # Change public accessibility + if [ "$is_public" != "$old_is_public" ] + then + if [ "$is_public" = "1" ] + then + yunohost app action run $app public_private --args is_public=1 + else + yunohost app action run $app public_private --args is_public=0 + fi + fi #================================================= # MODIFY OVERWRITTING SETTINGS #================================================= # Set overwrite_nginx - overwrite_nginx=$(bool_to_01 $overwrite_nginx) ynh_app_setting_set --app=$app --key=overwrite_nginx --value="$overwrite_nginx" # Set overwrite_phpfpm - overwrite_phpfpm=$(bool_to_01 $overwrite_phpfpm) ynh_app_setting_set --app=$app --key=overwrite_phpfpm --value="$overwrite_phpfpm" #================================================= @@ -123,16 +120,26 @@ apply_config() { #================================================= # Set admin_mail_html - admin_mail_html=$(bool_to_01 $admin_mail_html) ynh_app_setting_set --app=$app --key=admin_mail_html --value="$admin_mail_html" #================================================= # RECONFIGURE PHP-FPM #================================================= - if [ "$fpm_usage" != "$old_fpm_usage" ] || [ "$fpm_footprint" != "$old_fpm_footprint" ] + if [ "$fpm_usage" != "$old_fpm_usage" ] || [ "$fpm_footprint" != "$old_fpm_footprint" ] || [ "$free_footprint" != "$old_free_footprint" ] then - ynh_add_fpm_config --usage=$fpm_usage --footprint=$fpm_footprint + # If fpm_footprint is set to 'specific', use $free_footprint value. + if [ "$fpm_footprint" = "specific" ] + then + fpm_footprint=$free_footprint + fi + + if [ "$fpm_footprint" != "0" ] + then + ynh_add_fpm_config --usage=$fpm_usage --footprint=$fpm_footprint + else + ynh_print_err --message="When selecting 'specific', you have to set a footprint value into the field below." + fi fi } diff --git a/scripts/upgrade b/scripts/upgrade index a19bc6d..ae644c3 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -45,53 +45,65 @@ ynh_script_progression --message="Ensuring downward compatibility..." # If final_path doesn't exist, create it if [ -z "$final_path" ]; then - final_path=/var/www/$app - ynh_app_setting_set --app=$app --key=final_path --value=$final_path + final_path=/var/www/$app + ynh_app_setting_set --app=$app --key=final_path --value=$final_path fi # If db_name doesn't exist, create it if [ -z "$db_name" ]; then - db_name=$(ynh_sanitize_dbid --db_name=$app) - ynh_app_setting_set --app=$app --key=db_name --value=$db_name + db_name=$(ynh_sanitize_dbid --db_name=$app) + ynh_app_setting_set --app=$app --key=db_name --value=$db_name fi # If is_public doesn't exist, create it if [ -z "$is_public" ]; then - public_check=$(ynh_app_setting_get --app=$app --key=skipped_uris) - # If skipped_uris is empty, that was a public installation. - if [ -z "$public_check" ]; then - is_public=1 - else - is_public=0 - fi - ynh_app_setting_set --app=$app --key=is_public --value=$is_public + public_check=$(ynh_app_setting_get --app=$app --key=skipped_uris) + # If skipped_uris is empty, that was a public installation. + if [ -z "$public_check" ]; then + is_public=1 + else + is_public=0 + fi + ynh_app_setting_set --app=$app --key=is_public --value=$is_public else - # Fix is_public as a boolean - if [ "$is_public" = "Yes" ]; then - ynh_app_setting_set --app=$app --key=is_public --value=1 - is_public=1 - elif [ "$is_public" = "No" ]; then - ynh_app_setting_set --app=$app --key=is_public --value=0 - is_public=0 - fi + # Fix is_public as a boolean + if [ "$is_public" = "Yes" ]; then + ynh_app_setting_set --app=$app --key=is_public --value=1 + is_public=1 + elif [ "$is_public" = "No" ]; then + ynh_app_setting_set --app=$app --key=is_public --value=0 + is_public=0 + fi fi # If overwrite_nginx doesn't exist, create it if [ -z "$overwrite_nginx" ]; then - overwrite_nginx=1 - ynh_app_setting_set --app=$app --key=overwrite_nginx --value=$overwrite_nginx + overwrite_nginx=1 + ynh_app_setting_set --app=$app --key=overwrite_nginx --value=$overwrite_nginx fi # If overwrite_phpfpm doesn't exist, create it if [ -z "$overwrite_phpfpm" ]; then - overwrite_phpfpm=1 - ynh_app_setting_set --app=$app --key=overwrite_phpfpm --value=$overwrite_phpfpm + overwrite_phpfpm=1 + ynh_app_setting_set --app=$app --key=overwrite_phpfpm --value=$overwrite_phpfpm fi # If admin_mail_html doesn't exist, create it if [ -z "$admin_mail_html" ]; then - admin_mail_html=1 - ynh_app_setting_set --app=$app --key=admin_mail_html --value=$admin_mail_html + admin_mail_html=1 + ynh_app_setting_set --app=$app --key=admin_mail_html --value=$admin_mail_html +fi + +# If fpm_footprint doesn't exist, create it +if [ -z "$fpm_footprint" ]; then + fpm_footprint=low + ynh_app_setting_set --app=$app --key=fpm_footprint --value=$fpm_footprint +fi + +# If fpm_usage doesn't exist, create it +if [ -z "$fpm_usage" ]; then + fpm_usage=low + ynh_app_setting_set --app=$app --key=fpm_usage --value=$fpm_usage fi # If fpm_footprint doesn't exist, create it @@ -114,8 +126,8 @@ ynh_script_progression --message="Backing up the app before upgrading (may take # Backup the current version of the app ynh_backup_before_upgrade ynh_clean_setup () { - # restore it if the upgrade fails - ynh_restore_upgradebackup + # restore it if the upgrade fails + ynh_restore_upgradebackup } # Exit if an error occurs during the execution of the script ynh_abort_if_errors @@ -142,9 +154,9 @@ ynh_maintenance_mode_ON if [ "$upgrade_type" == "UPGRADE_APP" ] then - ynh_script_progression --message="Upgrading source files..." --weight=3 - # Download, check integrity, uncompress and patch the source from app.src - ynh_setup_source --dest_dir="$final_path" + ynh_script_progression --message="Upgrading source files..." --weight=3 + # Download, check integrity, uncompress and patch the source from app.src + ynh_setup_source --dest_dir="$final_path" fi #================================================= @@ -154,9 +166,9 @@ fi # Overwrite the nginx configuration only if it's allowed if [ $overwrite_nginx -eq 1 ] then - ynh_script_progression --message="Upgrading nginx web server configuration..." --weight=2 - # Create a dedicated nginx config - ynh_add_nginx_config + ynh_script_progression --message="Upgrading nginx web server configuration..." --weight=2 + # Create a dedicated nginx config + ynh_add_nginx_config fi #================================================= @@ -174,9 +186,9 @@ ynh_system_user_create --username=$app # Overwrite the php-fpm configuration only if it's allowed if [ $overwrite_phpfpm -eq 1 ] then - ynh_script_progression --message="Upgrading php-fpm configuration..." --weight=2 - # Create a dedicated php-fpm config - ynh_add_fpm_config --usage=$fpm_usage --footprint=$fpm_footprint + ynh_script_progression --message="Upgrading php-fpm configuration..." --weight=2 + # Create a dedicated php-fpm config + ynh_add_fpm_config --usage=$fpm_usage --footprint=$fpm_footprint fi #================================================= @@ -214,13 +226,13 @@ chown -R $app $final_path/cache $final_path/plugins $final_path/updates if [ "$upgrade_type" == "UPGRADE_APP" ] then - ynh_script_progression --message="Upgrading Leed with curl..." --weight=4 - # Set the app as temporarily public for curl call - ynh_app_setting_set --app=$app --key=unprotected_uris --value="/" - # Regen SSOwat configuration - yunohost app ssowatconf - # Start the upgrade procedure of leed. - ynh_local_curl "/" + ynh_script_progression --message="Upgrading Leed with curl..." --weight=4 + # Set the app as temporarily public for curl call + ynh_app_setting_set --app=$app --key=unprotected_uris --value="/" + # Regen SSOwat configuration + yunohost app ssowatconf + # Start the upgrade procedure of leed. + ynh_local_curl "/" fi #================================================= @@ -241,10 +253,10 @@ ynh_script_progression --message="Upgrading SSOwat configuration..." # Make app private if necessary if [ $is_public -eq 0 ] then - # Remove the public access - ynh_app_setting_delete --app=$app --key=unprotected_uris - # Set the action.php script public for the cron task - ynh_app_setting_set --app=$app --key=skipped_uris --value="/action.php" + # Remove the public access + ynh_app_setting_delete --app=$app --key=unprotected_uris + # Set the action.php script public for the cron task + ynh_app_setting_set --app=$app --key=skipped_uris --value="/action.php" fi #=================================================