From 21a002970bf25e9bc5cb462eb294ff3762fd51cf Mon Sep 17 00:00:00 2001 From: Maniack Crudelis Date: Tue, 7 Aug 2018 13:13:25 +0200 Subject: [PATCH] Add actions and config-panel --- actions.json | 33 ++++ config_panel.json | 87 +++++++++ scripts/actions/add_remove_abiword | 94 +++++++++ scripts/actions/add_remove_libreoffice | 94 +++++++++ scripts/actions/list_all_pads | 35 ++++ scripts/config | 257 +++++++++++++++++++++++++ scripts/install | 2 +- scripts/upgrade | 2 +- 8 files changed, 602 insertions(+), 2 deletions(-) create mode 100644 actions.json create mode 100644 config_panel.json create mode 100755 scripts/actions/add_remove_abiword create mode 100755 scripts/actions/add_remove_libreoffice create mode 100755 scripts/actions/list_all_pads create mode 100644 scripts/config diff --git a/actions.json b/actions.json new file mode 100644 index 0000000..518828c --- /dev/null +++ b/actions.json @@ -0,0 +1,33 @@ +[{ + "id": "add_remove_abiword", + "name": "Install/remove abiword", + "command": "/bin/bash scripts/actions/add_remove_abiword", + "user": "root", + "accepted_return_codes": [0], + "description": { + "en": "Install or remove abiword.", + "fr": "Installe ou supprime abiword." + } +}, +{ + "id": "add_remove_libreoffice", + "name": "Install/remove libreoffice", + "command": "/bin/bash scripts/actions/add_remove_libreoffice", + "user": "root", + "accepted_return_codes": [0], + "description": { + "en": "Install or remove libreoffice.", + "fr": "Installe ou supprime libreoffice." + } +}, +{ + "id": "list_all_pads", + "name": "List all existing pads", + "command": "/bin/bash scripts/actions/list_all_pads", + "user": "root", + "accepted_return_codes": [0], + "description": { + "en": "List all existing pads.", + "fr": "Liste tout les pads existants." + } +}] diff --git a/config_panel.json b/config_panel.json new file mode 100644 index 0000000..1d34402 --- /dev/null +++ b/config_panel.json @@ -0,0 +1,87 @@ +{ + "name": "Etherpad configuration panel", + "version": "0.1", + "panel": [{ + "name": "Etherpad configuration", + "id": "main", + "sections": [{ + "name": "Export", + "id": "export", + "options": [{ + "name": "Use abiword (~260Mo) or libreoffice (~400Mo) (more stable) to expand export possibilities (pdf, doc) ?", + "help": "We can't use a choices field for now. In the meantime please choose between one of this values:
none, abiword, libreoffice.", + "id": "export", + "type": "text", + "//": "\"choices\" : [\"none\", \"abiword\", \"libreoffice\"]", + "default" : "none" + }] + }, + { + "name": "Default pad configuration", + "id": "pad_configuration", + "options": [{ + "name": "Hide authorship colors ?", + "id": "pad_config_nocolors", + "type": "bool", + "default": false + }, + { + "name": "Show line numbers ?", + "id": "pad_config_showlinenumbers", + "type": "bool", + "default": true + }, + { + "name": "Show chat and users ?", + "id": "pad_config_chatandusers", + "type": "bool", + "default": false + }, + { + "name": "Always show chat ?", + "id": "pad_config_alwaysshowchat", + "type": "bool", + "default": false + }, + { + "name": "Show markdown syntax ?", + "id": "pad_config_show_markdown", + "type": "bool", + "default": false + }, + { + "name": "Page view ?", + "id": "pad_config_pageview", + "type": "bool", + "default": false + }] + }, + { + "name": "Mypads configuration", + "id": "mypads_configuration", + "options": [{ + "name": "Enable Mypads plugin ?", + "id": "mypads", + "type": "bool", + "default": true + }, + { + "name": "Use ldap with Mypads ?", + "id": "useldap", + "type": "bool", + "default": true + }] + }, + { + "name": "Public access", + "id": "is_public", + "options": [{ + "name": "Is it a public website ?", + "id": "is_public", + "type": "bool", + "default": true + }] + }] + } +] +} diff --git a/scripts/actions/add_remove_abiword b/scripts/actions/add_remove_abiword new file mode 100755 index 0000000..1e4b3cf --- /dev/null +++ b/scripts/actions/add_remove_abiword @@ -0,0 +1,94 @@ +#!/bin/bash + +#================================================= +# GENERIC STARTING +#================================================= +# IMPORT GENERIC HELPERS +#================================================= + +source scripts/_common.sh +source /usr/share/yunohost/helpers + +#================================================= +# RETRIEVE ARGUMENTS +#================================================= + +app=$YNH_APP_ID + +#================================================= +# CHECK IF ARGUMENTS ARE CORRECT +#================================================= + +#================================================= +# CHECK IF AN ACTION HAS TO BE DONE +#================================================= + +# Check the dependencies of the meta packages of etherpad_mypads with apt-cache +if apt-cache depends ${app//_/-}-ynh-deps | grep --quiet abiword +then + # abiword is already a dependence of etherpad_mypads. + # abiword should be removed. + abiword=0 + ynh_print_info "Abiword will be removed." >&2 +else + # abiword isn't a dependence of etherpad_mypads. + # abiword should be installed. + ynh_print_info "Abiword will be installed." >&2 + abiword=1 +fi + +if apt-cache depends ${app//_/-}-ynh-deps | grep --quiet libreoffice-writer +then + # libreoffice is already a dependence of etherpad_mypads. + # Keep it + libreoffice=1 +else + # libreoffice isn't a dependence of etherpad_mypads. + # Do not add it + libreoffice=0 +fi + +#================================================= +# SPECIFIC ACTION +#================================================= +# INSTALL OR REMOVE ABIWORD +#================================================= + +# Load common variables, and especially abiword dependencies. +source scripts/_variables + +dependencies="" +if [ $abiword -eq 1 ] +then + # Add abiword dependencies if abiword has to be installed + dependencies="$dependencies $abiword_app_depencencies" +fi +if [ $libreoffice -eq 1 ] +then + # Add libreoffice dependencies if libreoffice is already installed to keep it as a dependence. + dependencies="$dependencies $libreoffice_app_dependencies" +fi + +# Rebuild the meta package and install the new dependencies +( cd scripts # Move to scripts directory to allow the helper to find the manifest where it expects to find it. +ynh_install_app_dependencies $dependencies) + +# Remove all unused dependencies +ynh_package_autopurge + +#================================================= +# SET THE DEFAULT EXPORT APP +#================================================= + +if [ $abiword -eq 1 ] +then + # Set abiword as default export app + yunohost app config apply $app -a "YNH_CONFIG_MAIN_EXPORT_EXPORT=abiword" +elif [ $libreoffice -eq 1 ] +then + # Set libreoffice as default export app + yunohost app config apply $app -a "YNH_CONFIG_MAIN_EXPORT_EXPORT=libreoffice" +else + # Remove any export app + yunohost app config apply $app -a "YNH_CONFIG_MAIN_EXPORT_EXPORT=none" +fi diff --git a/scripts/actions/add_remove_libreoffice b/scripts/actions/add_remove_libreoffice new file mode 100755 index 0000000..6f32eb5 --- /dev/null +++ b/scripts/actions/add_remove_libreoffice @@ -0,0 +1,94 @@ +#!/bin/bash + +#================================================= +# GENERIC STARTING +#================================================= +# IMPORT GENERIC HELPERS +#================================================= + +source scripts/_common.sh +source /usr/share/yunohost/helpers + +#================================================= +# RETRIEVE ARGUMENTS +#================================================= + +app=$YNH_APP_ID + +#================================================= +# CHECK IF ARGUMENTS ARE CORRECT +#================================================= + +#================================================= +# CHECK IF AN ACTION HAS TO BE DONE +#================================================= + +# Check the dependencies of the meta packages of etherpad_mypads with apt-cache +if apt-cache depends ${app//_/-}-ynh-deps | grep --quiet libreoffice-writer +then + # libreoffice is already a dependence of etherpad_mypads. + # libreoffice should be removed. + libreoffice=0 + ynh_print_info "Libreoffice writer will be removed." >&2 +else + # libreoffice isn't a dependence of etherpad_mypads. + # libreoffice should be installed. + ynh_print_info "Libreoffice writer will be installed." >&2 + libreoffice=1 +fi + +if apt-cache depends ${app//_/-}-ynh-deps | grep --quiet abiword +then + # abiword is already a dependence of etherpad_mypads. + # Keep it + abiword=1 +else + # abiword isn't a dependence of etherpad_mypads. + # Do not add it + abiword=0 +fi + +#================================================= +# SPECIFIC ACTION +#================================================= +# INSTALL OR REMOVE LIBREOFFICE +#================================================= + +# Load common variables, and especially libreoffice dependencies. +source scripts/_variables + +dependencies="" +if [ $libreoffice -eq 1 ] +then + # Add libreoffice dependencies if libreoffice has to be installed + dependencies="$dependencies $libreoffice_app_dependencies" +fi +if [ $abiword -eq 1 ] +then + # Add abiword dependencies if abiword is already installed to keep it as a dependence. + dependencies="$dependencies $abiword_app_depencencies" +fi + +# Rebuild the meta package and install the new dependencies +( cd scripts # Move to scripts directory to allow the helper to find the manifest where it expects to find it. +ynh_install_app_dependencies $dependencies) + +# Remove all unused dependencies +ynh_package_autopurge + +#================================================= +# SET THE DEFAULT EXPORT APP +#================================================= + +if [ $libreoffice -eq 1 ] +then + # Set libreoffice as default export app + yunohost app config apply $app -a "YNH_CONFIG_MAIN_EXPORT_EXPORT=libreoffice" +elif [ $abiword -eq 1 ] +then + # Set abiword as default export app + yunohost app config apply $app -a "YNH_CONFIG_MAIN_EXPORT_EXPORT=abiword" +else + # Remove any export app + yunohost app config apply $app -a "YNH_CONFIG_MAIN_EXPORT_EXPORT=none" +fi diff --git a/scripts/actions/list_all_pads b/scripts/actions/list_all_pads new file mode 100755 index 0000000..2d8160e --- /dev/null +++ b/scripts/actions/list_all_pads @@ -0,0 +1,35 @@ +#!/bin/bash + +#================================================= +# GENERIC STARTING +#================================================= +# IMPORT GENERIC HELPERS +#================================================= + +source scripts/_common.sh +source /usr/share/yunohost/helpers + +#================================================= +# RETRIEVE ARGUMENTS +#================================================= + +app=$YNH_APP_ID + +db_name=$(ynh_app_setting_get $app db_name) +db_pwd=$(ynh_app_setting_get $app mysqlpwd) + +#================================================= +# CHECK IF ARGUMENTS ARE CORRECT +#================================================= + +#================================================= +# CHECK IF AN ACTION HAS TO BE DONE +#================================================= + +#================================================= +# SPECIFIC ACTION +#================================================= +# LIST ALL PADS FROM THE DATABASE +#================================================= + +mysql -u $db_name -p$db_pwd $db_name --silent -e 'select distinct substring(store.key,5,locate(":",store.key,5)-5) as "pads" from store where store.key like "pad:%"' | sed 's/^/>> /g' >&2 diff --git a/scripts/config b/scripts/config new file mode 100644 index 0000000..46d205a --- /dev/null +++ b/scripts/config @@ -0,0 +1,257 @@ +#!/bin/bash + +#================================================= +# GENERIC STARTING +#================================================= +# IMPORT GENERIC HELPERS +#================================================= + +source _common.sh +source /usr/share/yunohost/helpers +# Load common variables for all scripts. +source _variables + +#================================================= +# RETRIEVE ARGUMENTS +#================================================= + +app=$YNH_APP_ID + +final_path=$(ynh_app_setting_get $app final_path) + +#================================================= +# SPECIFIC CODE +#================================================= +# DECLARE GENERIC FUNCTION +#================================================= + +config_file="$final_path/settings.json" + +get_config_value() { + option_name="$1" + # Get the value of this option in the config file + grep "\"$option_name\" *:" "$config_file" | cut -d':' -f2 | sed s'/ //g' | cut -d',' -f1 + +} + +#================================================= +# 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. + + # Export + old_export="$(ynh_app_setting_get $app export)" + export="${YNH_CONFIG_MAIN_EXPORT_EXPORT:-$old_export}" + + # padOptions noColors + old_pad_config_nocolors="$(get_config_value noColors)" + pad_config_nocolors="${YNH_CONFIG_MAIN_PAD_CONFIGURATION_PAD_CONFIG_NOCOLORS:-$old_pad_config_nocolors}" + # padOptions showLineNumbers + old_pad_config_showlinenumbers="$(get_config_value showLineNumbers)" + pad_config_showlinenumbers="${YNH_CONFIG_MAIN_PAD_CONFIGURATION_PAD_CONFIG_SHOWLINENUMBERS:-$old_pad_config_showlinenumbers}" + # padOptions chatAndUsers + old_pad_config_chatandusers="$(get_config_value chatAndUsers)" + pad_config_chatandusers="${YNH_CONFIG_MAIN_PAD_CONFIGURATION_PAD_CONFIG_CHATANDUSERS:-$old_pad_config_chatandusers}" + # padOptions alwaysShowChat + old_pad_config_alwaysshowchat="$(get_config_value alwaysShowChat)" + pad_config_alwaysshowchat="${YNH_CONFIG_MAIN_PAD_CONFIGURATION_PAD_CONFIG_ALWAYSSHOWCHAT:-$old_pad_config_alwaysshowchat}" + # Plugin option ep_markdown_default + old_pad_config_show_markdown="$(get_config_value ep_markdown_default)" + pad_config_show_markdown="${YNH_CONFIG_MAIN_PAD_CONFIGURATION_PAD_CONFIG_SHOW_MARKDOWN:-$old_pad_config_show_markdown}" + # Plugin option ep_page_view_default + old_pad_config_pageview="$(get_config_value ep_page_view_default)" + pad_config_pageview="${YNH_CONFIG_MAIN_PAD_CONFIGURATION_PAD_CONFIG_PAGEVIEW:-$old_pad_config_pageview}" + + # Mypads + if [ -d $final_path/node_modules/ep_mypads ] + then + old_mypads=true + else + old_mypads=false + fi + mypads="${YNH_CONFIG_MAIN_MYPADS_CONFIGURATION_MYPADS:-$old_mypads}" + # Ldap for Mypads + if grep -q "//noldap" $config_file + then + old_useldap=false + else + old_useldap=true + fi + useldap="${YNH_CONFIG_MAIN_MYPADS_CONFIGURATION_USELDAP:-$old_useldap}" + + # is_public + old_is_public="$(ynh_app_setting_get $app is_public)" + if [ $old_is_public -eq 1 ] + then + old_is_public=true + else + old_is_public=false + fi + is_public="${YNH_CONFIG_MAIN_IS_PUBLIC_IS_PUBLIC:-$old_is_public}" + +#================================================= +# 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_EXPORT_EXPORT=$export" + + echo "YNH_CONFIG_MAIN_PAD_CONFIGURATION_PAD_CONFIG_NOCOLORS=$pad_config_nocolors" + echo "YNH_CONFIG_MAIN_PAD_CONFIGURATION_PAD_CONFIG_SHOWLINENUMBERS=$pad_config_showlinenumbers" + echo "YNH_CONFIG_MAIN_PAD_CONFIGURATION_PAD_CONFIG_CHATANDUSERS=$pad_config_chatandusers" + echo "YNH_CONFIG_MAIN_PAD_CONFIGURATION_PAD_CONFIG_ALWAYSSHOWCHAT=$pad_config_alwaysshowchat" + echo "YNH_CONFIG_MAIN_PAD_CONFIGURATION_PAD_CONFIG_SHOW_MARKDOWN=$pad_config_show_markdown" + echo "YNH_CONFIG_MAIN_PAD_CONFIGURATION_PAD_CONFIG_PAGEVIEW=$pad_config_pageview" + + echo "YNH_CONFIG_MAIN_MYPADS_CONFIGURATION_MYPADS=$mypads" + echo "YNH_CONFIG_MAIN_MYPADS_CONFIGURATION_USELDAP=$useldap" + + echo "YNH_CONFIG_MAIN_IS_PUBLIC_IS_PUBLIC=$is_public" +} + +#================================================= +# MODIFY THE CONFIGURATION +#================================================= + +apply_config() { + restart_etherpad=0 + + # Change configuration if needed + # padOptions noColors + if [ "$pad_config_nocolors" != "$old_pad_config_nocolors" ] + then + ynh_replace_string "\(\"noColors\" *: \).*," "\1$pad_config_nocolors," "$config_file" + restart_etherpad=1 + fi + + # padOptions showLineNumbers + if [ "$pad_config_showlinenumbers" != "$old_pad_config_showlinenumbers" ] + then + ynh_replace_string "\(\"showLineNumbers\" *: \).*," "\1$pad_config_showlinenumbers," "$config_file" + restart_etherpad=1 + fi + + # padOptions chatAndUsers + if [ "$pad_config_chatandusers" != "$old_pad_config_chatandusers" ] + then + ynh_replace_string "\(\"chatAndUsers\" *: \).*," "\1$pad_config_chatandusers," "$config_file" + restart_etherpad=1 + fi + + # padOptions alwaysShowChat + if [ "$pad_config_alwaysshowchat" != "$old_pad_config_alwaysshowchat" ] + then + ynh_replace_string "\(\"alwaysShowChat\" *: \).*," "\1$pad_config_alwaysshowchat," "$config_file" + restart_etherpad=1 + fi + + # Plugin option ep_markdown_default + if [ "$pad_config_show_markdown" != "$old_pad_config_show_markdown" ] + then + ynh_replace_string "\(\"ep_markdown_default\" *: \).*," "\1$pad_config_show_markdown," "$config_file" + restart_etherpad=1 + fi + + # Plugin option ep_page_view_default + if [ "$pad_config_pageview" != "$old_pad_config_pageview" ] + then + ynh_replace_string "\(\"ep_page_view_default\" *: \).*," "\1$pad_config_pageview," "$config_file" + restart_etherpad=1 + fi + + # Export + if [ "$export" != "$old_export" ] + then + if [ "$export" = "abiword" ] + then + # if abiword isn't installed, call the action add_remove_abiword. + if ! which abiword > /dev/null + then + yunohost app action run $app add_remove_abiword + fi + ynh_replace_string "\(\"abiword\" *: \).*," "\1\"$(which abiword)\"," "$config_file" + ynh_replace_string "\(\"soffice\" *: \).*," "\1null," "$config_file" + elif [ "$export" = "libreoffice" ] + then + # if libreoffice isn't installed, call the action add_remove_libreoffice. + if ! which soffice > /dev/null + then + yunohost app action run $app add_remove_libreoffice + fi + ynh_replace_string "\(\"abiword\" *: \).*," "\1null," "$config_file" + ynh_replace_string "\(\"soffice\" *: \).*," "\1\"$(which soffice)\"," "$config_file" + else + ynh_replace_string "\(\"abiword\" *: \).*," "\1null," "$config_file" + ynh_replace_string "\(\"soffice\" *: \).*," "\1null," "$config_file" + fi + restart_etherpad=1 + fi + + # Mypads + if [ "$mypads" != "$old_mypads" ] + then + ynh_use_nodejs + pushd "$final_path" + if [ "$mypads" = "true" ] + then + npm install ep_mypads@${mypads_version} + else + npm uninstall ep_mypads + fi + popd + chown -R $app: $final_path/node_modules + restart_etherpad=1 + fi + + # Ldap for Mypads + if [ "$useldap" != "$old_useldap" ] + then + if [ "$useldap" = "true" ] + then + ynh_replace_string "//noldap\(.*\)" "\1 //useldap" "$final_path/settings.json" + else + ynh_replace_string "\(.*\) //useldap" "//noldap\1" "$final_path/settings.json" + fi + restart_etherpad=1 + fi + + + if [ $restart_etherpad -eq 1 ] + then + # Wait for etherpad to be fully started + ynh_check_starting "You can access your Etherpad instance at" "/var/log/$app/etherpad.log" "120" + fi + + # Change public accessibility + if [ "$is_public" = "true" ] + then + is_public=1 + else + is_public=0 + fi + if [ $is_public -eq 1 ]; then + ynh_app_setting_set $app skipped_uris "/" + else + ynh_app_setting_set $app skipped_uris "/admin" # etherpad admin page doesn't support SSO... + fi + ynh_app_setting_set $app is_public $is_public + yunohost app ssowatconf +} + +#================================================= +# GENERIC FINALIZATION +#================================================= +# SELECT THE ACTION FOLLOWING THE GIVEN ARGUMENT +#================================================= + +case $1 in + show) show_config;; + apply) apply_config;; +esac diff --git a/scripts/install b/scripts/install index 929c3af..693dc65 100644 --- a/scripts/install +++ b/scripts/install @@ -186,7 +186,7 @@ ynh_replace_string "__LANGUAGE__" "$language" "$final_path/settings.json" # Use ldap for mypads if [ $mypads -eq 1 ] && [ $useldap -eq 1 ] then - ynh_replace_string "//noldap" "" "$final_path/settings.json" + ynh_replace_string "//noldap\(.*\)" "\1 //useldap" "$final_path/settings.json" fi ynh_store_file_checksum "$final_path/settings.json" # Store config file checksum diff --git a/scripts/upgrade b/scripts/upgrade index 7941647..0df9520 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -201,7 +201,7 @@ ynh_replace_string "__LANGUAGE__" "$language" "$final_path/settings.json" # Use ldap for mypads if [ $mypads -eq 1 ] && [ $useldap -eq 1 ] then - ynh_replace_string "//noldap" "" "$final_path/settings.json" + ynh_replace_string "//noldap\(.*\)" "\1 //useldap" "$final_path/settings.json" fi ynh_store_file_checksum "$final_path/settings.json" # Recalculate and store the config file checksum into the app settings