diff --git a/.github/workflows/updater.sh b/.github/workflows/updater.sh index 3811163..baafd8f 100644 --- a/.github/workflows/updater.sh +++ b/.github/workflows/updater.sh @@ -96,6 +96,7 @@ SOURCE_SUM=$checksum SOURCE_SUM_PRG=sha256sum SOURCE_FORMAT=$extension SOURCE_IN_SUBDIR=true +SOURCE_FILENAME= EOT echo "... conf/$src.src updated" @@ -116,7 +117,7 @@ done # GENERIC FINALIZATION #================================================= -# Install moreutils, needed for sponge +# Replace new version in manifest echo "$(jq -s --indent 4 ".[] | .version = \"$version~ynh1\"" manifest.json)" > manifest.json # No need to update the README, yunohost-bot takes care of it diff --git a/check_process b/check_process index 3b4de7c..63559a2 100644 --- a/check_process +++ b/check_process @@ -2,10 +2,10 @@ ; Manifest domain="domain.tld" path="/path" + is_public=1 + language="en" admin="john" password="password" - language="en" - is_public=1 export="libreoffice" mypads=1 useldap=1 @@ -32,8 +32,11 @@ setup_private=1 setup_public=1 upgrade=1 + # 1.8.17~ynh1 + upgrade=1 from_commit=44f73d6d49c4ece92648f0374cf02ec4e9e3fb5f backup_restore=1 multi_instance=1 + port_already_use=0 change_url=1 actions=0 config_panel=0 diff --git a/conf/app.src b/conf/app.src index e224fe6..6f42fe9 100644 --- a/conf/app.src +++ b/conf/app.src @@ -3,3 +3,5 @@ SOURCE_SUM=3b51eb0259764669dedfb4d13cdbe8d4a2dea37735fe32941aac39b5def9f99b SOURCE_SUM_PRG=sha256sum ARCH_FORMAT=tar.gz SOURCE_IN_SUBDIR=true +SOURCE_FILENAME= +SOURCE_EXTRACT=true diff --git a/conf/systemd.service b/conf/systemd.service index 2e6be3b..6c5ff08 100644 --- a/conf/systemd.service +++ b/conf/systemd.service @@ -6,10 +6,10 @@ After=syslog.target network.target Type=simple User=__APP__ Group=__APP__ -WorkingDirectory=__FINALPATH__ +WorkingDirectory=__FINALPATH__/ Environment=NODE_ENV=production Environment="__YNH_NODE_LOAD_PATH__" -ExecStart=__FINALPATH__/src/bin/run.sh +ExecStart=__YNH_NODE__ __FINALPATH__/src/node/server.js StandardOutput=append:/var/log/__APP__/etherpad.log StandardError=inherit Restart=always diff --git a/manifest.json b/manifest.json index 6617cf9..367cec3 100644 --- a/manifest.json +++ b/manifest.json @@ -47,12 +47,13 @@ "default": "/pad" }, { - "name": "admin", - "type": "user" - }, - { - "name": "password", - "type": "password" + "name": "is_public", + "type": "boolean", + "help": { + "en": "If your Etherpad instance is public, everyone will be able to create a pad or see an existing one.", + "fr": "Si votre instance Etherpad est publique, tout le monde pourra créer un pad ou voir un pad existant." + }, + "default": true }, { "name": "language", @@ -76,13 +77,12 @@ "default": "en" }, { - "name": "is_public", - "type": "boolean", - "help": { - "en": "If your Etherpad instance is public, everyone will be able to create a pad or see an existing one.", - "fr": "Si votre instance Etherpad est publique, tout le monde pourra créer un pad ou voir un pad existant." - }, - "default": true + "name": "admin", + "type": "user" + }, + { + "name": "password", + "type": "password" }, { "name": "export", diff --git a/scripts/_common.sh b/scripts/_common.sh index d53a72b..c1891a8 100755 --- a/scripts/_common.sh +++ b/scripts/_common.sh @@ -11,7 +11,7 @@ abiword_app_depencencies="abiword" libreoffice_app_dependencies="unoconv libreoffice-writer" # NodeJS version -nodejs_version=16 +nodejs_version=14 # MyPads version # This variable is mostly used to force an upgrade of the package in case of new versions of MyPads. diff --git a/scripts/backup b/scripts/backup index 3166fda..42d7600 100644 --- a/scripts/backup +++ b/scripts/backup @@ -46,11 +46,11 @@ ynh_backup --src_path="$final_path" ynh_backup --src_path="/etc/nginx/conf.d/$domain.d/$app.conf" #================================================= -# BACKUP THE MYSQL DATABASE +# BACKUP FAIL2BAN CONFIGURATION #================================================= -ynh_print_info --message="Backing up the MySQL database..." -ynh_mysql_dump_db --database="$db_name" > db.sql +ynh_backup --src_path="/etc/fail2ban/jail.d/$app.conf" +ynh_backup --src_path="/etc/fail2ban/filter.d/$app.conf" #================================================= # SPECIFIC BACKUP @@ -67,11 +67,11 @@ ynh_backup --src_path="/etc/logrotate.d/$app" ynh_backup --src_path="/etc/systemd/system/$app.service" #================================================= -# BACKUP FAIL2BAN CONFIGURATION +# BACKUP THE MYSQL DATABASE #================================================= +ynh_print_info --message="Backing up the MySQL database..." -ynh_backup --src_path="/etc/fail2ban/jail.d/$app.conf" -ynh_backup --src_path="/etc/fail2ban/filter.d/$app.conf" +ynh_mysql_dump_db --database="$db_name" > db.sql #================================================= # END OF SCRIPT diff --git a/scripts/change_url b/scripts/change_url index 7d26331..07725a9 100644 --- a/scripts/change_url +++ b/scripts/change_url @@ -30,7 +30,10 @@ app=$YNH_APP_INSTANCE_NAME #================================================= ynh_script_progression --message="Loading installation settings..." --weight=5 +# Needed for helper "ynh_add_nginx_config" final_path=$(ynh_app_setting_get --app=$app --key=final_path) + +# Add settings here as needed by your application mypads=$(ynh_app_setting_get --app=$app --key=mypads) port=$(ynh_app_setting_get --app=$app --key=port) @@ -42,7 +45,6 @@ ynh_script_progression --message="Backing up the app before changing its URL (ma # Backup the current version of the app ynh_backup_before_upgrade ynh_clean_setup () { - # Clean installation remainings that are not handled by the remove script. ynh_clean_check_starting # Remove the new domain config file, the remove script won't do it as it doesn't know yet its location. ynh_secure_remove --file="/etc/nginx/conf.d/$new_domain.d/$app.conf" @@ -92,11 +94,9 @@ if [ $change_path -eq 1 ] then # Make a backup of the original NGINX config file if modified ynh_backup_if_checksum_is_different --file="$nginx_conf_path" - # Set global variables for NGINX helper domain="$old_domain" path_url="$new_path" - # Create a dedicated NGINX config ynh_add_nginx_config fi @@ -107,25 +107,26 @@ then # Delete file checksum for the old conf file location ynh_delete_file_checksum --file="$nginx_conf_path" mv $nginx_conf_path /etc/nginx/conf.d/$new_domain.d/$app.conf - # Store file checksum for the new config file location ynh_store_file_checksum --file="/etc/nginx/conf.d/$new_domain.d/$app.conf" fi +#================================================= +# GENERIC FINALISATION +#================================================= +# START SYSTEMD SERVICE +#================================================= +ynh_script_progression --message="Starting a systemd service..." --weight=10 + +# Start a systemd service +ynh_systemd_action --service_name=$app --action=restart --line_match="You can access your Etherpad instance at" --log_path="/var/log/$app/etherpad.log" --timeout="120" + #================================================= # RELOAD NGINX #================================================= ynh_script_progression --message="Reloading NGINX web server..." -ynh_systemd_action --action=reload --service_name=nginx - -#================================================= -# CHECK ETHERPAD STARTING -#================================================= -ynh_script_progression --message="Restarting Etherpad..." --weight=10 - -# Wait for etherpad to be fully started -ynh_systemd_action --action=restart --line_match="You can access your Etherpad instance at" --log_path="/var/log/$app/etherpad.log" --timeout="120" +ynh_systemd_action --service_name=nginx --action=reload #================================================= # DEACTIVE MAINTENANCE MODE diff --git a/scripts/install b/scripts/install index 04529d0..9a09575 100644 --- a/scripts/install +++ b/scripts/install @@ -1,7 +1,7 @@ #!/bin/bash #================================================= -# GENERIC STARTING +# GENERIC START #================================================= # IMPORT GENERIC HELPERS #================================================= @@ -10,16 +10,14 @@ if [ ${PACKAGE_CHECK_EXEC:-0} -eq 1 ]; then sleep 60 fi -# Load common variables for all scripts. source _common.sh source /usr/share/yunohost/helpers #================================================= -# MANAGE FAILURE OF THE SCRIPT +# MANAGE SCRIPT FAILURE #================================================= ynh_clean_setup () { -# Clean installation remainings that are not handled by the remove script. ynh_clean_check_starting } # Exit if an error occurs during the execution of the script @@ -31,10 +29,10 @@ ynh_abort_if_errors domain=$YNH_APP_ARG_DOMAIN path_url=$YNH_APP_ARG_PATH +is_public=$YNH_APP_ARG_IS_PUBLIC +language=$YNH_APP_ARG_LANGUAGE admin=$YNH_APP_ARG_ADMIN password="$YNH_APP_ARG_PASSWORD" -language=$YNH_APP_ARG_LANGUAGE -is_public=$YNH_APP_ARG_IS_PUBLIC export=$YNH_APP_ARG_EXPORT mypads=$YNH_APP_ARG_MYPADS useldap=$YNH_APP_ARG_USELDAP @@ -64,9 +62,9 @@ ynh_script_progression --message="Storing installation settings..." --weight=3 ynh_app_setting_set --app=$app --key=domain --value=$domain ynh_app_setting_set --app=$app --key=path --value=$path_url +ynh_app_setting_set --app=$app --key=language --value=$language ynh_app_setting_set --app=$app --key=admin --value=$admin ynh_app_setting_set --app=$app --key=password --value="$password" -ynh_app_setting_set --app=$app --key=language --value=$language ynh_app_setting_set --app=$app --key=export --value=$export ynh_app_setting_set --app=$app --key=mypads --value=$mypads ynh_app_setting_set --app=$app --key=useldap --value=$useldap @@ -97,12 +95,16 @@ elif [ "$export" = "libreoffice" ]; then ynh_exec_warn_less ynh_install_app_dependencies $libreoffice_app_dependencies fi -#================================================= -# INSTALL NODEJS -#================================================= -ynh_script_progression --message="Installing NodeJS..." --weight=12 - ynh_install_nodejs --nodejs_version=$nodejs_version +ynh_use_nodejs + +#================================================= +# CREATE DEDICATED USER +#================================================= +ynh_script_progression --message="Configuring system user..." --weight=3 + +# Create a system user +ynh_system_user_create --username=$app --home_dir="$final_path" #================================================= # CREATE A MYSQL DATABASE @@ -112,15 +114,8 @@ ynh_script_progression --message="Creating a MySQL database..." db_name=$(ynh_sanitize_dbid --db_name=$app) db_user=$db_name ynh_app_setting_set --app=$app --key=db_name --value=$db_name -ynh_mysql_setup_db --db_user=$db_name --db_name=$db_name - -#================================================= -# CREATE DEDICATED USER -#================================================= -ynh_script_progression --message="Configuring system user..." --weight=3 - -# Create a dedicated system user -ynh_system_user_create --username=$app --home_dir=$final_path +ynh_mysql_setup_db --db_user=$db_user --db_name=$db_name +echo "ALTER DATABASE $db_name CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci" | ynh_mysql_connect_as --user=$db_user --password=$db_pwd --database=$db_name #================================================= # DOWNLOAD, CHECK AND UNPACK SOURCE @@ -131,6 +126,10 @@ ynh_app_setting_set --app=$app --key=final_path --value=$final_path # Download, check integrity, uncompress and patch the source from app.src ynh_setup_source --dest_dir="$final_path" +chmod 750 "$final_path" +chmod -R o-rwx "$final_path" +chown -R $app:$app "$final_path" + #================================================= # NGINX CONFIGURATION #================================================= @@ -149,28 +148,12 @@ ynh_script_progression --message="Configuring log rotation..." # Create log directory mkdir -p /var/log/$app touch /var/log/$app/etherpad.log -install_log=/var/log/$app/installation.log -touch $install_log chown $app -R /var/log/$app -# Setup logrotate -ynh_use_logrotate --specific_user=$app/$app - #================================================= -# INSTALL ETHERPAD +# ADD A CONFIGURATION #================================================= -ynh_script_progression --message="Installing Etherpad..." --weight=90 - -chown -R $app: $final_path -pushd $final_path - ynh_use_nodejs - ynh_exec_as $app env "$ynh_node_load_PATH" bin/installDeps.sh -popd - -#================================================= -# CONFIGURE ETHERPAD -#================================================= -ynh_script_progression --message="Configuring Etherpad..." --weight=6 +ynh_script_progression --message="Adding a configuration file..." --weight=6 cp ../conf/settings.json "$final_path/settings.json" @@ -200,17 +183,12 @@ fi ynh_store_file_checksum --file="$final_path/settings.json" ynh_add_config --template="../conf/credentials.json" --destination="$final_path/credentials.json" -# Restrict access to credentials.json -chmod 600 $final_path/credentials.json -#================================================= -# SECURING FILES AND DIRECTORIES -#================================================= +chmod 600 "$final_path/settings.json" +chown $app:$app "$final_path/settings.json" -# Set files ownership to etherpad -chmod 750 "$final_path" -chmod o-rwx "$final_path" -chown -R $app: "$final_path" +chmod 600 "$final_path/credentials.json" +chown $app:$app "$final_path/credentials.json" #================================================= # SETUP SYSTEMD @@ -221,51 +199,49 @@ ynh_script_progression --message="Configuring a systemd service..." --weight=4 ynh_add_systemd_config #================================================= -# ADVERTISE SERVICE IN ADMIN PANEL -#================================================= - -yunohost service add $app --description="Collaborative editor" --log="/var/log/$app/etherpad.log" - -#================================================= -# INSTALL FRAMAPAD'S PLUGINS +# INSTALL ETHERPAD'S PLUGINS #================================================= ynh_script_progression --message="Installing Etherpad plugins..." --weight=90 pushd "$final_path" # Add Left/Center/Right/Justify to lines of text in a pad - ynh_npm install ep_align@${ep_align_version} >> $install_log 2>&1 + ynh_exec_warn_less ynh_exec_as $app env $ynh_node_load_PATH $ynh_npm install --no-save ep_align@${ep_align_version} # Framapad - Adds author names to span titles - ynh_npm install ep_author_hover@${ep_author_hover_version} >> $install_log 2>&1 + ynh_exec_warn_less ynh_exec_as $app env $ynh_node_load_PATH $ynh_npm install --no-save ep_author_hover@${ep_author_hover_version} # Framapad - Adds comments on sidebar and link it to the text. - ynh_npm install ep_comments_page@${ep_comments_page_version} >> $install_log 2>&1 + ynh_exec_warn_less ynh_exec_as $app env $ynh_node_load_PATH $ynh_npm install --no-save ep_comments_page@${ep_comments_page_version} # Framapad - Displays paragraphs, sentences, words and characters counts. - ynh_npm install ep_countable@${ep_countable_version} >> $install_log 2>&1 + ynh_exec_warn_less ynh_exec_as $app env $ynh_node_load_PATH $ynh_npm install --no-save ep_countable@${ep_countable_version} # Framapad - Delete pads which were never edited - ynh_npm install ep_delete_empty_pads@${ep_delete_empty_pads_version} >> $install_log 2>&1 + ynh_exec_warn_less ynh_exec_as $app env $ynh_node_load_PATH $ynh_npm install --no-save ep_delete_empty_pads@${ep_delete_empty_pads_version} # Framapad - Apply colors to fonts - ynh_npm install ep_font_color@${ep_font_color_version} >> $install_log 2>&1 + ynh_exec_warn_less ynh_exec_as $app env $ynh_node_load_PATH $ynh_npm install --no-save ep_font_color@${ep_font_color_version} # Framapad - Adds heading support to Etherpad Lite. - ynh_npm install ep_headings2@${ep_headings2_version} >> $install_log 2>&1 + ynh_exec_warn_less ynh_exec_as $app env $ynh_node_load_PATH $ynh_npm install --no-save ep_headings2@${ep_headings2_version} # Framapad - Edit and Export as Markdown in Etherpad - ynh_npm install ep_markdown@${ep_markdown_version} >> $install_log 2>&1 + ynh_exec_warn_less ynh_exec_as $app env $ynh_node_load_PATH $ynh_npm install --no-save ep_markdown@${ep_markdown_version} if [ $mypads -eq 1 ]; then # Framapad - Groups and private pads for Etherpad - ynh_npm install ep_mypads@${mypads_version} >> $install_log 2>&1 + ynh_exec_warn_less ynh_exec_as $app env $ynh_node_load_PATH $ynh_npm install --no-save ep_mypads@${mypads_version} fi # Framapad - Add support to do 'Spell checking' - ynh_npm install ep_spellcheck@${ep_spellcheck_version} >> $install_log 2>&1 + ynh_exec_warn_less ynh_exec_as $app env $ynh_node_load_PATH $ynh_npm install --no-save ep_spellcheck@${ep_spellcheck_version} # Framapad - Add support for Subscript and Superscript - ynh_npm install ep_subscript_and_superscript@${ep_subscript_and_superscript_version} >> $install_log 2>&1 + ynh_exec_warn_less ynh_exec_as $app env $ynh_node_load_PATH $ynh_npm install --no-save ep_subscript_and_superscript@${ep_subscript_and_superscript_version} # Framapad - View a table of contents for your pad - ynh_npm install ep_table_of_contents@${ep_table_of_contents_version} >> $install_log 2>&1 + ynh_exec_warn_less ynh_exec_as $app env $ynh_node_load_PATH $ynh_npm install --no-save ep_table_of_contents@${ep_table_of_contents_version} # Framapad - User Pad Contents font size can be set in settings, this does not effect other peoples views - ynh_npm install ep_font_size@${ep_font_size_version} >> $install_log 2>&1 + ynh_exec_warn_less ynh_exec_as $app env $ynh_node_load_PATH $ynh_npm install --no-save ep_font_size@${ep_font_size_version} popd -chown -R $app: $final_path/node_modules +#================================================= +# INSTALL ETHERPAD +#================================================= +ynh_script_progression --message="Installing Etherpad..." --weight=90 -# Remove package-lock.json otherwise plugins installation and upgrade fails miserablywith 502 error -ynh_secure_remove --file="$final_path/package-lock.json" +pushd $final_path + ynh_exec_warn_less ynh_exec_as $app env $ynh_node_load_PATH bin/installDeps.sh +popd #================================================= # SOME HACKS @@ -273,6 +249,8 @@ ynh_secure_remove --file="$final_path/package-lock.json" if [ $mypads -eq 1 ] then + ynh_script_progression --message="Some hacks..." + # Add a link to Etherpad to allow anonymous pads creation from MyPads. ynh_replace_string --match_string="^ *\"DESCRIPTION\": .*" --replace_string="&Pads anonymes" --target_file=$final_path/node_modules/ep_mypads/static/l10n/fr.json ynh_replace_string --match_string="^ *\"DESCRIPTION\": .*" --replace_string="&Anonymous pads" --target_file=$final_path/node_modules/ep_mypads/static/l10n/en.json @@ -284,6 +262,40 @@ then sed -i '157i

