#!/bin/bash #================================================= # GENERIC STARTING #================================================= # IMPORT GENERIC HELPERS #================================================= source _common.sh source /usr/share/yunohost/helpers #================================================= # RETRIEVE ARGUMENTS #================================================= app=${YNH_APP_INSTANCE_NAME:-$YNH_APP_ID} final_path=$(ynh_app_setting_get $app final_path) #================================================= # SPECIFIC CODE #================================================= # DECLARE GENERIC FUNCTION #================================================= config_file="$final_path/Backup_list.conf" passkey="$final_path/passkey" get_config_value() { option_name="$1" # Get the value of this option in the config file grep "^$option_name=" "$config_file" | cut -d= -f2 } #================================================= # LOAD VALUES #================================================= # Load the real value from the app config or elsewhere. # Then get the value from the form. # If the form has a value for a variable, take the value from the form, # Otherwise, keep the value from the app config. # Encryption old_encrypt="$(get_config_value encrypt)" encrypt="${YNH_CONFIG_MAIN_ENCRYPTION_ENCRYPT:-$old_encrypt}" # Encryption password ynh_print_OFF old_encrypt_password="$(cat $passkey)" encrypt_password="${YNH_CONFIG_MAIN_ENCRYPTION_ENCRYPTION_PWD:-$old_encrypt_password}" ynh_print_ON # ynh_core_backup old_ynh_core_backup="$(get_config_value ynh_core_backup)" ynh_core_backup="${YNH_CONFIG_MAIN_BACKUP_TYPES_CORE_BACKUP:-$old_ynh_core_backup}" # ynh_app_backup if [ -n "$(get_config_value ynh_app_backup)" ] then old_ynh_app_backup="true" else old_ynh_app_backup="false" fi ynh_app_backup="${YNH_CONFIG_MAIN_BACKUP_TYPES_APPS_BACKUP:-$old_ynh_app_backup}" # Frequency old_frequency="$(grep "^frequency: " "/etc/yunohost/apps/$app/settings.yml" | cut -d' ' -f2)" frequency="${YNH_CONFIG_MAIN_BACKUP_OPTIONS_FREQUENCY:-$old_frequency}" # Max size old_max_size="$(get_config_value max_size)" max_size="${YNH_CONFIG_MAIN_BACKUP_OPTIONS_MAX_SIZE:-$old_max_size}" # Overwrite cron file old_overwrite_cron="$(ynh_app_setting_get $app overwrite_cron)" old_overwrite_cron=$(bool_to_true_false $old_overwrite_cron) overwrite_cron="${YNH_CONFIG_MAIN_OVERWRITE_FILES_OVERWRITE_CRON:-$old_overwrite_cron}" # Type of admin mail configuration old_admin_mail_html="$(ynh_app_setting_get $app 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}" #================================================= # SHOW_CONFIG FUNCTION FOR 'SHOW' COMMAND #================================================= 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" echo "YNH_CONFIG_MAIN_ENCRYPTION_ENCRYPT=$encrypt" echo "YNH_CONFIG_MAIN_ENCRYPTION_ENCRYPTION_PWD=" echo "YNH_CONFIG_MAIN_BACKUP_TYPES_CORE_BACKUP=$ynh_core_backup" echo "YNH_CONFIG_MAIN_BACKUP_TYPES_APPS_BACKUP=$ynh_app_backup" echo "YNH_CONFIG_MAIN_BACKUP_OPTIONS_FREQUENCY=$frequency" echo "YNH_CONFIG_MAIN_BACKUP_OPTIONS_MAX_SIZE=$max_size" echo "YNH_CONFIG_MAIN_OVERWRITE_FILES_OVERWRITE_CRON=$overwrite_cron" echo "YNH_CONFIG_MAIN_GLOBAL_CONFIG_EMAIL_TYPE=$admin_mail_html" } #================================================= # MODIFY THE CONFIGURATION #================================================= apply_config() { # Change the password if needed if [ "$encrypt" = "true" ]; then ynh_print_OFF test -n "$encrypt_password" || ynh_die "The password for encryption can't be empty if you choose to enable encryption." ynh_print_ON # Replace the password by the previous one passkey="$final_path/passkey" ynh_print_OFF; echo "$encrypt_password" > "$passkey"; ynh_print_ON chmod 400 "$passkey" ynh_replace_string "^cryptpass=.*" "cryptpass=$passkey" "$config_file" fi # Change encrypt in the config file ynh_replace_string "^encrypt=.*" "encrypt=$encrypt" "$config_file" # Change ynh_core_backup in the config file ynh_replace_string "^ynh_core_backup=.*" "ynh_core_backup=$ynh_core_backup" "$config_file" # Change ynh_app_backup in the config file if [ "$ynh_app_backup" = "true" ] && [ "$old_ynh_app_backup" = "false" ] then # If ynh_app_backup changed from false to true. # Add all current applications to the backup while read backup_app do ynh_print_info "Add a backup for the app $backup_app." >&2 ynh_replace_string "^ynh_app_backup=$" "ynh_app_backup=$backup_app\n&" "$config_file" done <<< "$(yunohost app list -i | grep id: | sed 's/.*id: //')" elif [ "$ynh_app_backup" = "false" ] && [ "$old_ynh_app_backup" = "true" ] then # Remove all app currently backup # By deleting all line starting by 'ynh_app_backup=' and having something after '=' sed -i "/^ynh_app_backup=.\+$/d" "$config_file" fi # Change frequency in the cron file and store the value into the settings ynh_app_setting_set $app frequency "$frequency" if [ "$frequency" = "Daily" ]; then cron_freq="0 2 * * *" run_freq="every day" elif [ "$frequency" = "Each 3 days" ]; then cron_freq="0 2 */3 * *" run_freq="each 3 days" elif [ "$frequency" = "Weekly" ]; then cron_freq="0 2 * * 0" run_freq="once a week on sunday" elif [ "$frequency" = "Biweekly" ]; then cron_freq="0 2 * * 0/2" run_freq="one sunday out of two" else # Monthly cron_freq="0 2 1 * *" run_freq="once a month on the first sunday" fi ynh_replace_string ".* root" "$cron_freq root" /etc/cron.d/$app # Change max_size in the config file ynh_replace_string "^max_size=.*" "max_size=$max_size" "$config_file" # Set overwrite_cron overwrite_cron=$(bool_to_01 $overwrite_cron) ynh_app_setting_set $app overwrite_cron "$overwrite_cron" # Set admin_mail_html admin_mail_html=$(bool_to_01 $admin_mail_html) ynh_app_setting_set $app admin_mail_html "$admin_mail_html" } #================================================= # GENERIC FINALIZATION #================================================= # SELECT THE ACTION FOLLOWING THE GIVEN ARGUMENT #================================================= case $1 in show) show_config;; apply) apply_config;; esac