MyPads
' $final_path/src/templates/index.html fi +#================================================= +# GENERIC FINALIZATION +#================================================= +# SETUP LOGROTATE +#================================================= +ynh_script_progression --message="Configuring log rotation..." + +# Use logrotate to manage application logfile(s) +ynh_use_logrotate + +#================================================= +# INTEGRATE SERVICE IN YUNOHOST +#================================================= +ynh_script_progression --message="Integrating service in YunoHost..." + +yunohost service add $app --description="Collaborative editor" --log="/var/log/$app/etherpad.log" + +#================================================= +# START SYSTEMD SERVICE +#================================================= +ynh_script_progression --message="Starting a systemd service..." --weight=20 + +# Start a systemd service +ynh_systemd_action --service_name=$app --action=restart --line_match="You can access your Etherpad instance at" --log_path="/var/log/$app/etherpad.log" --timeout="120" + +if [ $mypads -eq 1 ] +then + ynh_replace_string --match_string="__LANGUAGE__" --replace_string="$language" --target_file="../conf/lang_mypads.sql" + ynh_mysql_connect_as --user=$db_user --password=$db_pwd --database=$db_name < "../conf/lang_mypads.sql" + + # Wait for etherpad to be fully started + ynh_systemd_action --action=restart --line_match="You can access your Etherpad instance at" --log_path="/var/log/$app/etherpad.log" --timeout="120" +fi + #================================================= # SETUP FAIL2BAN #================================================= @@ -297,7 +309,11 @@ ynh_add_fail2ban_config --logpath="/var/log/nginx/$domain-access.log" --failrege #================================================= ynh_script_progression --message="Configuring permissions..." --weight=2 -if [ $is_public -eq 1 ]; then +# Make app public if necessary +if [ $is_public -eq 1 ] +then + # Everyone can access the app. + # The "main" permission is automatically created before the install script. ynh_permission_update --permission="main" --add="visitors" fi @@ -309,24 +325,7 @@ ynh_permission_create --permission="admin" --url="/admin" --allowed=$admin --aut #================================================= ynh_script_progression --message="Reloading NGINX web server..." -ynh_systemd_action --action=reload --service_name=nginx - -#================================================= -# CHECK ETHERPAD STARTING -#================================================= -ynh_script_progression --message="Restarting Etherpad..." --weight=20 - -# Wait for etherpad to be fully started -ynh_systemd_action --action=restart --line_match="You can access your Etherpad instance at" --log_path="/var/log/$app/etherpad.log" --timeout="120" - -if [ $mypads -eq 1 ] -then - ynh_replace_string --match_string="__LANGUAGE__" --replace_string="$language" --target_file="../conf/lang_mypads.sql" - mysql -u $db_name -p$db_pwd $db_name < "../conf/lang_mypads.sql" - - # Wait for etherpad to be fully started - ynh_systemd_action --action=restart --line_match="You can access your Etherpad instance at" --log_path="/var/log/$app/etherpad.log" --timeout="120" -fi +ynh_systemd_action --service_name=nginx --action=reload #================================================= # SEND A README FOR THE ADMIN diff --git a/scripts/remove b/scripts/remove index f61b51c..a95f897 100755 --- a/scripts/remove +++ b/scripts/remove @@ -17,9 +17,10 @@ ynh_script_progression --message="Loading installation settings..." --weight=3 app=$YNH_APP_INSTANCE_NAME domain=$(ynh_app_setting_get --app=$app --key=domain) -final_path=$(ynh_app_setting_get --app=$app --key=final_path) port=$(ynh_app_setting_get --app=$app --key=port) db_name=$(ynh_app_setting_get --app=$app --key=db_name) +db_user=$db_name +final_path=$(ynh_app_setting_get --app=$app --key=final_path) export=$(ynh_app_setting_get --app=$app --key=export) #================================================= @@ -28,7 +29,7 @@ export=$(ynh_app_setting_get --app=$app --key=export) # REMOVE SERVICE INTEGRATION IN YUNOHOST #================================================= -# Remove the service from the list of services known, YunoHost (added from `yunohost service add`) +# Remove the service from the list of services known by YunoHost (added from `yunohost service add`) if ynh_exec_warn_less yunohost service status $app >/dev/null then ynh_script_progression --message="Removing $app service integration..." --weight=2 @@ -44,22 +45,12 @@ ynh_script_progression --message="Stopping and removing the systemd service..." ynh_remove_systemd_config #================================================= -# REMOVE DEPENDENCIES +# REMOVE LOGROTATE CONFIGURATION #================================================= +ynh_script_progression --message="Removing logrotate configuration..." -if [ "$export" != "none" ] -then - ynh_script_progression --message="Removing dependencies..." --weight=60 - # Remove metapackage and its dependencies - ynh_exec_warn_less ynh_remove_app_dependencies -fi - -#================================================= -# REMOVE NODEJS -#================================================= -ynh_script_progression --message="Removing NodeJS version for Etherpad..." --weight=3 - -ynh_remove_nodejs +# Remove the app-specific logrotate config +ynh_remove_logrotate #================================================= # REMOVE THE MYSQL DATABASE @@ -67,12 +58,12 @@ ynh_remove_nodejs ynh_script_progression --message="Removing the MySQL database..." --weight=2 # Remove a database if it exists, along with the associated user -ynh_mysql_remove_db --db_user=$db_name --db_name=$db_name +ynh_mysql_remove_db --db_user=$db_user --db_name=$db_name #================================================= # REMOVE APP MAIN DIR #================================================= -ynh_script_progression --message="Removing the app main directory..." +ynh_script_progression --message="Removing app main directory..." # Remove the app directory securely ynh_secure_remove --file="$final_path" @@ -86,14 +77,17 @@ ynh_script_progression --message="Removing NGINX web server configuration..." -- ynh_remove_nginx_config #================================================= -# REMOVE LOGROTATE CONFIGURATION +# REMOVE DEPENDENCIES #================================================= -ynh_script_progression --message="Removing logrotate configuration..." +ynh_script_progression --message="Removing dependencies..." -ynh_secure_remove --file="/var/log/$app" +if [ "$export" != "none" ] +then + # Remove metapackage and its dependencies + ynh_exec_warn_less ynh_remove_app_dependencies +fi -# Remove the app-specific logrotate config -ynh_remove_logrotate +ynh_remove_nodejs #================================================= # REMOVE FAIL2BAN CONFIGURATION @@ -103,6 +97,16 @@ ynh_script_progression --message="Removing Fail2Ban configuration..." --weight=7 # Remove the dedicated Fail2Ban config ynh_remove_fail2ban_config +#================================================= +# SPECIFIC REMOVE +#================================================= +# REMOVE VARIOUS FILES +#================================================= +ynh_script_progression --message="Removing various files..." + +# Remove the log files +ynh_secure_remove --file="/var/log/$app" + #================================================= # GENERIC FINALIZATION #================================================= diff --git a/scripts/restore b/scripts/restore index b7d4752..6a72769 100644 --- a/scripts/restore +++ b/scripts/restore @@ -15,7 +15,6 @@ source /usr/share/yunohost/helpers #================================================= ynh_clean_setup () { - # Clean installation remainings that are not handled by the remove script. ynh_clean_check_starting } # Exit if an error occurs during the execution of the script @@ -24,7 +23,7 @@ ynh_abort_if_errors #================================================= # LOAD SETTINGS #================================================= -ynh_script_progression --message="Loading settings.." --weight=3 +ynh_script_progression --message="Loading installation settings..." --weight=3 app=$YNH_APP_INSTANCE_NAME @@ -32,6 +31,7 @@ domain=$(ynh_app_setting_get --app=$app --key=domain) path_url=$(ynh_app_setting_get --app=$app --key=path) final_path=$(ynh_app_setting_get --app=$app --key=final_path) db_name=$(ynh_app_setting_get --app=$app --key=db_name) +db_user=$db_name export=$(ynh_app_setting_get --app=$app --key=export) mypads=$(ynh_app_setting_get --app=$app --key=mypads) admin=$(ynh_app_setting_get --app=$app --key=admin) @@ -45,20 +45,15 @@ ynh_script_progression --message="Validating restoration parameters..." test ! -d $final_path \ || ynh_die --message="There is already a directory: $final_path " -#================================================= -# ACTIVATE MAINTENANCE MODE -#================================================= -ynh_script_progression --message="Activating maintenance mode..." --weight=2 - -ynh_maintenance_mode_ON - #================================================= # STANDARD RESTORATION STEPS #================================================= -# RESTORE THE NGINX CONFIGURATION +# RECREATE THE DEDICATED USER #================================================= +ynh_script_progression --message="Recreating the dedicated system user..." --weight=2 -ynh_restore_file --origin_path="/etc/nginx/conf.d/$domain.d/$app.conf" +# Create the dedicated user (if not existing) +ynh_system_user_create --username=$app --home_dir="$final_path" #================================================= # RESTORE THE APP MAIN DIR @@ -67,41 +62,29 @@ ynh_script_progression --message="Restoring the app main directory..." --weight= ynh_restore_file --origin_path="$final_path" -#================================================= -# RESTORE THE MYSQL DATABASE -#================================================= -ynh_script_progression --message="Restoring the MySQL database..." --weight=2 +chmod 750 "$final_path" +chmod -R o-rwx "$final_path" +chown -R $app:$app "$final_path" -db_pwd=$(ynh_app_setting_get --app=$app --key=mysqlpwd) -ynh_mysql_setup_db --db_user=$db_name --db_name=$db_name --db_pwd=$db_pwd -ynh_mysql_connect_as --user=$db_name --password=$db_pwd --database=$db_name < ./db.sql +chmod 600 "$final_path/settings.json" +chown $app:$app "$final_path/settings.json" + +chmod 600 "$final_path/credentials.json" +chown $app:$app "$final_path/credentials.json" #================================================= -# RECREATE THE DEDICATED USER +# RESTORE FAIL2BAN CONFIGURATION #================================================= -ynh_script_progression --message="Recreating the dedicated system user..." --weight=2 +ynh_script_progression --message="Restoring the Fail2Ban configuration..." --weight=6 -# Create the dedicated user (if not existing) -ynh_system_user_create --username=$app --home_dir=$final_path +ynh_restore_file --origin_path="/etc/fail2ban/jail.d/$app.conf" +ynh_restore_file --origin_path="/etc/fail2ban/filter.d/$app.conf" +ynh_systemd_action --action=restart --service_name=fail2ban #================================================= -# SPECIFIC RESTORE +# SPECIFIC RESTORATION #================================================= -# HANDLE LOG FILES AND LOGROTATE -#================================================= - -mkdir -p /var/log/$app -touch /var/log/$app/etherpad.log -install_log=/var/log/$app/installation.log -touch $install_log -chown $app -R /var/log/$app -chown admin -R $install_log - -# Restore logrotate configuration -ynh_restore_file --origin_path="/etc/logrotate.d/$app" - -#================================================= -# INSTALL DEPENDENCIES +# REINSTALL DEPENDENCIES #================================================= ynh_script_progression --message="Reinstalling dependencies..." --weight=60 @@ -110,36 +93,33 @@ if [ "$export" = "abiword" ]; then elif [ "$export" = "libreoffice" ]; then ynh_exec_warn_less ynh_install_app_dependencies $libreoffice_app_dependencies fi - -#================================================= -# INSTALL NODEJS -#================================================= -ynh_script_progression --message="Reinstalling NodeJS..." --weight=7 - ynh_install_nodejs --nodejs_version=$nodejs_version - -#================================================= -# INSTALL ETHERPAD DEPENDENCIES -#================================================= -ynh_script_progression --message="Reinstalling Etherpad node dependencies..." --weight=17 - ynh_use_nodejs -ynh_exec_warn_less npm cache clean --force #================================================= -# RESTORE USER RIGHTS +# RESTORE THE NGINX CONFIGURATION #================================================= +ynh_script_progression --message="Restoring the NGINX web server configuration..." -# Restore permissions on app files -chmod 750 "$final_path" -chmod o-rwx "$final_path" -chown -R $app: "$final_path" +ynh_restore_file --origin_path="/etc/nginx/conf.d/$domain.d/$app.conf" #================================================= -# ADVERTISE SERVICE IN ADMIN PANEL +# RESTORE THE MYSQL DATABASE +#================================================= +ynh_script_progression --message="Restoring the MySQL database..." --weight=2 + +db_pwd=$(ynh_app_setting_get --app=$app --key=mysqlpwd) +ynh_mysql_setup_db --db_user=$db_user --db_name=$db_name --db_pwd=$db_pwd +echo "ALTER DATABASE $db_name CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci" | ynh_mysql_connect_as --user=$db_user --password=$db_pwd --database=$db_name +ynh_mysql_connect_as --user=$db_user --password=$db_pwd --database=$db_name < ./db.sql + +#================================================= +# HANDLE LOG FILES AND LOGROTATE #================================================= -yunohost service add $app --description="Collaborative editor" --log="/var/log/$app/etherpad.log" +mkdir -p /var/log/$app +touch /var/log/$app/etherpad.log +chown $app -R /var/log/$app #================================================= # RESTORE SYSTEMD @@ -150,14 +130,28 @@ ynh_restore_file --origin_path="/etc/systemd/system/$app.service" systemctl enable $app.service --quiet #================================================= -# RESTORE FAIL2BAN CONFIGURATION +# RESTORE THE LOGROTATE CONFIGURATION #================================================= -ynh_script_progression --message="Restoring the Fail2Ban configuration..." --weight=6 +ynh_script_progression --message="Restoring the logrotate configuration..." -ynh_restore_file "/etc/fail2ban/jail.d/$app.conf" -ynh_restore_file "/etc/fail2ban/filter.d/$app.conf" -ynh_systemd_action --action=restart --service_name=fail2ban +ynh_restore_file --origin_path="/etc/logrotate.d/$app" +#================================================= +# INTEGRATE SERVICE IN YUNOHOST +#================================================= +ynh_script_progression --message="Integrating service in YunoHost..." + +yunohost service add $app --description="Collaborative editor" --log="/var/log/$app/etherpad.log" + +#================================================= +# START SYSTEMD SERVICE +#================================================= +ynh_script_progression --message="Starting a systemd service..." --weight=8 + +ynh_systemd_action --service_name=$app --action=restart --line_match="You can access your Etherpad instance at" --log_path="/var/log/$app/etherpad.log" --timeout="120" + +#================================================= +# GENERIC FINALIZATION #================================================= # RELOAD NGINX #================================================= @@ -165,21 +159,6 @@ ynh_script_progression --message="Reloading NGINX web server..." ynh_systemd_action --action=reload --service_name=nginx -#================================================= -# CHECK ETHERPAD STARTING -#================================================= -ynh_script_progression --message="Restarting Etherpad..." --weight=8 - -# Wait for etherpad to be fully started -ynh_systemd_action --action=restart --line_match="You can access your Etherpad instance at" --log_path="/var/log/$app/etherpad.log" --timeout="120" - -#================================================= -# DEACTIVE MAINTENANCE MODE -#================================================= -ynh_script_progression --message="Disabling maintenance mode..." --weight=7 - -ynh_maintenance_mode_OFF - #================================================= # SEND A README FOR THE ADMIN #================================================= diff --git a/scripts/upgrade b/scripts/upgrade index 8abbd9a..c083ee5 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -1,12 +1,11 @@ #!/bin/bash #================================================= -# GENERIC STARTING +# GENERIC START #================================================= # IMPORT GENERIC HELPERS #================================================= -# Load common variables for all scripts. source _common.sh source /usr/share/yunohost/helpers @@ -19,8 +18,8 @@ app=$YNH_APP_INSTANCE_NAME domain=$(ynh_app_setting_get --app=$app --key=domain) path_url=$(ynh_app_setting_get --app=$app --key=path) -admin=$(ynh_app_setting_get --app=$app --key=admin) language=$(ynh_app_setting_get --app=$app --key=language) +admin=$(ynh_app_setting_get --app=$app --key=admin) final_path=$(ynh_app_setting_get --app=$app --key=final_path) port=$(ynh_app_setting_get --app=$app --key=port) export=$(ynh_app_setting_get --app=$app --key=export) @@ -30,6 +29,7 @@ db_pwd=$(ynh_app_setting_get --app=$app --key=mysqlpwd) password=$(ynh_app_setting_get --app=$app --key=password) mypads=$(ynh_app_setting_get --app=$app --key=mypads) useldap=$(ynh_app_setting_get --app=$app --key=useldap) +abiword=$(ynh_app_setting_get --app=$app --key=abiword) overwrite_settings=$(ynh_app_setting_get --app=$app --key=overwrite_settings) overwrite_credentials=$(ynh_app_setting_get --app=$app --key=overwrite_credentials) overwrite_nginx=$(ynh_app_setting_get --app=$app --key=overwrite_nginx) @@ -45,12 +45,44 @@ pad_config_show_markdown=$(ynh_app_setting_get --app=$app --key=pad_config_show_ #================================================= # CHECK VERSION #================================================= +ynh_script_progression --message="Checking version..." # Wait for etherpad to be fully started ynh_systemd_action --action=restart --line_match="You can access your Etherpad instance at" --log_path="/var/log/$app/etherpad.log" --timeout="120" upgrade_type=$(ynh_check_app_version_changed) +#================================================= +# BACKUP BEFORE UPGRADE THEN ACTIVE TRAP +#================================================= +ynh_script_progression --message="Backing up the app before upgrading (may take a while)..." --weight=35 + +# Backup the current version of the app +ynh_backup_before_upgrade +ynh_clean_setup () { + ynh_clean_check_starting + # Restore it if the upgrade fails + ynh_restore_upgradebackup +} +# Exit if an error occurs during the execution of the script +ynh_abort_if_errors + +#================================================= +# ACTIVATE MAINTENANCE MODE +#================================================= +ynh_script_progression --message="Activating maintenance mode..." --weight=2 + +ynh_maintenance_mode_ON + +#================================================= +# STANDARD UPGRADE STEPS +#================================================= +# STOP SYSTEMD SERVICE +#================================================= +ynh_script_progression --message="Stopping a systemd service..." --weight=3 + +ynh_systemd_action --service_name=$app --action="stop" + #================================================= # ENSURE DOWNWARD COMPATIBILITY #================================================= @@ -127,61 +159,28 @@ fi # Cleaning legacy permissions if ynh_legacy_permissions_exists; then - ynh_legacy_permissions_delete_all + ynh_legacy_permissions_delete_all - ynh_app_setting_delete --app=$app --key=is_public + ynh_app_setting_delete --app=$app --key=is_public fi if ! ynh_permission_exists --permission="admin"; then - # Create the required permissions - ynh_permission_create --permission="admin" --url="/admin" --allowed=$admin + # Create the required permissions + ynh_permission_create --permission="admin" --url="/admin" --allowed=$admin else - # Make sure the admin panel is not exposed to the SSO's authentication headers - # AFAIK there is no helper to check if that flag is up or not, so let's force it. - ynh_permission_url --permission="admin" --auth_header=false + # Make sure the admin panel is not exposed to the SSO's authentication headers + # AFAIK there is no helper to check if that flag is up or not, so let's force it. + ynh_permission_url --permission="admin" --auth_header=false fi -#================================================= -# BACKUP BEFORE UPGRADE THEN ACTIVE TRAP -#================================================= -ynh_script_progression --message="Backing up the app before upgrading (may take a while)..." --weight=35 - -# Backup the current version of the app -ynh_backup_before_upgrade -ynh_clean_setup () { -# Clean installation remainings that are not handled by the remove script. - ynh_clean_check_starting - - # Restore it if the upgrade fails - ynh_restore_upgradebackup -} -# Exit if an error occurs during the execution of the script -ynh_abort_if_errors - -#================================================= -# ACTIVATE MAINTENANCE MODE -#================================================= -ynh_script_progression --message="Activating maintenance mode..." --weight=2 - -ynh_maintenance_mode_ON - -#================================================= -# STOP ETHERPAD -#================================================= -ynh_script_progression --message="Stopping Etherpad service..." --weight=3 - -ynh_systemd_action --action=stop - #================================================= # CREATE DEDICATED USER #================================================= ynh_script_progression --message="Making sure dedicated system user exists..." # Create a dedicated user (if not existing) -ynh_system_user_create --username=$app --home_dir=$final_path +ynh_system_user_create --username=$app --home_dir="$final_path" -#================================================= -# STANDARD UPGRADE STEPS #================================================= # DOWNLOAD, CHECK AND UNPACK SOURCE #================================================= @@ -190,24 +189,14 @@ if [ "$upgrade_type" == "UPGRADE_APP" ] then ynh_script_progression --message="Upgrading source files..." --weight=4 - # # Create a temporary directory - # tmpdir="$(mktemp -d)" - # # Backup the config file in the temp dir - # cp -a "$final_path/settings.json" "$tmpdir/settings.json" - - ynh_secure_remove --file="$final_path" - # Download, check integrity, uncompress and patch the source from app.src - ynh_setup_source --dest_dir="$final_path" - - # # Copy the admin saved settings from tmp directory to final config path - # cp -a "$tmpdir/settings.json" "$final_path/settings.json" - - # # Remove the tmp directory securely - # ynh_secure_remove --file="$tmpdir" - + ynh_setup_source --dest_dir="$final_path" --keep="settings.json credentials.json" fi +chmod 750 "$final_path" +chmod -R o-rwx "$final_path" +chown -R $app:$app "$final_path" + #================================================= # UPGRADE DEPENDENCIES #================================================= @@ -219,6 +208,9 @@ elif [ "$export" = "libreoffice" ]; then ynh_exec_warn_less ynh_install_app_dependencies $libreoffice_app_dependencies fi +ynh_install_nodejs --nodejs_version=$nodejs_version +ynh_use_nodejs + #================================================= # NGINX CONFIGURATION #================================================= @@ -231,99 +223,15 @@ then fi #================================================= -# UPGRADE NODEJS -#================================================= -ynh_script_progression --message="Upgrading NodeJS..." --weight=4 - -ynh_install_nodejs --nodejs_version=$nodejs_version - +# SPECIFIC UPGRADE #================================================= # HANDLE LOG FILES AND LOGROTATE #================================================= ynh_script_progression --message="Configuring log rotation..." --weight=1 # Create log directory -install_log=/var/log/$app/installation.log -touch $install_log chown $app -R /var/log/$app -#================================================= -# UPGRADE NPM MODULES -#================================================= -ynh_script_progression --message="Upgrading Etherpad..." --weight=60 - -# Then update the additionnal modules -chown -R $app: $final_path - -pushd $final_path - ynh_use_nodejs - ynh_exec_as $app env "$ynh_node_load_PATH" src/bin/installDeps.sh -# ynh_exec_warn_less npm cache clean --force -# ynh_exec_warn_less ynh_exec_as $app env "$ynh_node_load_PATH" npm cache clean --force -# while read node_module -# do -# # Ignore ep_etherpad-lite, this part is updated before in this script. -# if [ "$node_module" = "ep_etherpad-lite" ]; then -# continue -# fi -# echo "Update $node_module" -# # Build the name of the variable with the version. -# module_version=${node_module}_version -# # Get the content of the variable (from the file _variables) -# module_version=${!module_version:-} -# # If the module has no version stored in a variable into the file, keep it empty. -# # That way, the upgrade will not be specific to a version. -# ## Otherwise, add @ before the version number to force the upgrade to this version. -# if [ -n "${module_version}" ]; then -# module_version=@${module_version} -# fi -# ynh_exec_warn_less ynh_exec_as $app env "$ynh_node_load_PATH" npm install --upgrade ${node_module}${module_version} || true -# done <<< "$(ls -1 "$final_path/node_modules" | grep "^ep_")" -popd - -#================================================= -# INSTALL FRAMAPAD'S PLUGINS -#================================================= -ynh_script_progression --message="Installing Etherpad plugins..." --weight=90 - -pushd "$final_path" - # Add Left/Center/Right/Justify to lines of text in a pad - ynh_npm install ep_align@${ep_align_version} >> $install_log 2>&1 - # Framapad - Adds author names to span titles - ynh_npm install ep_author_hover@${ep_author_hover_version} >> $install_log 2>&1 - # Framapad - Adds comments on sidebar and link it to the text. - ynh_npm install ep_comments_page@${ep_comments_page_version} >> $install_log 2>&1 - # Framapad - Displays paragraphs, sentences, words and characters counts. - ynh_npm install ep_countable@${ep_countable_version} >> $install_log 2>&1 - # Framapad - Delete pads which were never edited - ynh_npm install ep_delete_empty_pads@${ep_delete_empty_pads_version} >> $install_log 2>&1 - # Framapad - Apply colors to fonts - ynh_npm install ep_font_color@${ep_font_color_version} >> $install_log 2>&1 - # Framapad - Adds heading support to Etherpad Lite. - ynh_npm install ep_headings2@${ep_headings2_version} >> $install_log 2>&1 - # Framapad - Edit and Export as Markdown in Etherpad - ynh_npm install ep_markdown@${ep_markdown_version} >> $install_log 2>&1 - if [ $mypads -eq 1 ]; then - # Framapad - Groups and private pads for etherpad - ynh_npm install ep_mypads@${mypads_version} >> $install_log 2>&1 - fi - # Framapad - Add support to do 'Spell checking' - ynh_npm install ep_spellcheck@${ep_spellcheck_version} >> $install_log 2>&1 - # Framapad - Add support for Subscript and Superscript - ynh_npm install ep_subscript_and_superscript@${ep_subscript_and_superscript_version} >> $install_log 2>&1 - # Framapad - View a table of contents for your pad - ynh_npm install ep_table_of_contents@${ep_table_of_contents_version} >> $install_log 2>&1 - # Framapad - User Pad Contents font size can be set in settings, this does not effect other peoples views - ynh_npm install ep_font_size@${ep_font_size_version} >> $install_log 2>&1 -popd - -chown -R $app: $final_path/node_modules - -# Remove package-lock.json otherwise plugins installation and upgrade fails miserablywith 502 error -ynh_secure_remove --file="$final_path/package-lock.json" - -#================================================= -# SPECIFIC UPGRADE #================================================= # CONFIGURE ETHERPAD #================================================= @@ -332,87 +240,165 @@ if [ "$upgrade_type" == "UPGRADE_APP" ] then ynh_script_progression --message="Reconfiguring Etherpad..." --weight=3 - # Overwrite the settings config file only if it's allowed - if [ $overwrite_settings -eq 1 ] - then - # Verify the checksum of a file, stored by `ynh_store_file_checksum` in the install script. - ynh_backup_if_checksum_is_different --file="$final_path/settings.json" - cp ../conf/settings.json "$final_path/settings.json" - ynh_replace_string --match_string="__PORT__" --replace_string="$port" --target_file="$final_path/settings.json" + # Overwrite the settings config file only if it's allowed + if [ $overwrite_settings -eq 1 ] + then + # Verify the checksum of a file, stored by `ynh_store_file_checksum` in the install script. + ynh_backup_if_checksum_is_different --file="$final_path/settings.json" + cp ../conf/settings.json "$final_path/settings.json" + ynh_replace_string --match_string="__PORT__" --replace_string="$port" --target_file="$final_path/settings.json" - if [ "$export" = "abiword" ] - then - # Get abiword binary path - abiword_path=`which abiword` - # Set the path of Abiword into Etherpad config - ynh_replace_string --match_string="\"abiword\" : null" --replace_string="\"abiword\" : \"$abiword_path\"" --target_file="$final_path/settings.json" - elif [ "$export" = "libreoffice" ] - then - # Get soffice binary path - soffice_path=`which soffice` - # Set the path of soffice into Etherpad config - ynh_replace_string --match_string="\"soffice\" : null" --replace_string="\"soffice\" : \"$soffice_path\"" --target_file="$final_path/settings.json" - fi + if [ "$export" = "abiword" ] + then + # Get abiword binary path + abiword_path=`which abiword` + # Set the path of Abiword into Etherpad config + ynh_replace_string --match_string="\"abiword\" : null" --replace_string="\"abiword\" : \"$abiword_path\"" --target_file="$final_path/settings.json" + elif [ "$export" = "libreoffice" ] + then + # Get soffice binary path + soffice_path=`which soffice` + # Set the path of soffice into Etherpad config + ynh_replace_string --match_string="\"soffice\" : null" --replace_string="\"soffice\" : \"$soffice_path\"" --target_file="$final_path/settings.json" + fi - if test -z "$language"; then - # If upgrading from a version which doesn't support translations, set language to English by default - language=en - ynh_app_setting_set --app=$app --key=language --value=$language - fi - ynh_replace_string --match_string="__LANGUAGE__" --replace_string="$language" --target_file="$final_path/settings.json" + if test -z "$language"; then + # If upgrading from a version which doesn't support translations, set language to English by default + language=en + ynh_app_setting_set --app=$app --key=language --value=$language + fi + ynh_replace_string --match_string="__LANGUAGE__" --replace_string="$language" --target_file="$final_path/settings.json" - # Use LDAP for MyPads - if [ $mypads -eq 1 ] && [ $useldap -eq 1 ] - then - ynh_replace_string --match_string="//noldap" --replace_string="" --target_file="$final_path/settings.json" - fi + # Use LDAP for MyPads + if [ $mypads -eq 1 ] && [ $useldap -eq 1 ] + then + ynh_replace_string --match_string="//noldap" --replace_string="" --target_file="$final_path/settings.json" + fi - # Optional parameters from config-panel feature - if [ -n "$pad_config_nocolors" ]; then - ynh_replace_string --match_string="\(\"noColors\" *: \).*," --replace_string="\1$pad_config_nocolors," --target_file="$final_path/settings.json" - fi - if [ -n "$pad_config_showlinenumbers" ]; then - ynh_replace_string --match_string="\(\"showLineNumbers\" *: \).*," --replace_string="\1$pad_config_showlinenumbers," --target_file="$final_path/settings.json" - fi - if [ -n "$pad_config_chatandusers" ]; then - ynh_replace_string --match_string="\(\"chatAndUsers\" *: \).*," --replace_string="\1$pad_config_chatandusers," --target_file="$final_path/settings.json" - fi - if [ -n "$pad_config_alwaysshowchat" ]; then - ynh_replace_string --match_string="\(\"alwaysShowChat\" *: \).*," --replace_string="\1$pad_config_alwaysshowchat," --target_file="$final_path/settings.json" - fi - if [ -n "$pad_config_show_markdown" ]; then - ynh_replace_string --match_string="\(\"ep_markdown_default\" *: \).*," --replace_string="\1$pad_config_show_markdown," --target_file="$final_path/settings.json" - fi + # Optional parameters from config-panel feature + if [ -n "$pad_config_nocolors" ]; then + ynh_replace_string --match_string="\(\"noColors\" *: \).*," --replace_string="\1$pad_config_nocolors," --target_file="$final_path/settings.json" + fi + if [ -n "$pad_config_showlinenumbers" ]; then + ynh_replace_string --match_string="\(\"showLineNumbers\" *: \).*," --replace_string="\1$pad_config_showlinenumbers," --target_file="$final_path/settings.json" + fi + if [ -n "$pad_config_chatandusers" ]; then + ynh_replace_string --match_string="\(\"chatAndUsers\" *: \).*," --replace_string="\1$pad_config_chatandusers," --target_file="$final_path/settings.json" + fi + if [ -n "$pad_config_alwaysshowchat" ]; then + ynh_replace_string --match_string="\(\"alwaysShowChat\" *: \).*," --replace_string="\1$pad_config_alwaysshowchat," --target_file="$final_path/settings.json" + fi + if [ -n "$pad_config_show_markdown" ]; then + ynh_replace_string --match_string="\(\"ep_markdown_default\" *: \).*," --replace_string="\1$pad_config_show_markdown," --target_file="$final_path/settings.json" + fi - # Recalculate and store the checksum of the file for the next upgrade. - ynh_store_file_checksum --file="$final_path/settings.json" - fi + # Recalculate and store the checksum of the file for the next upgrade. + ynh_store_file_checksum --file="$final_path/settings.json" + fi - # Overwrite the credentials config file only if it's allowed - if [ $overwrite_credentials -eq 1 ] - then - ynh_add_config --template="../conf/credentials.json" --destination="$final_path/credentials.json" - fi + # Overwrite the credentials config file only if it's allowed + if [ $overwrite_credentials -eq 1 ] + then + ynh_add_config --template="../conf/credentials.json" --destination="$final_path/credentials.json" + fi +fi + +chmod 600 "$final_path/settings.json" +chown $app:$app "$final_path/settings.json" + +chmod 600 "$final_path/credentials.json" +chown $app:$app "$final_path/credentials.json" + +#================================================= +# SETUP SYSTEMD +#================================================= +ynh_script_progression --message="Upgrading systemd configuration..." --weight=2 + +# Create a dedicated systemd config +if [ $overwrite_systemd -eq 1 ] +then + ynh_add_systemd_config fi #================================================= -# SECURING FILES AND DIRECTORIES +# INSTALL ETHERPAD'S PLUGINS #================================================= +ynh_script_progression --message="Installing Etherpad plugins..." --weight=90 -# Set files ownership to Etherpad -chmod 750 "$final_path" -chmod o-rwx "$final_path" -chown -R $app: "$final_path" -# Restrict access to credentials.json -chmod 600 "$final_path/credentials.json" -chown $app -R /var/log/$app/etherpad.log +pushd "$final_path" + # Add Left/Center/Right/Justify to lines of text in a pad + ynh_exec_warn_less ynh_exec_as $app env $ynh_node_load_PATH $ynh_npm install --no-save ep_align@${ep_align_version} + # Framapad - Adds author names to span titles + ynh_exec_warn_less ynh_exec_as $app env $ynh_node_load_PATH $ynh_npm install --no-save ep_author_hover@${ep_author_hover_version} + # Framapad - Adds comments on sidebar and link it to the text. + ynh_exec_warn_less ynh_exec_as $app env $ynh_node_load_PATH $ynh_npm install --no-save ep_comments_page@${ep_comments_page_version} + # Framapad - Displays paragraphs, sentences, words and characters counts. + ynh_exec_warn_less ynh_exec_as $app env $ynh_node_load_PATH $ynh_npm install --no-save ep_countable@${ep_countable_version} + # Framapad - Delete pads which were never edited + ynh_exec_warn_less ynh_exec_as $app env $ynh_node_load_PATH $ynh_npm install --no-save ep_delete_empty_pads@${ep_delete_empty_pads_version} + # Framapad - Apply colors to fonts + ynh_exec_warn_less ynh_exec_as $app env $ynh_node_load_PATH $ynh_npm install --no-save ep_font_color@${ep_font_color_version} + # Framapad - Adds heading support to Etherpad Lite. + ynh_exec_warn_less ynh_exec_as $app env $ynh_node_load_PATH $ynh_npm install --no-save ep_headings2@${ep_headings2_version} + # Framapad - Edit and Export as Markdown in Etherpad + ynh_exec_warn_less ynh_exec_as $app env $ynh_node_load_PATH $ynh_npm install --no-save ep_markdown@${ep_markdown_version} + if [ $mypads -eq 1 ]; then + # Framapad - Groups and private pads for Etherpad + ynh_exec_warn_less ynh_exec_as $app env $ynh_node_load_PATH $ynh_npm install --no-save ep_mypads@${mypads_version} + fi + # Framapad - Add support to do 'Spell checking' + ynh_exec_warn_less ynh_exec_as $app env $ynh_node_load_PATH $ynh_npm install --no-save ep_spellcheck@${ep_spellcheck_version} + # Framapad - Add support for Subscript and Superscript + ynh_exec_warn_less ynh_exec_as $app env $ynh_node_load_PATH $ynh_npm install --no-save ep_subscript_and_superscript@${ep_subscript_and_superscript_version} + # Framapad - View a table of contents for your pad + ynh_exec_warn_less ynh_exec_as $app env $ynh_node_load_PATH $ynh_npm install --no-save ep_table_of_contents@${ep_table_of_contents_version} + # Framapad - User Pad Contents font size can be set in settings, this does not effect other peoples views + ynh_exec_warn_less ynh_exec_as $app env $ynh_node_load_PATH $ynh_npm install --no-save ep_font_size@${ep_font_size_version} +popd #================================================= -# ADVERTISE SERVICE IN ADMIN PANEL +# UPGRADE NPM MODULES #================================================= +ynh_script_progression --message="Upgrading Etherpad..." --weight=60 + +pushd $final_path + ynh_exec_warn_less ynh_exec_as $app env $ynh_node_load_PATH bin/installDeps.sh +popd + +#================================================= +# SOME HACKS +#================================================= + +if [ "$upgrade_type" == "UPGRADE_APP" ] && [ $mypads -eq 1 ] +then + # Find the /div just after the field to open a pad in order to add a link to mypads plugin. + sed -i '157i

MyPads
' $final_path/src/templates/index.html +fi + +#================================================= +# GENERIC FINALIZATION +#================================================= +# SETUP LOGROTATE +#================================================= +ynh_script_progression --message="Upgrading logrotate configuration..." --weight=2 + +# Use logrotate to manage app-specific logfile(s) +ynh_use_logrotate --non-append --specific_user=$app/$app + +#================================================= +# INTEGRATE SERVICE IN YUNOHOST +#================================================= +ynh_script_progression --message="Integrating service in YunoHost..." yunohost service add $app --description="Collaborative editor" --log="/var/log/$app/etherpad.log" +#================================================= +# START SYSTEMD SERVICE +#================================================= +ynh_script_progression --message="Starting a systemd service..." --weight=9 + +ynh_systemd_action --service_name=$app --action=restart --line_match="You can access your Etherpad instance at" --log_path="/var/log/$app/etherpad.log" --timeout="120" + #================================================= # UPGRADE FAIL2BAN #================================================= @@ -421,49 +407,12 @@ ynh_script_progression --message="Reconfiguring Fail2Ban..." --weight=8 # Create a dedicated Fail2Ban config ynh_add_fail2ban_config --logpath="/var/log/nginx/$domain-access.log" --failregex=" .* .POST /mypads/api/auth/login HTTP/1.1. 400" --max_retry=5 -#================================================= -# SETUP LOGROTATE -#================================================= -ynh_script_progression --message="Upgrading logrotate configuration..." --weight=2 - -# Use logrotate to manage app-specific logfile(s) -ynh_use_logrotate --non-append --specific_user=$app/$app - -#================================================= -# SETUP SYSTEMD -#================================================= -ynh_script_progression --message="Upgrading systemd configuration..." --weight=2 - -# Overwrite the systemd configuration only if it's allowed -if [ $overwrite_systemd -eq 1 ] -then - ynh_add_systemd_config -fi - -#================================================= -# SOME HACKS -#================================================= - -if [ "$upgrade_type" == "UPGRADE_APP" ] && [ $mypads -eq 1 ] -then - # Find the /div just after the field to open a pad in order to add a link to mypads plugin. - sed -i '157i

MyPads
' $final_path/src/templates/index.html -fi - #================================================= # RELOAD NGINX #================================================= ynh_script_progression --message="Reloading NGINX web server..." -ynh_systemd_action --action=reload --service_name=nginx - -#================================================= -# CHECK ETHERPAD STARTING -#================================================= -ynh_script_progression --message="Restarting Etherpad..." --weight=9 - -# Wait for etherpad to be fully started -ynh_systemd_action --action=restart --line_match="You can access your Etherpad instance at" --log_path="/var/log/$app/etherpad.log" --timeout="120" +ynh_systemd_action --service_name=nginx --action=reload #================================================= # DEACTIVE MAINTENANCE MODE @@ -485,9 +434,9 @@ admin_mail_html=$(ynh_app_setting_get $app admin_mail_html) admin_mail_html="${admin_mail_html:-0}" # If a html email is required. Apply html to the changelog. if [ "$admin_mail_html" -eq 1 ]; then - format=html + format=html else - format=plain + format=plain fi ynh_app_changelog --format=$format