From 74aee8b7330f7e926ebcbf6c9743f6d474ab3ae9 Mon Sep 17 00:00:00 2001 From: Fabian Wilkens Date: Mon, 1 Aug 2022 21:46:14 +0200 Subject: [PATCH 01/21] Update: Remove self-hosted extensions --- conf/ext_action-bar.src | 5 - conf/ext_autobiography-theme.src | 5 - conf/ext_bold-editor.src | 5 - conf/ext_code-editor.src | 5 - conf/ext_dynamic-theme.src | 5 - conf/ext_focus-theme.src | 5 - conf/ext_folders-component.src | 5 - conf/ext_futura-theme.src | 5 - conf/ext_github-push.src | 5 - conf/ext_markdown-basic.src | 5 - conf/ext_markdown-pro.src | 5 - conf/ext_math-editor.src | 5 - conf/ext_mfa-link.src | 5 - conf/ext_midnight-theme.src | 5 - conf/ext_minimal-markdown-editor.src | 5 - conf/ext_no-distraction-theme.src | 5 - conf/ext_plus-editor.src | 5 - conf/ext_quick-tags.src | 5 - conf/ext_simple-task-editor.src | 5 - conf/ext_solarized-theme.src | 5 - conf/ext_titanium-theme.src | 5 - conf/ext_token-vault.src | 5 - conf/ext_vim-editor.src | 5 - scripts/_common.sh | 1 - scripts/backup | 2 - scripts/change_url | 44 --- scripts/install | 71 ---- scripts/remove | 2 - scripts/restore | 6 - scripts/upgrade | 110 ++----- scripts/ynh_send_readme_to_admin__2 | 140 -------- sources/extra_files/extensions/repo.json | 302 ------------------ .../extensions/src/action-bar.json | 11 - .../extensions/src/autobiography-theme.json | 17 - .../extensions/src/bold-editor.json | 11 - .../extensions/src/code-editor.json | 11 - .../extensions/src/dynamic-theme.json | 13 - .../extensions/src/focus-theme.json | 17 - .../extensions/src/folders-component.json | 11 - .../extensions/src/futura-theme.json | 17 - .../extensions/src/github-push.json | 11 - .../extensions/src/markdown-basic.json | 11 - .../extensions/src/markdown-pro.json | 11 - .../extensions/src/math-editor.json | 11 - .../extra_files/extensions/src/mfa-link.json | 11 - .../extensions/src/midnight-theme.json | 17 - .../src/minimal-markdown-editor.json | 11 - .../extensions/src/no-distraction-theme.json | 17 - .../extensions/src/plus-editor.json | 11 - .../extensions/src/quick-tags.json | 11 - .../extensions/src/simple-task-editor.json | 11 - .../extensions/src/solarized-dark-theme.json | 17 - .../extensions/src/titanium-theme.json | 17 - .../extensions/src/token-vault.json | 11 - .../extensions/src/vim-editor.json | 11 - sources/extra_files/help/index.html | 82 ----- 56 files changed, 19 insertions(+), 1153 deletions(-) delete mode 100644 conf/ext_action-bar.src delete mode 100644 conf/ext_autobiography-theme.src delete mode 100644 conf/ext_bold-editor.src delete mode 100644 conf/ext_code-editor.src delete mode 100644 conf/ext_dynamic-theme.src delete mode 100644 conf/ext_focus-theme.src delete mode 100644 conf/ext_folders-component.src delete mode 100644 conf/ext_futura-theme.src delete mode 100644 conf/ext_github-push.src delete mode 100644 conf/ext_markdown-basic.src delete mode 100644 conf/ext_markdown-pro.src delete mode 100644 conf/ext_math-editor.src delete mode 100644 conf/ext_mfa-link.src delete mode 100644 conf/ext_midnight-theme.src delete mode 100644 conf/ext_minimal-markdown-editor.src delete mode 100644 conf/ext_no-distraction-theme.src delete mode 100644 conf/ext_plus-editor.src delete mode 100644 conf/ext_quick-tags.src delete mode 100644 conf/ext_simple-task-editor.src delete mode 100644 conf/ext_solarized-theme.src delete mode 100644 conf/ext_titanium-theme.src delete mode 100644 conf/ext_token-vault.src delete mode 100644 conf/ext_vim-editor.src delete mode 100644 scripts/ynh_send_readme_to_admin__2 delete mode 100644 sources/extra_files/extensions/repo.json delete mode 100644 sources/extra_files/extensions/src/action-bar.json delete mode 100644 sources/extra_files/extensions/src/autobiography-theme.json delete mode 100644 sources/extra_files/extensions/src/bold-editor.json delete mode 100644 sources/extra_files/extensions/src/code-editor.json delete mode 100644 sources/extra_files/extensions/src/dynamic-theme.json delete mode 100644 sources/extra_files/extensions/src/focus-theme.json delete mode 100644 sources/extra_files/extensions/src/folders-component.json delete mode 100644 sources/extra_files/extensions/src/futura-theme.json delete mode 100644 sources/extra_files/extensions/src/github-push.json delete mode 100644 sources/extra_files/extensions/src/markdown-basic.json delete mode 100644 sources/extra_files/extensions/src/markdown-pro.json delete mode 100644 sources/extra_files/extensions/src/math-editor.json delete mode 100644 sources/extra_files/extensions/src/mfa-link.json delete mode 100644 sources/extra_files/extensions/src/midnight-theme.json delete mode 100644 sources/extra_files/extensions/src/minimal-markdown-editor.json delete mode 100644 sources/extra_files/extensions/src/no-distraction-theme.json delete mode 100644 sources/extra_files/extensions/src/plus-editor.json delete mode 100644 sources/extra_files/extensions/src/quick-tags.json delete mode 100644 sources/extra_files/extensions/src/simple-task-editor.json delete mode 100644 sources/extra_files/extensions/src/solarized-dark-theme.json delete mode 100644 sources/extra_files/extensions/src/titanium-theme.json delete mode 100644 sources/extra_files/extensions/src/token-vault.json delete mode 100644 sources/extra_files/extensions/src/vim-editor.json delete mode 100644 sources/extra_files/help/index.html diff --git a/conf/ext_action-bar.src b/conf/ext_action-bar.src deleted file mode 100644 index 3f69304..0000000 --- a/conf/ext_action-bar.src +++ /dev/null @@ -1,5 +0,0 @@ -SOURCE_URL=https://github.com/standardnotes/action-bar/archive/1.3.2.zip -SOURCE_SUM=35b03cc5be9b7d948016ca6f7de8e682361a810f884f6e2c0a71cb09100baba0 -SOURCE_SUM_PRG=sha256sum -SOURCE_FORMAT=zip -SOURCE_IN_SUBDIR=true diff --git a/conf/ext_autobiography-theme.src b/conf/ext_autobiography-theme.src deleted file mode 100644 index 4d45396..0000000 --- a/conf/ext_autobiography-theme.src +++ /dev/null @@ -1,5 +0,0 @@ -SOURCE_URL=https://github.com/standardnotes/autobiography-theme/archive/1.0.0.zip -SOURCE_SUM=cbc8e07fa7703bdf8b7c9c3ef30a6d87d4ade7e5eb58ce7a983a34f1199a819d -SOURCE_SUM_PRG=sha256sum -SOURCE_FORMAT=zip -SOURCE_IN_SUBDIR=true diff --git a/conf/ext_bold-editor.src b/conf/ext_bold-editor.src deleted file mode 100644 index 5f14968..0000000 --- a/conf/ext_bold-editor.src +++ /dev/null @@ -1,5 +0,0 @@ -SOURCE_URL=https://github.com/standardnotes/bold-editor/archive/1.2.2.zip -SOURCE_SUM=2831f0fd4abed6562b860e558968388a398f691602a82795b10a13e897c3af2e -SOURCE_SUM_PRG=sha256sum -SOURCE_FORMAT=zip -SOURCE_IN_SUBDIR=true diff --git a/conf/ext_code-editor.src b/conf/ext_code-editor.src deleted file mode 100644 index f8bf502..0000000 --- a/conf/ext_code-editor.src +++ /dev/null @@ -1,5 +0,0 @@ -SOURCE_URL=https://github.com/standardnotes/code-editor/archive/1.3.8.zip -SOURCE_SUM=085B3839F072601C704C3D97E180B66909A3EFA89B3D876298887D426C6315E4 -SOURCE_SUM_PRG=sha256sum -SOURCE_FORMAT=zip -SOURCE_IN_SUBDIR=true diff --git a/conf/ext_dynamic-theme.src b/conf/ext_dynamic-theme.src deleted file mode 100644 index 59b8df5..0000000 --- a/conf/ext_dynamic-theme.src +++ /dev/null @@ -1,5 +0,0 @@ -SOURCE_URL=https://github.com/standardnotes/dynamic-theme/archive/1.0.0.zip -SOURCE_SUM=2be90456a6d8e90b4c6c666c797b96c72935b41fde8aa2b29a219368ce100c99 -SOURCE_SUM_PRG=sha256sum -SOURCE_FORMAT=zip -SOURCE_IN_SUBDIR=true diff --git a/conf/ext_focus-theme.src b/conf/ext_focus-theme.src deleted file mode 100644 index 664875e..0000000 --- a/conf/ext_focus-theme.src +++ /dev/null @@ -1,5 +0,0 @@ -SOURCE_URL=https://github.com/standardnotes/focus-theme/archive/1.2.3.zip -SOURCE_SUM=371a48128bc0e95f2298053dc39c333454a2c11962a28e9a7749435da0e85340 -SOURCE_SUM_PRG=sha256sum -SOURCE_FORMAT=zip -SOURCE_IN_SUBDIR=true diff --git a/conf/ext_folders-component.src b/conf/ext_folders-component.src deleted file mode 100644 index 09f12b1..0000000 --- a/conf/ext_folders-component.src +++ /dev/null @@ -1,5 +0,0 @@ -SOURCE_URL=https://github.com/standardnotes/folders-component/archive/1.3.8.zip -SOURCE_SUM=ae30cf348466af90b05216a16f8094fd9f087979dced6b1b83a8ad5f26a924e3 -SOURCE_SUM_PRG=sha256sum -SOURCE_FORMAT=zip -SOURCE_IN_SUBDIR=true diff --git a/conf/ext_futura-theme.src b/conf/ext_futura-theme.src deleted file mode 100644 index 2b7dd0f..0000000 --- a/conf/ext_futura-theme.src +++ /dev/null @@ -1,5 +0,0 @@ -SOURCE_URL=https://github.com/standardnotes/futura-theme/archive/1.2.2.zip -SOURCE_SUM=900cebb84e2a794ca5cd6d62d28705e18181ae6cac76c2d8fa6d109a24386e94 -SOURCE_SUM_PRG=sha256sum -SOURCE_FORMAT=zip -SOURCE_IN_SUBDIR=true diff --git a/conf/ext_github-push.src b/conf/ext_github-push.src deleted file mode 100644 index 70da57d..0000000 --- a/conf/ext_github-push.src +++ /dev/null @@ -1,5 +0,0 @@ -SOURCE_URL=https://github.com/standardnotes/github-push/archive/1.2.4.zip -SOURCE_SUM=D902386F8E91E0DBAEE7763E9D6B2015B70426D1B91973F677DDAA63B5918574 -SOURCE_SUM_PRG=sha256sum -SOURCE_FORMAT=zip -SOURCE_IN_SUBDIR=true diff --git a/conf/ext_markdown-basic.src b/conf/ext_markdown-basic.src deleted file mode 100644 index 68198ae..0000000 --- a/conf/ext_markdown-basic.src +++ /dev/null @@ -1,5 +0,0 @@ -SOURCE_URL=https://github.com/standardnotes/markdown-basic/archive/1.4.0.zip -SOURCE_SUM=acfa7ea3974de9441381020c64e343303cbd7d27c30175ed3c047c17c6f98cad -SOURCE_SUM_PRG=sha256sum -SOURCE_FORMAT=zip -SOURCE_IN_SUBDIR=true diff --git a/conf/ext_markdown-pro.src b/conf/ext_markdown-pro.src deleted file mode 100644 index 5ce813d..0000000 --- a/conf/ext_markdown-pro.src +++ /dev/null @@ -1,5 +0,0 @@ -SOURCE_URL=https://github.com/standardnotes/markdown-pro/archive/1.3.14.zip -SOURCE_SUM=0fe5d2a062fc780e417979605e779ee17bbe580ecfa936a45d8007d8ca6d3b0e -SOURCE_SUM_PRG=sha256sum -SOURCE_FORMAT=zip -SOURCE_IN_SUBDIR=true diff --git a/conf/ext_math-editor.src b/conf/ext_math-editor.src deleted file mode 100644 index 915b17d..0000000 --- a/conf/ext_math-editor.src +++ /dev/null @@ -1,5 +0,0 @@ -SOURCE_URL=https://github.com/standardnotes/math-editor/archive/1.3.4.zip -SOURCE_SUM=e8e69f082231f3052185c1f74c7bacdbc26b75fe1047045da2cf22f4459d97bf -SOURCE_SUM_PRG=sha256sum -SOURCE_FORMAT=zip -SOURCE_IN_SUBDIR=true diff --git a/conf/ext_mfa-link.src b/conf/ext_mfa-link.src deleted file mode 100644 index 08edbd9..0000000 --- a/conf/ext_mfa-link.src +++ /dev/null @@ -1,5 +0,0 @@ -SOURCE_URL=https://github.com/standardnotes/mfa-link/archive/1.2.5.zip -SOURCE_SUM=f5f5221fa3cf53bf5ee94e60a5adb7a455d1ee46fabe8b0ef13e085f4098cbc8 -SOURCE_SUM_PRG=sha256sum -SOURCE_FORMAT=zip -SOURCE_IN_SUBDIR=true diff --git a/conf/ext_midnight-theme.src b/conf/ext_midnight-theme.src deleted file mode 100644 index 86bcf9c..0000000 --- a/conf/ext_midnight-theme.src +++ /dev/null @@ -1,5 +0,0 @@ -SOURCE_URL=https://github.com/standardnotes/midnight-theme/archive/1.2.2.zip -SOURCE_SUM=916aa7ebbd9df97d2dba0d14b322031307495787ededb4429a295792756b7c2b -SOURCE_SUM_PRG=sha256sum -SOURCE_FORMAT=zip -SOURCE_IN_SUBDIR=true diff --git a/conf/ext_minimal-markdown-editor.src b/conf/ext_minimal-markdown-editor.src deleted file mode 100644 index e87331d..0000000 --- a/conf/ext_minimal-markdown-editor.src +++ /dev/null @@ -1,5 +0,0 @@ -SOURCE_URL=https://github.com/standardnotes/minimal-markdown-editor/archive/1.3.7.zip -SOURCE_SUM=58232eeb4a129c1c89dbc86271832d68ff3c508e2256e80b099a18e95258cd70 -SOURCE_SUM_PRG=sha256sum -SOURCE_FORMAT=zip -SOURCE_IN_SUBDIR=true diff --git a/conf/ext_no-distraction-theme.src b/conf/ext_no-distraction-theme.src deleted file mode 100644 index 5a457d3..0000000 --- a/conf/ext_no-distraction-theme.src +++ /dev/null @@ -1,5 +0,0 @@ -SOURCE_URL=https://github.com/standardnotes/no-distraction-theme/archive/1.2.2.zip -SOURCE_SUM=c6b3116aab0e87bdba25632f6e0820c98a47c10248c4760853fb69facc860088 -SOURCE_SUM_PRG=sha256sum -SOURCE_FORMAT=zip -SOURCE_IN_SUBDIR=true diff --git a/conf/ext_plus-editor.src b/conf/ext_plus-editor.src deleted file mode 100644 index f64a7fd..0000000 --- a/conf/ext_plus-editor.src +++ /dev/null @@ -1,5 +0,0 @@ -SOURCE_URL=https://github.com/standardnotes/plus-editor/archive/1.5.0.zip -SOURCE_SUM=2d30a2544523f9d482f17a0bdace0b7e803a40c96ccd320926776a403ec6cd6f -SOURCE_SUM_PRG=sha256sum -SOURCE_FORMAT=zip -SOURCE_IN_SUBDIR=true diff --git a/conf/ext_quick-tags.src b/conf/ext_quick-tags.src deleted file mode 100644 index 872cbd3..0000000 --- a/conf/ext_quick-tags.src +++ /dev/null @@ -1,5 +0,0 @@ -SOURCE_URL=https://github.com/standardnotes/quick-tags/archive/1.3.2.zip -SOURCE_SUM=62B815B436F519412B16A58622D356219F391B11A6FBB88F5E018FF3520214CF -SOURCE_SUM_PRG=sha256sum -SOURCE_FORMAT=zip -SOURCE_IN_SUBDIR=true diff --git a/conf/ext_simple-task-editor.src b/conf/ext_simple-task-editor.src deleted file mode 100644 index 9527edf..0000000 --- a/conf/ext_simple-task-editor.src +++ /dev/null @@ -1,5 +0,0 @@ -SOURCE_URL=https://github.com/standardnotes/simple-task-editor/archive/1.3.7.zip -SOURCE_SUM=11afda3335058031880b7f1833d639f37b32d92c5b1ad8359503af2784706215 -SOURCE_SUM_PRG=sha256sum -SOURCE_FORMAT=zip -SOURCE_IN_SUBDIR=true diff --git a/conf/ext_solarized-theme.src b/conf/ext_solarized-theme.src deleted file mode 100644 index 30c2aff..0000000 --- a/conf/ext_solarized-theme.src +++ /dev/null @@ -1,5 +0,0 @@ -SOURCE_URL=https://github.com/standardnotes/solarized-dark-theme/archive/1.2.1.zip -SOURCE_SUM=4f05dfb4edc9ce81fd22c01d101cc453509791e24475cfefd235dab15b4abfc6 -SOURCE_SUM_PRG=sha256sum -SOURCE_FORMAT=zip -SOURCE_IN_SUBDIR=true diff --git a/conf/ext_titanium-theme.src b/conf/ext_titanium-theme.src deleted file mode 100644 index 5d697ad..0000000 --- a/conf/ext_titanium-theme.src +++ /dev/null @@ -1,5 +0,0 @@ -SOURCE_URL=https://github.com/standardnotes/titanium-theme/archive/1.2.2.zip -SOURCE_SUM=aa42d8911a514d454af045dc65433aef6361ecfd67ad27f1d8093b9da01bf2b3 -SOURCE_SUM_PRG=sha256sum -SOURCE_FORMAT=zip -SOURCE_IN_SUBDIR=true diff --git a/conf/ext_token-vault.src b/conf/ext_token-vault.src deleted file mode 100644 index aade27d..0000000 --- a/conf/ext_token-vault.src +++ /dev/null @@ -1,5 +0,0 @@ -SOURCE_URL=https://github.com/standardnotes/token-vault/archive/1.0.10.zip -SOURCE_SUM=e078f096717ae03a50634d2267cea457deb49ced30e1741cd2ba28829aa1b947 -SOURCE_SUM_PRG=sha256sum -SOURCE_FORMAT=zip -SOURCE_IN_SUBDIR=true diff --git a/conf/ext_vim-editor.src b/conf/ext_vim-editor.src deleted file mode 100644 index e640f78..0000000 --- a/conf/ext_vim-editor.src +++ /dev/null @@ -1,5 +0,0 @@ -SOURCE_URL=https://github.com/standardnotes/vim-editor/archive/1.3.7.zip -SOURCE_SUM=438AA36D64279EFFF0CF925253FC9666A3DAEBC148E49C2C70D6BC6D51BE78DE -SOURCE_SUM_PRG=sha256sum -SOURCE_FORMAT=zip -SOURCE_IN_SUBDIR=true diff --git a/scripts/_common.sh b/scripts/_common.sh index 6d87bb1..f02be43 100644 --- a/scripts/_common.sh +++ b/scripts/_common.sh @@ -9,7 +9,6 @@ NODEJS_VERSION="16" syncing_server_js_version="1.54.1" auth_version="1.46.2" api_gateway_version="1.40.1" -extensions_version="2021.08.27" swap_needed=2048 node_max_old_space_size=6144 diff --git a/scripts/backup b/scripts/backup index 8e419d0..8769460 100755 --- a/scripts/backup +++ b/scripts/backup @@ -29,7 +29,6 @@ ynh_print_info "Loading installation settings..." app=$YNH_APP_INSTANCE_NAME final_path=$(ynh_app_setting_get --app=$app --key=final_path) -final_path_www=$(ynh_app_setting_get --app=$app --key=final_path_www) domain=$(ynh_app_setting_get --app=$app --key=domain) db_name=$(ynh_app_setting_get --app=$app --key=db_name) @@ -39,7 +38,6 @@ db_name=$(ynh_app_setting_get --app=$app --key=db_name) ynh_print_info "Backing up the main app directory..." ynh_backup --src_path="$final_path" -ynh_backup --src_path="$final_path_www" #================================================= # BACKUP THE NGINX CONFIGURATION diff --git a/scripts/change_url b/scripts/change_url index 8cb6067..8056790 100644 --- a/scripts/change_url +++ b/scripts/change_url @@ -7,7 +7,6 @@ #================================================= source _common.sh -source ynh_send_readme_to_admin__2 source /usr/share/yunohost/helpers #================================================= @@ -29,8 +28,6 @@ ynh_script_progression --message="Loading installation settings..." --weight=1 # Needed for helper "ynh_add_nginx_config" final_path=$(ynh_app_setting_get --app=$app --key=final_path) -final_path_www=$(ynh_app_setting_get --app=$app --key=final_path_www) -final_path_extensions=$(ynh_app_setting_get --app=$app --key=final_path_extensions) port_syncing_server_js=$(ynh_app_setting_get --app=$app --key=port_syncing_server_js) port_syncing_server_js_worker=$(ynh_app_setting_get --app=$app --key=port_syncing_server_js_worker) port_auth=$(ynh_app_setting_get --app=$app --key=port_auth) @@ -105,31 +102,6 @@ fi #================================================= # SPECIFIC MODIFICATIONS #================================================= -#================================================= -# Modify Standard Notes - Extensions -#================================================= -ynh_script_progression --message="Modify Standard Notes - Extensions..." --weight=1 - -if [ $new_path = "/" ] -then - path="" -else - path=$new_path -fi - -ynh_replace_string \ - --match_string='url": "https://.*/extensions/src/' \ - --replace_string='url": "https://'$new_domain$path'/extensions/src/' \ - --target_file="$final_path_extensions/repo.json" - -find "$final_path_extensions/src/" -name "*.json" -print0 | while read -d $'\0' file -do - ynh_replace_string \ - --match_string='url": "https://.*/extensions/src/' \ - --replace_string='url": "https://'$new_domain$path'extensions/src/' \ - --target_file="$file" -done - #================================================= # SETUP FAIL2BAN #================================================= @@ -151,22 +123,6 @@ ynh_script_progression --message="Reloading nginx web server..." --weight=1 ynh_systemd_action --service_name=nginx --action=reload -#================================================= -# SEND A README FOR THE ADMIN -#================================================= -ynh_script_progression --message="Sending a readme for the admin..." - -admin_panel="https://$(grep portal_domain /etc/ssowat/conf.json | cut -d'"' -f4)/yunohost/admin/#/apps/$app" - -echo -e "\ -Standard Notes - Syncing Server's url was successfully changed.\n\ -Please configure the Standard Notes web app or mobile app to use this syncing server: https://$domain$path_url\n\ -\n\ -You changed the url of the server. All Extensions have to be reinstalled by the users. Or you can change the url back.\ -" > message - -ynh_send_readme_to_admin --app_message="message" --type='change_url' - #================================================= # END OF SCRIPT #================================================= diff --git a/scripts/install b/scripts/install index 9cf44ba..519f3a7 100755 --- a/scripts/install +++ b/scripts/install @@ -10,7 +10,6 @@ source _common.sh source ynh_add_swap source ynh_install_ruby__2 source ynh_redis -source ynh_send_readme_to_admin__2 source /usr/share/yunohost/helpers #================================================= @@ -35,13 +34,8 @@ app=$YNH_APP_INSTANCE_NAME # CHECK IF THE APP CAN BE INSTALLED WITH THESE ARGS #================================================= final_path=/opt/yunohost/$app -final_path_www=/var/www/$app -final_path_extensions="$final_path_www/extensions" ynh_app_setting_set --app=$app --key=final_path --value=$final_path -ynh_app_setting_set --app=$app --key=final_path_www --value=$final_path_www -ynh_app_setting_set --app=$app --key=final_path_extensions --value=$final_path_extensions test ! -e "$final_path" || ynh_die --message="This path already contains a folder" -test ! -e "$final_path_www" || ynh_die --message="This path already contains a folder" # Register (book) web path ynh_webpath_register --app=$app --domain=$domain --path_url=$path_url @@ -62,7 +56,6 @@ ynh_app_setting_set --app=$app --key=redis_db --value="$redis_db" ynh_app_setting_set --app=$app --key=syncing_server_js_version --value=$syncing_server_js_version ynh_app_setting_set --app=$app --key=auth_version --value=$auth_version ynh_app_setting_set --app=$app --key=api_gateway_version --value=$api_gateway_version -ynh_app_setting_set --app=$app --key=extensions_version --value=$extensions_version ynh_app_setting_set --app=$app --key=standalone --value="true" #================================================= @@ -126,30 +119,6 @@ chmod 750 "$final_path" chmod -R o-rwx "$final_path" chown -R $app:$app "$final_path" -# Copy help file -mkdir -p "$final_path_www/help" -if test -e "$YNH_APP_BASEDIR/sources/extra_files/help"; then - cp --archive "$YNH_APP_BASEDIR/sources/extra_files/help/." "$final_path_www/help" -fi -ynh_replace_vars --file="$final_path_www/help/index.html" - -# Extensions -mkdir -p "$final_path_extensions" - -if test -e "$YNH_APP_BASEDIR/sources/extra_files/extensions"; then - cp --archive "$YNH_APP_BASEDIR/sources/extra_files/extensions/." "$final_path_extensions" -fi - -find "../conf/" -name "ext_*.src" -print0 | while read -d $'\0' file -do - basename=$(basename -as .src $file) - ynh_setup_source --dest_dir="$final_path_extensions/src/${basename#'ext_'}" --source_id="$basename" -done - -chmod 750 "$final_path_www" -chmod -R o-rwx "$final_path_www" -chown -R "www-data":"www-data" "$final_path_www" - #================================================= # NGINX CONFIGURATION #================================================= @@ -219,26 +188,6 @@ pushd "$final_path/live/api-gateway" ynh_exec_warn_less ynh_exec_as $app env NODE_OPTIONS="--max-old-space-size=$node_max_old_space_size" PATH=$ynh_node_load_PATH yarn install --pure-lockfile ynh_exec_warn_less ynh_exec_as $app env NODE_OPTIONS="--max-old-space-size=$node_max_old_space_size" PATH=$ynh_node_load_PATH yarn build popd -#================================================= -# INSTALLING Standard Notes - Extensions -#================================================= -ynh_script_progression --message="Setup Standard Notes - Extensions..." --weight=1 - - -if [ $path_url = "/" ] -then - path="" -else - path=$path_url -fi - -ynh_replace_string --match_string="__DOMAIN__PATH__" --replace_string="$domain$path" --target_file="$final_path_extensions/repo.json" - -find "$final_path_extensions/src/" -name "*.json" -print0 | while read -d $'\0' file -do - ynh_replace_string --match_string="__DOMAIN__PATH__" --replace_string="$domain$path" --target_file="$file" -done - #================================================= # SETUP SYSTEMD @@ -343,7 +292,6 @@ ynh_script_progression --message="Configuring SSOwat..." --weight=3 # Everyone can access the app. # The "main" permission is automatically created before the install script. ynh_permission_update --permission="main" --add="visitors" --show_tile="false" -ynh_permission_create --permission="help" --url="/help/" --allowed="all_users" --show_tile="true" --label="Help" #================================================= # RELOAD NGINX @@ -352,25 +300,6 @@ ynh_script_progression --message="Reloading nginx web server..." --weight=1 ynh_systemd_action --service_name=nginx --action=reload -#================================================= -# SEND A README FOR THE ADMIN -#================================================= -ynh_script_progression --message="Sending a readme for the admin..." - -admin_panel="https://$(grep portal_domain /etc/ssowat/conf.json | cut -d'"' -f4)/yunohost/admin/#/apps/$app" - -echo -e "\ -Standard Notes - Syncing Server was successfully installed.\n\ -Please configure the Standard Notes web app or mobile app to use this syncing server: https://$domain$path_url\n\ -\n\ -Standard Notes extensions are hosted with this package.\n\ -An Help page for setting-up the Standard Notes Server and Extensions have been created under: https://$domain$path_url/help\n\ -The Help page is accessible via the Yunohost Portal.\n\ -You can deactivate the Help page under: $admin_panel\ -" > message - -ynh_send_readme_to_admin --app_message="message" --type='install' - #================================================= # END OF SCRIPT #================================================= diff --git a/scripts/remove b/scripts/remove index fa0ca98..4a6d6ec 100755 --- a/scripts/remove +++ b/scripts/remove @@ -28,7 +28,6 @@ port_api_gateway=$(ynh_app_setting_get --app=$app --key=port_api_gateway) 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) -final_path_www=$(ynh_app_setting_get --app=$app --key=final_path_www) #================================================= # STANDARD REMOVE @@ -106,7 +105,6 @@ ynh_script_progression --message="Removing app main directory..." --weight=1 # Remove the app directory securely ynh_secure_remove --file="$final_path" -ynh_secure_remove --file="$final_path_www" #================================================= # REMOVE NGINX CONFIGURATION diff --git a/scripts/restore b/scripts/restore index 83db97f..9a795a3 100755 --- a/scripts/restore +++ b/scripts/restore @@ -34,7 +34,6 @@ app=$YNH_APP_INSTANCE_NAME 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) -final_path_www=$(ynh_app_setting_get --app=$app --key=final_path_www) db_name=$(ynh_app_setting_get --app=$app --key=db_name) db_user=$db_name db_pwd=$(ynh_app_setting_get --app=$app --key=mysqlpwd) @@ -87,7 +86,6 @@ ynh_restore_file --origin_path="/etc/nginx/conf.d/$domain.d/$app.conf" ynh_script_progression --message="Restoring the app main directory..." --weight=1 ynh_restore_file --origin_path="$final_path" -ynh_restore_file --origin_path="$final_path_www" #================================================= # RECREATE THE DEDICATED USER @@ -106,10 +104,6 @@ chmod 750 "$final_path" chmod -R o-rwx "$final_path" chown -R $app:$app "$final_path" -chmod 750 "$final_path_www" -chmod -R o-rwx "$final_path_www" -chown -R "www-data":"www-data" "$final_path_www" - mkdir -p "/var/log/$app" chown -R $app: "/var/log/$app" diff --git a/scripts/upgrade b/scripts/upgrade index af4a066..cf41261 100755 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -10,7 +10,6 @@ source _common.sh source ynh_add_swap source ynh_install_ruby__2 source ynh_redis -source ynh_send_readme_to_admin__2 source /usr/share/yunohost/helpers #================================================= @@ -24,8 +23,6 @@ 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) -final_path_www=$(ynh_app_setting_get --app=$app --key=final_path_www) -final_path_extensions=$(ynh_app_setting_get --app=$app --key=final_path_extensions) db_name=$(ynh_app_setting_get --app=$app --key=db_name) db_user=$db_name @@ -139,11 +136,6 @@ if ! ynh_permission_exists --permission="main" then ynh_permission_create --permission="main" --url="/" --allowed="visitors" --show_tile="false" fi -# Create a permission if needed -if ! ynh_permission_exists --permission="help" -then - ynh_permission_create --permission="help" --url="/help/" --allowed="all_users" --show_tile="true" --label="Help" -fi # If final_path doesn't exist, create it if [ -z "$final_path" ]; then @@ -151,17 +143,6 @@ if [ -z "$final_path" ]; then ynh_app_setting_set --app=$app --key=final_path --value=$final_path fi -# If final_path doesn't exist, create it -if [ -z "$final_path_www" ]; then - final_path_www=/var/www/$app - ynh_app_setting_set --app=$app --key=final_path_www --value=$final_path_www -fi - -# If final_path doesn't exist, create it -if [ -z "$final_path_extensions" ]; then - final_path_extensions=/var/www/$app/extensions - ynh_app_setting_set --app=$app --key=final_path_extensions --value=$final_path_extensions -fi # If redis_db doesn't exist, create it if [ -z "$redis_db" ]; then @@ -245,6 +226,22 @@ if [ -n $(ynh_app_setting_get --app="$app" --key=port) ]; then ynh_app_setting_delete --app=$app --key=port fi +# If final_path exist, delete it +if [ -n "$final_path_www" ]; then + ynh_app_setting_delete --app=$app --key=final_path_www +fi + +# If final_path exist, delete it +if [ -n "$final_path_extensions" ]; then + ynh_app_setting_delete --app=$app --key=final_path_extensions +fi + +# If permission help exists, delete it +if ynh_permission_exists --permission="help" +then + ynh_permission_delete --permission="help" +fi + # If old service exsits; remove it if ynh_exec_warn_less yunohost service status "$app" >/dev/null then @@ -275,6 +272,9 @@ fi if [ -e "$final_path/live/auth-worker" ]; then ynh_secure_remove --file="$final_path/live/auth-worker" fi +if [ -e "/var/www/$app" ]; then + ynh_secure_remove --file="/var/www/$app" +fi #================================================= # CREATE DEDICATED USER @@ -336,40 +336,10 @@ then ynh_setup_source --source_id=app_api-gateway --dest_dir="$final_path/live/api-gateway" fi -if [[ "$extensions_version_installed" < "$extensions_version" ]] -then - # Remove destination directory - ynh_secure_remove --file="$final_path_extensions" - # Download, check integrity, uncompress and patch the source from app.src - mkdir -p "$final_path_extensions" - if test -e "../sources/extra_files/extensions" - then - cp -a "../sources/extra_files/extensions/." "$final_path_extensions" - fi - - find "../conf/" -name "ext_*.src" -print0 | while read -d $'\0' file - do - basename=$(basename -as .src $file) - ynh_setup_source --dest_dir="$final_path_extensions/src/${basename#'ext_'}" --source_id="$basename" - done -fi - -# Copy help file -ynh_secure_remove --file="$final_path_www/help" -mkdir -p "$final_path_www/help" -if test -e "$YNH_APP_BASEDIR/sources/extra_files/help"; then - cp --archive "$YNH_APP_BASEDIR/sources/extra_files/help/." "$final_path_www/help" -fi -ynh_replace_vars --file="$final_path_www/help/index.html" - chmod 750 "$final_path" chmod -R o-rwx "$final_path" chown -R $app:$app "$final_path" -chmod 750 "$final_path_www" -chmod -R o-rwx "$final_path_www" -chown -R "www-data":"www-data" "$final_path_www" - #================================================= # NGINX CONFIGURATION #================================================= @@ -447,29 +417,6 @@ then fi fi -#================================================= -# INSTALLING Standard Notes - Extensions -#================================================= -if [[ "$extensions_version_installed" < "$extensions_version" ]] -then - ynh_script_progression --message="Installing Standard Notes - Extensions..." --weight=1 - - if [ $path_url = "/" ] - then - path="" - else - path=$path_url - fi - - ynh_replace_string --match_string="__DOMAIN__PATH__" --replace_string="$domain$path" --target_file="$final_path_extensions/repo.json" - - find "$final_path_extensions/src/" -name "*.json" -print0 | while read -d $'\0' file - do - ynh_replace_string --match_string="__DOMAIN__PATH__" --replace_string="$domain$path" --target_file="$file" - done - ynh_app_setting_set --app=$app --key=extensions_version --value=$extensions_version -fi - #================================================= # SETUP SYSTEMD #================================================= @@ -570,25 +517,6 @@ ynh_script_progression --message="Reloading nginx web server..." --weight=1 ynh_systemd_action --service_name=nginx --action=reload -#================================================= -# SEND A README FOR THE ADMIN -#================================================= -ynh_script_progression --message="Sending a readme for the admin..." - -admin_panel="https://$(grep portal_domain /etc/ssowat/conf.json | cut -d'"' -f4)/yunohost/admin/#/apps/$app" - -echo -e "\ -Standard Notes - Syncing Server was successfully upgraded.\n\ -Please configure the Standard Notes web app or mobile app to use this syncing server: https://$domain$path_url\n\ -\n\ -Standard Notes extensions are hosted with this package.\n\ -An Help page for setting-up the Standard Notes Server and Extensions have been created under: https://$domain$path_url/help\n\ -The Help page is accessible via the Yunohost Portal.\n\ -You can deactivate the Help page under: $admin_panel\ -" > message - -ynh_send_readme_to_admin --app_message="message" --type='upgrade' - #================================================= # STORE SETTINGS #================================================= diff --git a/scripts/ynh_send_readme_to_admin__2 b/scripts/ynh_send_readme_to_admin__2 deleted file mode 100644 index 06cff8c..0000000 --- a/scripts/ynh_send_readme_to_admin__2 +++ /dev/null @@ -1,140 +0,0 @@ -#!/bin/bash - -# Send an email to inform the administrator -# -# usage: ynh_send_readme_to_admin --app_message=app_message [--recipients=recipients] [--type=type] -# | arg: -m --app_message= - The file with the content to send to the administrator. -# | arg: -r, --recipients= - The recipients of this email. Use spaces to separate multiples recipients. - default: root -# example: "root admin@domain" -# If you give the name of a YunoHost user, ynh_send_readme_to_admin will find its email adress for you -# example: "root admin@domain user1 user2" -# | arg: -t, --type= - Type of mail, could be 'backup', 'change_url', 'install', 'remove', 'restore', 'upgrade' -ynh_send_readme_to_admin() { - # Declare an array to define the options of this helper. - declare -Ar args_array=( [m]=app_message= [r]=recipients= [t]=type= ) - local app_message - local recipients - local type - # Manage arguments with getopts - - ynh_handle_getopts_args "$@" - app_message="${app_message:-}" - recipients="${recipients:-root}" - type="${type:-install}" - - # Get the value of admin_mail_html - admin_mail_html=$(ynh_app_setting_get $app admin_mail_html) - admin_mail_html="${admin_mail_html:-0}" - - # Retrieve the email of users - find_mails () { - local list_mails="$1" - local mail - local recipients=" " - # Read each mail in argument - for mail in $list_mails - do - # Keep root or a real email address as it is - if [ "$mail" = "root" ] || echo "$mail" | grep --quiet "@" - then - recipients="$recipients $mail" - else - # But replace an user name without a domain after by its email - if mail=$(ynh_user_get_info "$mail" "mail" 2> /dev/null) - then - recipients="$recipients $mail" - fi - fi - done - echo "$recipients" - } - recipients=$(find_mails "$recipients") - - # Subject base - local mail_subject="☁️🆈🅽🅷☁️: \`$app\`" - - # Adapt the subject according to the type of mail required. - if [ "$type" = "backup" ]; then - mail_subject="$mail_subject has just been backup." - elif [ "$type" = "change_url" ]; then - mail_subject="$mail_subject has just been moved to a new URL!" - elif [ "$type" = "remove" ]; then - mail_subject="$mail_subject has just been removed!" - elif [ "$type" = "restore" ]; then - mail_subject="$mail_subject has just been restored!" - elif [ "$type" = "upgrade" ]; then - mail_subject="$mail_subject has just been upgraded!" - else # install - mail_subject="$mail_subject has just been installed!" - fi - - local mail_message="This is an automated message from your beloved YunoHost server. - -Specific information for the application $app. - -$(if [ -n "$app_message" ] -then - cat "$app_message" -else - echo "...No specific information..." -fi) - ---- -Automatic diagnosis data from YunoHost - -__PRE_TAG1__$(yunohost tools diagnosis | grep -B 100 "services:" | sed '/services:/d')__PRE_TAG2__" - - # Store the message into a file for further modifications. - echo "$mail_message" > mail_to_send - - # If a html email is required. Apply html tags to the message. - if [ "$admin_mail_html" -eq 1 ] - then - # Insert 'br' tags at each ending of lines. - ynh_replace_string "$" "
" mail_to_send - - # Insert starting HTML tags - sed --in-place '1s@^@\n\n\n\n@' mail_to_send - - # Keep tabulations - ynh_replace_string " " "\ \ " mail_to_send - ynh_replace_string "\t" "\ \ " mail_to_send - - # Insert url links tags - ynh_replace_string "__URL_TAG1__\(.*\)__URL_TAG2__\(.*\)__URL_TAG3__" "\1" mail_to_send - - # Insert pre tags - ynh_replace_string "__PRE_TAG1__" "
" mail_to_send
-		ynh_replace_string "__PRE_TAG2__" "<\pre>" mail_to_send
-
-		# Insert finishing HTML tags
-		echo -e "\n\n" >> mail_to_send
-
-	# Otherwise, remove tags to keep a plain text.
-	else
-		# Remove URL tags
-		ynh_replace_string "__URL_TAG[1,3]__" "" mail_to_send
-		ynh_replace_string "__URL_TAG2__" ": " mail_to_send
-
-		# Remove PRE tags
-		ynh_replace_string "__PRE_TAG[1-2]__" "" mail_to_send
-	fi
-
-	# Define binary to use for mail command
-	if [ -e /usr/bin/bsd-mailx ]
-	then
-		local mail_bin=/usr/bin/bsd-mailx
-	else
-		local mail_bin=/usr/bin/mail.mailutils
-	fi
-
-	if [ "$admin_mail_html" -eq 1 ]
-	then
-		content_type="text/html"
-	else
-		content_type="text/plain"
-	fi
-
-	# Send the email to the recipients
-	cat mail_to_send | $mail_bin -a "Content-Type: $content_type; charset=UTF-8" -s "$mail_subject" "$recipients"
-}
diff --git a/sources/extra_files/extensions/repo.json b/sources/extra_files/extensions/repo.json
deleted file mode 100644
index a24cb0d..0000000
--- a/sources/extra_files/extensions/repo.json
+++ /dev/null
@@ -1,302 +0,0 @@
-{
-    "content_type": "SN|Repo",
-    "packages": [
-        {
-            "area": "theme",
-            "content_type": "SN|Theme",
-            "description": "Autobiography",
-            "dock_icon": {
-                "background_color": "#9D7441",
-                "border_color": "#9D7441",
-                "foreground_color": "#ECE4DB",
-                "type": "circle"
-            },
-            "download_url": "https://github.com/standardnotes/autobiography-theme/archive/1.0.0.zip",
-            "identifier": "org.stndardnotes.autobiography-theme",
-            "latest_url": "https://__DOMAIN__PATH__/extensions/src/autobiography-theme.json",
-            "name": "Autobiography Theme",
-            "url": "https://__DOMAIN__PATH__/extensions/src/autobiography-theme/dist/dist.css",
-            "version": "1.0.0"
-        },
-        {
-            "area": "theme",
-            "content_type": "SN|Theme",
-            "description": "Light on the eyes, heavy on the spirit.",
-            "dock_icon": {
-                "background_color": "#a464c2",
-                "border_color": "#a464c2",
-                "foreground_color": "#ffffff",
-                "type": "circle"
-            },
-            "download_url": "https://github.com/standardnotes/focus-theme/archive/1.2.3.zip",
-            "identifier": "org.stndardnotes.focus-theme",
-            "latest_url": "https://__DOMAIN__PATH__/extensions/src/focus-theme.json",
-            "name": "Focus Theme",
-            "url": "https://__DOMAIN__PATH__/extensions/src/focus-theme/dist/dist.css",
-            "version": "1.2.3"
-        },
-        {
-            "area": "theme",
-            "content_type": "SN|Theme",
-            "description": "Calm and relaxed. Take some time off.",
-            "dock_icon": {
-                "background_color": "#fca429",
-                "border_color": "#fca429",
-                "foreground_color": "#ffffff",
-                "type": "circle"
-            },
-            "download_url": "https://github.com/standardnotes/futura-theme/archive/1.2.2.zip",
-            "identifier": "org.standardnotes.futura-theme",
-            "latest_url": "https://__DOMAIN__PATH__/extensions/src/futura-theme.json",
-            "name": "Futura Theme",
-            "url": "https://__DOMAIN__PATH__/extensions/src/futura-theme/dist/dist.css",
-            "version": "1.2.2"
-        },
-        {
-            "area": "theme",
-            "content_type": "SN|Theme",
-            "description": "Elegant utilitarianism.",
-            "dock_icon": {
-                "background_color": "#086DD6",
-                "border_color": "#086DD6",
-                "foreground_color": "#ffffff",
-                "type": "circle"
-            },
-            "download_url": "https://github.com/standardnotes/midnight-theme/archive/1.2.2.zip",
-            "identifier": "org.standardnotes.midnight-theme",
-            "latest_url": "https://__DOMAIN__PATH__/extensions/src/midnight-theme.json",
-            "name": "Midnight Theme",
-            "url": "https://__DOMAIN__PATH__/extensions/src/midnight-theme/dist/dist.css",
-            "version": "1.2.2"
-        },
-        {
-            "area": "theme",
-            "content_type": "SN|Theme",
-            "description": "The perfect theme for any time.",
-            "dock_icon": {
-                "background_color": "#2AA198",
-                "border_color": "#2AA198",
-                "foreground_color": "#ffffff",
-                "type": "circle"
-            },
-            "download_url": "https://github.com/standardnotes/solarized-dark-theme/archive/1.2.1.zip",
-            "identifier": "org.stndardnotes.solarized-dark-theme",
-            "latest_url": "https://__DOMAIN__PATH__/extensions/src/solarized-dark-theme.json",
-            "name": "Solarized Dark Theme",
-            "url": "https://__DOMAIN__PATH__/extensions/src/solarized-theme/dist/dist.css",
-            "version": "1.2.1"
-        },
-        {
-            "area": "theme",
-            "content_type": "SN|Theme",
-            "description": "Light on the eyes, heavy on the spirit.",
-            "dock_icon": {
-                "background_color": "#6e2b9e",
-                "border_color": "#6e2b9e",
-                "foreground_color": "#ffffff",
-                "type": "circle"
-            },
-            "download_url": "https://github.com/standardnotes/titanium-theme/archive/1.2.2.zip",
-            "identifier": "org.stndardnotes.titanium-theme",
-            "latest_url": "https://__DOMAIN__PATH__/extensions/src/titanium-theme.json",
-            "name": "Titanium Theme",
-            "url": "https://__DOMAIN__PATH__/extensions/src/titanium-theme/dist/dist.css",
-            "version": "1.2.2"
-        },
-        {
-            "area": "theme",
-            "content_type": "SN|Theme",
-            "description": "A smart theme that minimizes the tags and notes panels when they are not in use..",
-            "download_url": "https://github.com/standardnotes/dynamic-theme/archive/1.0.0.zip",
-            "identifier": "org.standardnotes.dynamic-theme",
-            "latest_url": "https://__DOMAIN__PATH__/extensions/src/dynamic-theme.json",
-            "layerable": true,
-            "name": "Dynamic Theme",
-            "no_mobile": true,
-            "url": "https://__DOMAIN__PATH__/extensions/src/dynamic-theme/dist/dist.css",
-            "version": "1.0.0"
-        },
-        {
-            "area": "theme",
-            "content_type": "SN|Theme",
-            "description": "A distraction-free writing environment for high levels of clarity and focus.",
-            "dock_icon": {
-                "source": "",
-                "type": "svg"
-            },
-            "download_url": "https://github.com/standardnotes/no-distraction-theme/archive/1.2.2.zip",
-            "identifier": "org.standardnotes.no-distraction",
-            "latest_url": "https://__DOMAIN__PATH__/extensions/src/no-distraction-theme.json",
-            "layerable": true,
-            "name": "No Distraction Theme",
-            "no_mobile": true,
-            "url": "https://__DOMAIN__PATH__/extensions/src/no-distraction-theme/dist/dist.css",
-            "version": "1.2.2"
-        },
-        {
-            "area": "editor-editor",
-            "content_type": "SN|Component",
-            "description": "A simple and peaceful rich editor that helps you write and think clearly. Features FileSafe integration, so you can embed your images, videos, and audio recordings directly inline.",
-            "download_url": "https://github.com/standardnotes/bold-editor/archive/1.2.2.zip",
-            "identifier": "org.standardnotes.bold-editor",
-            "latest_url": "https://__DOMAIN__PATH__/extensions/src/bold-editor.json",
-            "name": "Bold Editor",
-            "url": "https://__DOMAIN__PATH__/extensions/src/bold-editor/dist/index.html",
-            "version": "1.2.2"
-        },
-        {
-            "area": "editor-editor",
-            "content_type": "SN|Component",
-            "description": "Syntax highlighting and convenient keyboard shortcuts for over 120 programming languages. Ideal for code snippets and procedures.",
-            "download_url": "https://github.com/standardnotes/code-editor/archive/1.3.8.zip",
-            "identifier": "org.standardnotes.code-editor",
-            "latest_url": "https://__DOMAIN__PATH__/extensions/src/code-editor.json",
-            "name": "Code Editor",
-            "url": "https://__DOMAIN__PATH__/extensions/src/code-editor/index.html",
-            "version": "1.3.8"
-        },
-        {
-            "area": "editor-editor",
-            "content_type": "SN|Component",
-            "description": "A Markdown editor with dynamic split-pane preview.",
-            "download_url": "https://github.com/standardnotes/markdown-basic/archive/1.4.0.zip",
-            "identifier": "org.standardnotes.markdown-basic-editor",
-            "latest_url": "https://__DOMAIN__PATH__/extensions/src/markdown-basic.json",
-            "name": "Markdown Basic",
-            "url": "https://__DOMAIN__PATH__/extensions/src/markdown-basic/dist/index.html",
-            "version": "1.4.0"
-        },
-        {
-            "area": "editor-editor",
-            "content_type": "SN|Component",
-            "description": "A fully featured Markdown editor that supports live preview, a styling toolbar, and split pane support.",
-            "download_url": "https://github.com/standardnotes/markdown-pro/archive/1.3.14.zip",
-            "identifier": "org.standardnotes.markdown-pro",
-            "latest_url": "https://__DOMAIN__PATH__/extensions/src/markdown-pro.json",
-            "name": "Markdown Pro",
-            "url": "https://__DOMAIN__PATH__/extensions/src/markdown-pro/dist/index.html",
-            "version": "1.3.14"
-        },
-        {
-            "area": "editor-editor",
-            "content_type": "SN|Component",
-            "description": "A beautiful split-pane Markdown editor with synced-scroll, LaTeX support, and colorful syntax.",
-            "download_url": "https://github.com/standardnotes/math-editor/archive/1.3.4.zip",
-            "identifier": "org.standardnotes.math-editor",
-            "latest_url": "https://__DOMAIN__PATH__/extensions/src/math-editor.json",
-            "name": "Math Editor",
-            "url": "https://__DOMAIN__PATH__/extensions/src/math-editor/index.html",
-            "version": "1.3.4"
-        },
-        {
-            "area": "editor-editor",
-            "content_type": "SN|Component",
-            "description": "A minimal Markdown editor with inline style support.",
-            "download_url": "https://github.com/standardnotes/minimal-markdown-editor/archive/1.3.7.zip",
-            "identifier": "org.stndardnotes.minimal-markdown-editor",
-            "latest_url": "https://__DOMAIN__PATH__/extensions/src/minimal-markdown-editor.json",
-            "name": "Minimal Markdown Editor",
-            "url": "https://__DOMAIN__PATH__/extensions/src/minimal-markdown-editor/index.html",
-            "version": "1.3.7"
-        },
-        {
-            "area": "editor-editor",
-            "content_type": "SN|Component",
-            "description": "From highlighting to custom font sizes and colors, to tables and lists, this editor is perfect for crafting any document. (Converts your note to an HTML format.)",
-            "download_url": "https://github.com/standardnotes/plus-editor/archive/1.5.0.zip",
-            "identifier": "org.standardnotes.plus-editor",
-            "latest_url": "https://__DOMAIN__PATH__/extensions/src/plus-editor.json",
-            "name": "Plus Editor",
-            "url": "https://__DOMAIN__PATH__/extensions/src/plus-editor/dist/index.html",
-            "version": "1.5.0"
-        },
-        {
-            "area": "editor-editor",
-            "content_type": "SN|Component",
-            "description": "A great way to manage short-term and long-term to-do's. You can mark simple-tasks as completed, change their order, and edit the text naturally in place.",
-            "download_url": "https://github.com/standardnotes/simple-task-editor/archive/1.3.7.zip",
-            "identifier": "org.standardnotes.simple-task-editor",
-            "latest_url": "https://__DOMAIN__PATH__/extensions/src/simple-task-editor.json",
-            "name": "Task Editor",
-            "url": "https://__DOMAIN__PATH__/extensions/src/simple-task-editor/dist/index.html",
-            "version": "1.3.7"
-        },
-        {
-            "area": "editor-editor",
-            "content_type": "SN|Component",
-            "description": "Use Standard Notes on both desktop and mobile as your authenticator app. TokenVault handles your 2FA secrets so that you never lose them again, or have to start over when you get a new device.",
-            "download_url": "https://github.com/standardnotes/token-vault/archive/1.0.10.zip",
-            "identifier": "org.stndardnotes.token-vault",
-            "latest_url": "https://__DOMAIN__PATH__/extensions/src/token-vault.json",
-            "name": "Token Vault",
-            "url": "https://__DOMAIN__PATH__/extensions/src/token-vault/dist/index.html",
-            "version": "1.0.10"
-        },
-        {
-            "area": "editor-editor",
-            "content_type": "SN|Component",
-            "description": "A code editor with Vim key bindings.",
-            "download_url": "https://github.com/standardnotes/vim-editor/archive/1.3.7.zip",
-            "identifier": "org.stndardnotes.vim-editor",
-            "latest_url": "https://__DOMAIN__PATH__/extensions/src/vim-editor.json",
-            "name": "Vim Editor",
-            "url": "https://__DOMAIN__PATH__/extensions/src/vim-editor/index.html",
-            "version": "1.3.7"
-        },
-        {
-            "area": "editor-stack",
-            "content_type": "SN|Component",
-            "description": "Useful utility bar with information about the current note as well as actions like duplicate, copy, and save.",
-            "download_url": "https://github.com/standardnotes/action-bar/archive/1.3.2.zip",
-            "identifier": "org.stndardnotes.action-bar",
-            "latest_url": "https://__DOMAIN__PATH__/extensions/src/action-bar.json",
-            "name": "Action Bar",
-            "url": "https://__DOMAIN__PATH__/extensions/src/action-bar/index.html",
-            "version": "1.3.2"
-        },
-        {
-            "area": "tags-list",
-            "content_type": "SN|Component",
-            "description": "Create nested folders from your tags with easy drag and drop. Folders also supports Smart Tags, which allow you to build custom filters for viewing your notes.",
-            "download_url": "https://github.com/standardnotes/folders-component/archive/1.3.8.zip",
-            "identifier": "org.stndardnotes.folders-component",
-            "latest_url": "https://__DOMAIN__PATH__/extensions/src/folders-component.json",
-            "name": "Folders",
-            "url": "https://__DOMAIN__PATH__/extensions/src/folders-component/index.html",
-            "version": "1.3.8"
-        },
-        {
-            "area": "editor-stack",
-            "content_type": "SN|Component",
-            "description": "Push note changes to a public or private GitHub repository, with options for file extension and commit message.",
-            "download_url": "https://github.com/standardnotes/github-push/archive/1.2.4.zip",
-            "identifier": "org.stndardnotes.github-push",
-            "latest_url": "https://__DOMAIN__PATH__/extensions/src/github-push.json",
-            "name": "Github Push",
-            "url": "https://__DOMAIN__PATH__/extensions/src/github-push/index.html",
-            "version": "1.2.4"
-        },
-        {
-            "area": "modal",
-            "content_type": "SN|Component",
-            "description": "Set up 2FA to enable an extra layer of security on your private notes account.",
-            "download_url": "https://github.com/standardnotes/mfa-link/archive/1.2.5.zip",
-            "identifier": "org.stndardnotes.mfa-link",
-            "latest_url": "https://__DOMAIN__PATH__/extensions/src/mfa-link.json",
-            "name": "MFA-Link",
-            "url": "https://__DOMAIN__PATH__/extensions/src/mfa-link/dist/index.html",
-            "version": "1.2.5"
-        },
-        {
-            "area": "note-tags",
-            "content_type": "SN|Component",
-            "description": "Work more efficiently by quickly selecting from a live list of tags while you type. Supports keyboard shortcuts and folders.",
-            "download_url": "https://github.com/standardnotes/quick-tags/archive/1.3.2.zip",
-            "identifier": "org.stndardnotes.quick-tags",
-            "latest_url": "https://__DOMAIN__PATH__/extensions/src/quick-tags.json",
-            "name": "Quick Tags",
-            "url": "https://__DOMAIN__PATH__/extensions/src/quick-tags/index.html",
-            "version": "1.3.2"
-        }
-    ]
-}
diff --git a/sources/extra_files/extensions/src/action-bar.json b/sources/extra_files/extensions/src/action-bar.json
deleted file mode 100644
index e3507dd..0000000
--- a/sources/extra_files/extensions/src/action-bar.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
-  "identifier": "org.stndardnotes.action-bar",
-  "name": "Action Bar",
-  "content_type": "SN|Component",
-  "area": "editor-stack",
-  "version": "1.3.2",
-  "description": "Useful utility bar with information about the current note as well as actions like duplicate, copy, and save.",
-  "url": "https://__DOMAIN__PATH__/extensions/src/action-bar/index.html", 
-  "download_url": "https://github.com/standardnotes/action-bar/archive/1.3.2.zip",
-  "latest_url": "https://__DOMAIN__PATH__/extensions/src/action-bar.json"
-}
diff --git a/sources/extra_files/extensions/src/autobiography-theme.json b/sources/extra_files/extensions/src/autobiography-theme.json
deleted file mode 100644
index 3a354a0..0000000
--- a/sources/extra_files/extensions/src/autobiography-theme.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
-  "identifier": "org.stndardnotes.autobiography-theme",
-  "name": "Autobiography Theme",
-  "content_type": "SN|Theme",
-  "area": "theme",
-  "version": "1.0.0",
-  "description": "Autobiography",
-  "url": "https://__DOMAIN__PATH__/extensions/src/autobiography-theme/dist/dist.css", 
-  "download_url": "https://github.com/sn-extensions/autobiography-theme/archive/1.0.0.zip",
-  "latest_url": "https://__DOMAIN__PATH__/extensions/src/autobiography-theme.json",
-  "dock_icon":{
-    "type":"circle",
-    "background_color":"#9D7441",
-    "foreground_color":"#ECE4DB",
-    "border_color":"#9D7441"
-  }
-}
diff --git a/sources/extra_files/extensions/src/bold-editor.json b/sources/extra_files/extensions/src/bold-editor.json
deleted file mode 100644
index 094c047..0000000
--- a/sources/extra_files/extensions/src/bold-editor.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
-  "identifier": "org.standardnotes.bold-editor",
-  "name": "Bold Editor",
-  "content_type": "SN|Component",
-  "area": "editor-editor",
-  "version": "1.2.2",
-  "description": "A simple and peaceful rich editor that helps you write and think clearly. Features FileSafe integration, so you can embed your images, videos, and audio recordings directly inline.",
-  "url": "https://__DOMAIN__PATH__/extensions/src/bold-editor/dist/index.html", 
-  "download_url": "https://github.com/standardnotes/bold-editor/archive/1.2.2.zip",
-  "latest_url": "https://__DOMAIN__PATH__/extensions/src/bold-editor.json"
-}
diff --git a/sources/extra_files/extensions/src/code-editor.json b/sources/extra_files/extensions/src/code-editor.json
deleted file mode 100644
index cb5f1aa..0000000
--- a/sources/extra_files/extensions/src/code-editor.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
-  "identifier": "org.standardnotes.code-editor",
-  "name": "Code Editor",
-  "content_type": "SN|Component",
-  "area": "editor-editor",
-  "version": "1.3.8",
-  "description": "Syntax highlighting and convenient keyboard shortcuts for over 120 programming languages. Ideal for code snippets and procedures.",
-  "url": "https://__DOMAIN__PATH__/extensions/src/code-editor/index.html", 
-  "download_url": "https://github.com/standardnotes/code-editor/archive/1.3.8.zip",
-  "latest_url": "https://__DOMAIN__PATH__/extensions/src/code-editor.json"
-}
diff --git a/sources/extra_files/extensions/src/dynamic-theme.json b/sources/extra_files/extensions/src/dynamic-theme.json
deleted file mode 100644
index df2ded1..0000000
--- a/sources/extra_files/extensions/src/dynamic-theme.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
-  "identifier": "org.standardnotes.dynamic-theme",
-  "name": "Dynamic Theme",
-  "content_type": "SN|Theme",
-  "area": "theme",
-  "version": "1.0.0",
-  "description": "A smart theme that minimizes the tags and notes panels when they are not in use..",
-  "url": "https://__DOMAIN__PATH__/extensions/src/dynamic-theme/dist/dist.css", 
-  "download_url": "https://github.com/sn-extensions/dynamic-theme/archive/1.0.0.zip",
-  "latest_url": "https://__DOMAIN__PATH__/extensions/src/dynamic-theme.json",
-  "layerable":true,
-  "no_mobile":true
-}
diff --git a/sources/extra_files/extensions/src/focus-theme.json b/sources/extra_files/extensions/src/focus-theme.json
deleted file mode 100644
index 02fc461..0000000
--- a/sources/extra_files/extensions/src/focus-theme.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
-  "identifier": "org.stndardnotes.focus-theme",
-  "name": "Focus Theme",
-  "content_type": "SN|Theme",
-  "area": "theme",
-  "version": "1.2.3",
-  "description": "Light on the eyes, heavy on the spirit.",
-  "url": "https://__DOMAIN__PATH__/extensions/src/focus-theme/dist/dist.css", 
-  "download_url": "https://github.com/sn-extensions/focus-theme/archive/1.2.3.zip",
-  "latest_url": "https://__DOMAIN__PATH__/extensions/src/focus-theme.json",
-  "dock_icon":{
-    "type":"circle",
-    "background_color":"#a464c2",
-    "foreground_color":"#ffffff",
-    "border_color":"#a464c2"
-  }
-}
diff --git a/sources/extra_files/extensions/src/folders-component.json b/sources/extra_files/extensions/src/folders-component.json
deleted file mode 100644
index 4330ab8..0000000
--- a/sources/extra_files/extensions/src/folders-component.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
-  "identifier": "org.stndardnotes.folders-component",
-  "name": "Folders",
-  "content_type": "SN|Component",
-  "area": "tags-list",
-  "version": "1.3.8",
-  "description": "Create nested folders from your tags with easy drag and drop. Folders also supports Smart Tags, which allow you to build custom filters for viewing your notes.",
-  "url": "https://__DOMAIN__PATH__/extensions/src/folders-component/index.html", 
-  "download_url": "https://github.com/standardnotes/folders-component/archive/1.3.8.zip",
-  "latest_url": "https://__DOMAIN__PATH__/extensions/src/folders-component.json"
-}
diff --git a/sources/extra_files/extensions/src/futura-theme.json b/sources/extra_files/extensions/src/futura-theme.json
deleted file mode 100644
index b869315..0000000
--- a/sources/extra_files/extensions/src/futura-theme.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
-  "identifier": "org.standardnotes.futura-theme",
-  "name": "Futura Theme",
-  "content_type": "SN|Theme",
-  "area": "theme",
-  "version": "1.2.2",
-  "description": "Calm and relaxed. Take some time off.",
-  "url": "https://__DOMAIN__PATH__/extensions/src/futura-theme/dist/dist.css", 
-  "download_url": "https://github.com/sn-extensions/futura-theme/archive/1.2.2.zip",
-  "latest_url": "https://__DOMAIN__PATH__/extensions/src/futura-theme.json",
-  "dock_icon":{
-    "type":"circle",
-    "background_color":"#fca429",
-    "foreground_color":"#ffffff",
-    "border_color":"#fca429"
-  }
-}
diff --git a/sources/extra_files/extensions/src/github-push.json b/sources/extra_files/extensions/src/github-push.json
deleted file mode 100644
index 91f8969..0000000
--- a/sources/extra_files/extensions/src/github-push.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
-  "identifier": "org.stndardnotes.github-push",
-  "name": "Github Push",
-  "content_type": "SN|Component",
-  "area": "editor-stack",
-  "version": "1.2.4",
-  "description": "Push note changes to a public or private GitHub repository, with options for file extension and commit message.",
-  "url": "https://__DOMAIN__PATH__/extensions/src/github-push/index.html", 
-  "download_url": "https://github.com/sn-extensions/github-push/archive/1.2.4.zip",
-  "latest_url": "https://__DOMAIN__PATH__/extensions/src/github-push.json"
-}
diff --git a/sources/extra_files/extensions/src/markdown-basic.json b/sources/extra_files/extensions/src/markdown-basic.json
deleted file mode 100644
index 95f5974..0000000
--- a/sources/extra_files/extensions/src/markdown-basic.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
-  "identifier": "org.standardnotes.markdown-basic-editor",
-  "name": "Markdown Basic",
-  "content_type": "SN|Component",
-  "area": "editor-editor",
-  "version": "1.4.0",
-  "description": "A Markdown editor with dynamic split-pane preview.",
-  "url": "https://__DOMAIN__PATH__/extensions/src/markdown-basic/dist/index.html", 
-  "download_url": "https://github.com/standardnotes/markdown-basic/archive/1.4.0.zip",
-  "latest_url": "https://__DOMAIN__PATH__/extensions/src/markdown-basic.json"
-}
diff --git a/sources/extra_files/extensions/src/markdown-pro.json b/sources/extra_files/extensions/src/markdown-pro.json
deleted file mode 100644
index 8f06235..0000000
--- a/sources/extra_files/extensions/src/markdown-pro.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
-  "identifier": "org.standardnotes.markdown-pro",
-  "name": "Markdown Pro",
-  "content_type": "SN|Component",
-  "area": "editor-editor",
-  "version": "1.3.14",
-  "description": "A fully featured Markdown editor that supports live preview, a styling toolbar, and split pane support.",
-  "url": "https://__DOMAIN__PATH__/extensions/src/markdown-pro/dist/index.html", 
-  "download_url": "https://github.com/standardnotes/markdown-pro/archive/1.3.14.zip",
-  "latest_url": "https://__DOMAIN__PATH__/extensions/src/markdown-pro.json"
-}
diff --git a/sources/extra_files/extensions/src/math-editor.json b/sources/extra_files/extensions/src/math-editor.json
deleted file mode 100644
index cbc9884..0000000
--- a/sources/extra_files/extensions/src/math-editor.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
-  "identifier": "org.standardnotes.math-editor",
-  "name": "Math Editor",
-  "content_type": "SN|Component",
-  "area": "editor-editor",
-  "version": "1.3.4",
-  "description": "A beautiful split-pane Markdown editor with synced-scroll, LaTeX support, and colorful syntax.",
-  "url": "https://__DOMAIN__PATH__/extensions/src/math-editor/index.html", 
-  "download_url": "https://github.com/sn-extensions/math-editor/archive/1.3.4.zip",
-  "latest_url": "https://__DOMAIN__PATH__/extensions/src/math-editor.json"
-}
diff --git a/sources/extra_files/extensions/src/mfa-link.json b/sources/extra_files/extensions/src/mfa-link.json
deleted file mode 100644
index d3e625e..0000000
--- a/sources/extra_files/extensions/src/mfa-link.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
-  "identifier": "org.stndardnotes.mfa-link",
-  "name": "MFA-Link",
-  "content_type": "SN|Component",
-  "area": "editor-stack",
-  "version": "1.2.5",
-  "description": "Set up 2FA to enable an extra layer of security on your private notes account.",
-  "url": "https://__DOMAIN__PATH__/extensions/src/mfa-link/dist/index.html", 
-  "download_url": "https://github.com/sn-extensions/mfa-link/archive/1.2.5.zip",
-  "latest_url": "https://__DOMAIN__PATH__/extensions/src/mfa-link.json"
-}
diff --git a/sources/extra_files/extensions/src/midnight-theme.json b/sources/extra_files/extensions/src/midnight-theme.json
deleted file mode 100644
index 0fdc6a7..0000000
--- a/sources/extra_files/extensions/src/midnight-theme.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
-  "identifier": "org.standardnotes.midnight-theme",
-  "name": "Midnight Theme",
-  "content_type": "SN|Theme",
-  "area": "theme",
-  "version": "1.2.2",
-  "description": "Elegant utilitarianism.",
-  "url": "https://__DOMAIN__PATH__/extensions/src/midnight-theme/dist/dist.css", 
-  "download_url": "https://github.com/sn-extensions/midnight-theme/archive/1.2.2.zip",
-  "latest_url": "https://__DOMAIN__PATH__/extensions/src/midnight-theme.json",
-  "dock_icon":{
-    "type":"circle",
-    "background_color":"#086DD6",
-    "foreground_color":"#ffffff",
-    "border_color":"#086DD6"
-  }
-}
diff --git a/sources/extra_files/extensions/src/minimal-markdown-editor.json b/sources/extra_files/extensions/src/minimal-markdown-editor.json
deleted file mode 100644
index 9274f05..0000000
--- a/sources/extra_files/extensions/src/minimal-markdown-editor.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
-  "identifier": "org.stndardnotes.minimal-markdown-editor",
-  "name": "Minimal Markdown Editor",
-  "content_type": "SN|Component",
-  "area": "editor-editor",
-  "version": "1.3.7",
-  "description": "A minimal Markdown editor with inline style support.",
-  "url": "https://__DOMAIN__PATH__/extensions/src/minimal-markdown-editor/index.html", 
-  "download_url": "https://github.com/sn-extensions/minimal-markdown-editor/archive/1.3.7.zip",
-  "latest_url": "https://__DOMAIN__PATH__/extensions/src/minimal-markdown-editor.json"
-}
diff --git a/sources/extra_files/extensions/src/no-distraction-theme.json b/sources/extra_files/extensions/src/no-distraction-theme.json
deleted file mode 100644
index 3955ba4..0000000
--- a/sources/extra_files/extensions/src/no-distraction-theme.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
-  "identifier": "org.standardnotes.no-distraction",
-  "name": "No Distraction Theme",
-  "content_type": "SN|Theme",
-  "area": "theme",
-  "version": "1.2.2",
-  "description": "A distraction-free writing environment for high levels of clarity and focus.",
-  "url": "https://__DOMAIN__PATH__/extensions/src/no-distraction-theme/dist/dist.css", 
-  "download_url": "https://github.com/sn-extensions/no-distraction-theme/archive/1.2.2.zip",
-  "latest_url": "https://__DOMAIN__PATH__/extensions/src/no-distraction-theme.json",
-  "layerable":true,
-  "no_mobile":true,
-  "dock_icon":{
-    "type":"svg",
-    "source":""
-    }
-}
diff --git a/sources/extra_files/extensions/src/plus-editor.json b/sources/extra_files/extensions/src/plus-editor.json
deleted file mode 100644
index 8fbad62..0000000
--- a/sources/extra_files/extensions/src/plus-editor.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
-  "identifier": "org.standardnotes.plus-editor",
-  "name": "Plus Editor",
-  "content_type": "SN|Component",
-  "area": "editor-editor",
-  "version": "1.5.0",
-  "description": "From highlighting to custom font sizes and colors, to tables and lists, this editor is perfect for crafting any document. (Converts your note to an HTML format.)",
-  "url": "https://__DOMAIN__PATH__/extensions/src/plus-editor/dist/index.html", 
-  "download_url": "https://github.com/standardnotes/plus-editor/archive/1.5.0.zip",
-  "latest_url": "https://__DOMAIN__PATH__/extensions/src/plus-editor.json"
-}
diff --git a/sources/extra_files/extensions/src/quick-tags.json b/sources/extra_files/extensions/src/quick-tags.json
deleted file mode 100644
index bc2e1e5..0000000
--- a/sources/extra_files/extensions/src/quick-tags.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
-  "identifier": "org.stndardnotes.quick-tags",
-  "name": "Quick Tags",
-  "content_type": "SN|Component",
-  "area": "note-tags",
-  "version": "1.3.2",
-  "description": "Work more efficiently by quickly selecting from a live list of tags while you type. Supports keyboard shortcuts and folders.",
-  "url": "https://__DOMAIN__PATH__/extensions/src/quick-tags/index.html", 
-  "download_url": "https://github.com/standardnotes/quick-tags/archive/1.3.2.zip",
-  "latest_url": "https://__DOMAIN__PATH__/extensions/src/quick-tags.json"
-}
diff --git a/sources/extra_files/extensions/src/simple-task-editor.json b/sources/extra_files/extensions/src/simple-task-editor.json
deleted file mode 100644
index af54618..0000000
--- a/sources/extra_files/extensions/src/simple-task-editor.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
-  "identifier": "org.standardnotes.simple-task-editor",
-  "name": "Task Editor",
-  "content_type": "SN|Component",
-  "area": "editor-editor",
-  "version": "1.3.7",
-  "description": "A great way to manage short-term and long-term to-do's. You can mark simple-tasks as completed, change their order, and edit the text naturally in place.",
-  "url": "https://__DOMAIN__PATH__/extensions/src/simple-task-editor/dist/index.html", 
-  "download_url": "https://github.com/sn-extensions/simple-task-editor/archive/1.3.7.zip",
-  "latest_url": "https://__DOMAIN__PATH__/extensions/src/simple-task-editor.json"
-}
diff --git a/sources/extra_files/extensions/src/solarized-dark-theme.json b/sources/extra_files/extensions/src/solarized-dark-theme.json
deleted file mode 100644
index 5e3f43e..0000000
--- a/sources/extra_files/extensions/src/solarized-dark-theme.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
-  "identifier": "org.stndardnotes.solarized-dark-theme",
-  "name": "Solarized Dark Theme",
-  "content_type": "SN|Theme",
-  "area": "theme",
-  "version": "1.2.1",
-  "description": "The perfect theme for any time.",
-  "url": "https://__DOMAIN__PATH__/extensions/src/solarized-theme/dist/dist.css",
-  "download_url": "https://github.com/sn-extensions/solarized-dark-theme/archive/1.2.1.zip",
-  "latest_url": "https://__DOMAIN__PATH__/extensions/src/solarized-dark-theme.json",
-  "dock_icon":{
-    "type":"circle",
-    "background_color":"#2AA198",
-    "foreground_color":"#ffffff",
-    "border_color":"#2AA198"
-  }
-}
diff --git a/sources/extra_files/extensions/src/titanium-theme.json b/sources/extra_files/extensions/src/titanium-theme.json
deleted file mode 100644
index 0b20079..0000000
--- a/sources/extra_files/extensions/src/titanium-theme.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
-  "identifier": "org.stndardnotes.titanium-theme",
-  "name": "Titanium Theme",
-  "content_type": "SN|Theme",
-  "area": "theme",
-  "version": "1.2.2",
-  "description": "Light on the eyes, heavy on the spirit.",
-  "url": "https://__DOMAIN__PATH__/extensions/src/titanium-theme/dist/dist.css", 
-  "download_url": "https://github.com/sn-extensions/titanium-theme/archive/1.2.2.zip",
-  "latest_url": "https://__DOMAIN__PATH__/extensions/src/titanium-theme.json",
-  "dock_icon":{
-    "type":"circle",
-    "background_color":"#6e2b9e",
-    "foreground_color":"#ffffff",
-    "border_color":"#6e2b9e"
-  }
-}
diff --git a/sources/extra_files/extensions/src/token-vault.json b/sources/extra_files/extensions/src/token-vault.json
deleted file mode 100644
index cf7ee0b..0000000
--- a/sources/extra_files/extensions/src/token-vault.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
-  "identifier": "org.stndardnotes.token-vault",
-  "name": "Token Vault",
-  "content_type": "SN|Component",
-  "area": "editor-editor",
-  "version": "1.0.10",
-  "description": "Use Standard Notes on both desktop and mobile as your authenticator app. TokenVault handles your 2FA secrets so that you never lose them again, or have to start over when you get a new device.",
-  "url": "https://__DOMAIN__PATH__/extensions/src/token-vault/dist/index.html", 
-  "download_url": "https://github.com/sn-extensions/token-vault/archive/1.0.10.zip",
-  "latest_url": "https://__DOMAIN__PATH__/extensions/src/token-vault.json"
-}
diff --git a/sources/extra_files/extensions/src/vim-editor.json b/sources/extra_files/extensions/src/vim-editor.json
deleted file mode 100644
index cfdcce7..0000000
--- a/sources/extra_files/extensions/src/vim-editor.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
-  "identifier": "org.stndardnotes.vim-editor",
-  "name": "Vim Editor",
-  "content_type": "SN|Component",
-  "area": "editor-editor",
-  "version": "1.3.7",
-  "description": "A code editor with Vim key bindings.",
-  "url": "https://__DOMAIN__PATH__/extensions/src/vim-editor/index.html", 
-  "download_url": "https://github.com/sn-extensions/vim-editor/archive/1.3.7.zip",
-  "latest_url": "https://__DOMAIN__PATH__/extensions/src/vim-editor.json"
-}
diff --git a/sources/extra_files/help/index.html b/sources/extra_files/help/index.html
deleted file mode 100644
index fe55864..0000000
--- a/sources/extra_files/help/index.html
+++ /dev/null
@@ -1,82 +0,0 @@
-
-
-	
-		
-		 Standard Notes - Syncing Server 
-		
-	
-	
-		

Standard Notes - Syncing Server

-

Add https://__DOMAIN____PATH__/ as Sync Server Domain in the Advanced Options to use this Syncing Server.

-
-

- You should know: -

-
    -
  1. - Your notes are fully encrypted on your device before they're ever sent to our servers.
    - This means even we can't read the contents of your notes. -
  2. -
  3. - Standard Notes is available on all your devices. - -
  4. -
-

- Install instructions for Extensions: -

-
    -
  1. - Open the Standard Notes web or Desktop app -
  2. -
  3. - Press Extensions in the button left corner -
  4. -
  5. - Enter https://__DOMAIN____PATH__/extensions/repo.json in the textbox. -
  6. -
  7. - Press the Submit Code button. -
  8. -
  9. - Now you can see Editors, Themes and Components which you can install -
  10. -
-
- - - From d1b13ca130f39c37705228bdd0c29b241cbc4d02 Mon Sep 17 00:00:00 2001 From: Fabian Wilkens Date: Thu, 4 Aug 2022 17:28:39 +0200 Subject: [PATCH 02/21] Update: update to new upstream-source --- check_process | 12 +- conf/app.src | 5 + conf/app_api-gateway.src | 5 - conf/app_auth.src | 5 - conf/app_syncing-server-js.src | 5 - conf/env_api-gateway.env.sample | 5 +- conf/env_auth-worker.env.sample | 6 +- conf/env_auth.env.sample | 6 +- conf/env_files.env.sample | 37 ++ ...e => env_syncing-server-worker.env.sample} | 2 +- ...v.sample => env_syncing-server.env.sample} | 2 +- conf/nginx.conf | 45 +-- conf/systemd_api-gateway.service | 6 +- conf/systemd_auth-worker.service | 4 +- conf/systemd_auth.service | 4 +- conf/systemd_files.service | 47 +++ ... => systemd_syncing-server-worker.service} | 10 +- ...service => systemd_syncing-server.service} | 8 +- manifest.json | 4 +- scripts/_common.sh | 6 +- scripts/backup | 16 +- scripts/change_url | 8 +- scripts/install | 139 ++++--- scripts/remove | 55 ++- scripts/restore | 121 +++--- scripts/upgrade | 356 +++++++----------- scripts/ynh_install_ruby__2 | 305 --------------- 27 files changed, 479 insertions(+), 745 deletions(-) create mode 100644 conf/app.src delete mode 100644 conf/app_api-gateway.src delete mode 100644 conf/app_auth.src delete mode 100644 conf/app_syncing-server-js.src create mode 100644 conf/env_files.env.sample rename conf/{env_syncing-server-js-worker.env.sample => env_syncing-server-worker.env.sample} (96%) rename conf/{env_syncing-server-js.env.sample => env_syncing-server.env.sample} (96%) create mode 100644 conf/systemd_files.service rename conf/{systemd_syncing-server-js-worker.service => systemd_syncing-server-worker.service} (84%) rename conf/{systemd_syncing-server-js.service => systemd_syncing-server.service} (87%) delete mode 100644 scripts/ynh_install_ruby__2 diff --git a/check_process b/check_process index 2fab21b..c6907c5 100644 --- a/check_process +++ b/check_process @@ -15,10 +15,8 @@ setup_private=0 setup_public=1 upgrade=1 - # 2022.01.17~yhn1 - upgrade=1 from_commit=2b94368d53d4e90e698f9ceb2ca5e47b07794e15 - # 3.22.8~yhn2 ( Old Server version based on Ruby ) - # upgrade=1 from_commit=b0c7e9e6f16d286ec74fa3c1b9cdf8492f4dcb9b + # 2022.06.20~yhn1 + upgrade=1 from_commit=2a0f413937f8a3d4bd067a5890480bce1222ec5a backup_restore=1 multi_instance=1 port_already_use=0 @@ -27,8 +25,6 @@ Email= Notification= ;;; Upgrade options - ; commit=2b94368d53d4e90e698f9ceb2ca5e47b07794e15 - name=2022.01.17~ynh1 - #; commit=b0c7e9e6f16d286ec74fa3c1b9cdf8492f4dcb9b - # name=3.22.8~ynh2 + ; commit=2a0f413937f8a3d4bd067a5890480bce1222ec5a + name=2022.06.20~ynh1 diff --git a/conf/app.src b/conf/app.src new file mode 100644 index 0000000..3e4906c --- /dev/null +++ b/conf/app.src @@ -0,0 +1,5 @@ +SOURCE_URL=https://github.com/standardnotes/server/archive/033bc25d8f55e22ba168bad2d0c44fa1ac9a86e4.tar.gz +SOURCE_SUM=1f64d26630932d19985df8989f51c909912066b1dc4539b22f952f5e81f978f2 +SOURCE_SUM_PRG=sha256sum +SOURCE_FORMAT=tar.gz +SOURCE_IN_SUBDIR=true diff --git a/conf/app_api-gateway.src b/conf/app_api-gateway.src deleted file mode 100644 index 89fce46..0000000 --- a/conf/app_api-gateway.src +++ /dev/null @@ -1,5 +0,0 @@ -SOURCE_URL=https://github.com/standardnotes/api-gateway/archive/1.40.1.tar.gz -SOURCE_SUM=8060b89d51532c850730467223f83cb90fc4d53135d7b8b0974045c179dfa1f6 -SOURCE_SUM_PRG=sha256sum -SOURCE_FORMAT=tar.gz -SOURCE_IN_SUBDIR=true diff --git a/conf/app_auth.src b/conf/app_auth.src deleted file mode 100644 index 0fdc48f..0000000 --- a/conf/app_auth.src +++ /dev/null @@ -1,5 +0,0 @@ -SOURCE_URL=https://github.com/standardnotes/auth/archive/1.46.2.tar.gz -SOURCE_SUM=e5c6b9fc767cd94f8326ba7012278f7520b0d8aab283484ef4f3e776a3d995f6 -SOURCE_SUM_PRG=sha256sum -SOURCE_FORMAT=tar.gz -SOURCE_IN_SUBDIR=true diff --git a/conf/app_syncing-server-js.src b/conf/app_syncing-server-js.src deleted file mode 100644 index 2fe6bf8..0000000 --- a/conf/app_syncing-server-js.src +++ /dev/null @@ -1,5 +0,0 @@ -SOURCE_URL=https://github.com/standardnotes/syncing-server-js/archive/1.54.1.tar.gz -SOURCE_SUM=29141efba82b8085907745827a9606e2dc6f0f192a3c1c45535f3fa88d9aa568 -SOURCE_SUM_PRG=sha256sum -SOURCE_FORMAT=tar.gz -SOURCE_IN_SUBDIR=true diff --git a/conf/env_api-gateway.env.sample b/conf/env_api-gateway.env.sample index 2b4d982..4593250 100644 --- a/conf/env_api-gateway.env.sample +++ b/conf/env_api-gateway.env.sample @@ -6,10 +6,10 @@ VERSION="production" PORT="__PORT_API_GATEWAY__" -SYNCING_SERVER_JS_URL="http://localhost:__PORT_SYNCING_SERVER_JS__" +SYNCING_SERVER_JS_URL="http://localhost:__PORT_SYNCING_SERVER__" AUTH_SERVER_URL="http://localhost:__PORT_AUTH__" #PAYMENTS_SERVER_URL=http://payments:3000 -#FILES_SERVER_URL=http://files:3000 +FILES_SERVER_URL=http://__DOMAIN____PATH__/files/ HTTP_CALL_TIMEOUT=60000 @@ -24,7 +24,6 @@ NEW_RELIC_DISTRIBUTED_TRACING_ENABLED=false NEW_RELIC_LOG_ENABLED=false NEW_RELIC_LOG_LEVEL=info - REDIS_URL=redis://localhost:6379/__REDIS_DB__ REDIS_EVENTS_CHANNEL=events diff --git a/conf/env_auth-worker.env.sample b/conf/env_auth-worker.env.sample index df577f5..dfd11f1 100644 --- a/conf/env_auth-worker.env.sample +++ b/conf/env_auth-worker.env.sample @@ -43,7 +43,7 @@ SNS_AWS_REGION= SQS_QUEUE_URL= SQS_AWS_REGION= -SYNCING_SERVER_URL=http://localhost:__PORT_SYNCING_SERVER_JS__ +SYNCING_SERVER_URL=http://localhost:__PORT_SYNCING_SERVER__ REDIS_EVENTS_CHANNEL=events @@ -65,8 +65,8 @@ USER_SERVER_AUTH_KEY= SENTRY_DSN= SENTRY_ENVIRONMENT= -VALET_TOKEN_SECRET= -VALET_TOKEN_TTL= +VALET_TOKEN_SECRET=__VALET_TOKEN_SECRET__ +VALET_TOKEN_TTL=7200 # (Optional) Analytics ANALYTICS_ENABLED=false diff --git a/conf/env_auth.env.sample b/conf/env_auth.env.sample index 83406ef..9cf3633 100644 --- a/conf/env_auth.env.sample +++ b/conf/env_auth.env.sample @@ -43,7 +43,7 @@ SNS_AWS_REGION= SQS_QUEUE_URL= SQS_AWS_REGION= -SYNCING_SERVER_URL=http://localhost:__PORT_SYNCING_SERVER_JS__ +SYNCING_SERVER_URL=http://localhost:__PORT_SYNCING_SERVER__ REDIS_EVENTS_CHANNEL=events @@ -66,8 +66,8 @@ USER_SERVER_AUTH_KEY= SENTRY_DSN= SENTRY_ENVIRONMENT= -VALET_TOKEN_SECRET= -VALET_TOKEN_TTL= +VALET_TOKEN_SECRET=__VALET_TOKEN_SECRET__ +VALET_TOKEN_TTL=7200 # (Optional) Analytics ANALYTICS_ENABLED=false diff --git a/conf/env_files.env.sample b/conf/env_files.env.sample new file mode 100644 index 0000000..7675adb --- /dev/null +++ b/conf/env_files.env.sample @@ -0,0 +1,37 @@ +PATH=/opt/node_n/n/versions/node/16/bin:/opt/node_n/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin + +LOG_LEVEL="debug" +NODE_ENV="production" +VERSION="production" + +PORT=__PORT_FILES__ + +REDIS_URL=redis://localhost:6379/0 +REDIS_EVENTS_CHANNEL=events + +VALET_TOKEN_SECRET=__VALET_TOKEN_SECRET__ + +MAX_CHUNK_BYTES=1000000 + +# (Optional) New Relic Setup +NEW_RELIC_ENABLED=false +NEW_RELIC_APP_NAME=Syncing Server JS +NEW_RELIC_LICENSE_KEY= +NEW_RELIC_NO_CONFIG_FILE=true +NEW_RELIC_DISTRIBUTED_TRACING_ENABLED=false +NEW_RELIC_LOG_ENABLED=false +NEW_RELIC_LOG_LEVEL=info + +# (Optional) AWS Setup +AWS_ACCESS_KEY_ID= +AWS_SECRET_ACCESS_KEY= +S3_BUCKET_NAME= +S3_AWS_REGION= +S3_ENDPOINT= +SNS_TOPIC_ARN= +SNS_AWS_REGION= +SQS_QUEUE_URL= +SQS_AWS_REGION= + +# (Optional) File upload path (relative to root directory) +FILE_UPLOAD_PATH=/home/yunohost.app/__APP__/uploads/ diff --git a/conf/env_syncing-server-js-worker.env.sample b/conf/env_syncing-server-worker.env.sample similarity index 96% rename from conf/env_syncing-server-js-worker.env.sample rename to conf/env_syncing-server-worker.env.sample index 92527df..3f235d1 100644 --- a/conf/env_syncing-server-js-worker.env.sample +++ b/conf/env_syncing-server-worker.env.sample @@ -6,7 +6,7 @@ VERSION="production" AUTH_JWT_SECRET=__AUTH_JWT_SECRET__ -PORT=__PORT_SYNCING_SERVER_JS_WORKER__ +PORT=__PORT_SYNCING_SERVER_WORKER__ DB_HOST=localhost DB_REPLICA_HOST=localhost diff --git a/conf/env_syncing-server-js.env.sample b/conf/env_syncing-server.env.sample similarity index 96% rename from conf/env_syncing-server-js.env.sample rename to conf/env_syncing-server.env.sample index 3df2c23..a978b10 100644 --- a/conf/env_syncing-server-js.env.sample +++ b/conf/env_syncing-server.env.sample @@ -6,7 +6,7 @@ VERSION="production" AUTH_JWT_SECRET=__AUTH_JWT_SECRET__ -PORT=__PORT_SYNCING_SERVER_JS__ +PORT=__PORT_SYNCING_SERVER__ DB_HOST=localhost DB_REPLICA_HOST=localhost diff --git a/conf/nginx.conf b/conf/nginx.conf index c7ab8fc..b9a1dd6 100644 --- a/conf/nginx.conf +++ b/conf/nginx.conf @@ -13,41 +13,12 @@ location = __PATH__/ { return 200 "This is where Standard Notes - Syncing Server is installed."; } -location = __PATH__/help { - return 301 https://$server_name__PATH__/help/; -} - -location __PATH__/help/ { - alias __FINAL_PATH_WWW__/help/; - - # Include SSOWAT user panel. - include conf.d/yunohost_panel.conf.inc; -} - -location = __PATH__/extensions { - return 301 https://$server_name__PATH__/extensions/repo.json; -} - -location = __PATH__/extensions/ { - - return 301 https://$server_name__PATH__/extensions/repo.json; -} - -location __PATH__/extensions/ { - alias __FINAL_PATH_EXTENSIONS__/; - - if ($request_method = 'OPTIONS') { - more_set_headers 'Access-Control-Allow-Origin: $http_origin'; - more_set_headers 'Access-Control-Allow-Methods: GET, POST, OPTIONS, PUT, DELETE, HEAD'; - more_set_headers 'Access-Control-Allow-Credentials: true'; - more_set_headers 'Access-Control-Allow-Headers: Origin,Content-Type,Accept,Authorization'; - return 204; - } - if ($request_method = 'GET') { - more_set_headers 'Access-Control-Allow-Origin: $http_origin'; - more_set_headers 'Access-Control-Allow-Methods: GET, POST, OPTIONS, PUT, DELETE, HEAD'; - more_set_headers 'Access-Control-Allow-Credentials: true'; - more_set_headers 'Access-Control-Allow-Headers: Origin,Content-Type,Accept,Authorization'; - } - more_set_headers "Content-Security-Policy: frame-ancestors 'self' * "; +location __PATH__/files/ { + proxy_pass http://127.0.0.1:__PORT_FILES__/; + proxy_http_version 1.1; + proxy_set_header Host $http_host; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection $connection_upgrade; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_buffering off; } diff --git a/conf/systemd_api-gateway.service b/conf/systemd_api-gateway.service index 0e2125b..3e91482 100644 --- a/conf/systemd_api-gateway.service +++ b/conf/systemd_api-gateway.service @@ -1,16 +1,16 @@ [Unit] Description=StandardNotes api-gateway After=network.target -After=__APP__-syncing-server-js.service +After=__APP__-syncing-server.service After=__APP__-auth.service [Service] Type=simple User=__APP__ Group=__APP__ -WorkingDirectory=__FINALPATH__/live/api-gateway +WorkingDirectory=__FINALPATH__/live/ EnvironmentFile=__FINALPATH__/live/api-gateway.env -ExecStart=/usr/bin/yarn start +ExecStart=/usr/bin/yarn start:api-gateway StandardOutput=append:/var/log/__APP__/api-gateway.log StandardError=inherit Restart=always diff --git a/conf/systemd_auth-worker.service b/conf/systemd_auth-worker.service index ce30ade..7b93ec7 100644 --- a/conf/systemd_auth-worker.service +++ b/conf/systemd_auth-worker.service @@ -9,9 +9,9 @@ After=__APP__-auth.service Type=simple User=__APP__ Group=__APP__ -WorkingDirectory=__FINALPATH__/live/auth +WorkingDirectory=__FINALPATH__/live EnvironmentFile=__FINALPATH__/live/auth-worker.env -ExecStart=/usr/bin/yarn worker +ExecStart=/usr/bin/yarn start:auth-worker StandardOutput=append:/var/log/__APP__/auth-worker.log StandardError=inherit Restart=always diff --git a/conf/systemd_auth.service b/conf/systemd_auth.service index 73623d2..fc25c47 100644 --- a/conf/systemd_auth.service +++ b/conf/systemd_auth.service @@ -9,9 +9,9 @@ After=__APP__-syncing-server-js.service Type=simple User=__APP__ Group=__APP__ -WorkingDirectory=__FINALPATH__/live/auth +WorkingDirectory=__FINALPATH__/live EnvironmentFile=__FINALPATH__/live/auth.env -ExecStart=/usr/bin/yarn start +ExecStart=/usr/bin/yarn start:auth StandardOutput=append:/var/log/__APP__/auth.log StandardError=inherit Restart=always diff --git a/conf/systemd_files.service b/conf/systemd_files.service new file mode 100644 index 0000000..d93ef79 --- /dev/null +++ b/conf/systemd_files.service @@ -0,0 +1,47 @@ +[Unit] +Description=StandardNotes files +After=network.target +After=mysql.service +After=redis.service +After=__APP__-syncing-server.service + +[Service] +Type=simple +User=__APP__ +Group=__APP__ +WorkingDirectory=__FINALPATH__/live +EnvironmentFile=__FINALPATH__/live/files.env +ExecStart=/usr/bin/yarn start:files +StandardOutput=append:/var/log/__APP__/files.log +StandardError=inherit +Restart=always + +# Details for these options: https://www.freedesktop.org/software/systemd/man/systemd.exec.html +NoNewPrivileges=yes +PrivateTmp=yes +PrivateDevices=yes +RestrictAddressFamilies=AF_UNIX AF_INET AF_INET6 +RestrictNamespaces=yes +RestrictRealtime=yes +DevicePolicy=closed +ProtectSystem=full +ProtectControlGroups=yes +ProtectKernelModules=yes +ProtectKernelTunables=yes +LockPersonality=yes +SystemCallFilter=~@clock @debug @module @mount @obsolete @reboot @setuid @swap + +# Denying access to capabilities that should not be relevant for webapps +# Doc: https://man7.org/linux/man-pages/man7/capabilities.7.html +CapabilityBoundingSet=~CAP_RAWIO CAP_MKNOD +CapabilityBoundingSet=~CAP_AUDIT_CONTROL CAP_AUDIT_READ CAP_AUDIT_WRITE +CapabilityBoundingSet=~CAP_SYS_BOOT CAP_SYS_TIME CAP_SYS_MODULE CAP_SYS_PACCT +CapabilityBoundingSet=~CAP_LEASE CAP_LINUX_IMMUTABLE CAP_IPC_LOCK +CapabilityBoundingSet=~CAP_BLOCK_SUSPEND CAP_WAKE_ALARM +CapabilityBoundingSet=~CAP_SYS_TTY_CONFIG +CapabilityBoundingSet=~CAP_MAC_ADMIN CAP_MAC_OVERRIDE +CapabilityBoundingSet=~CAP_NET_ADMIN CAP_NET_BROADCAST CAP_NET_RAW +CapabilityBoundingSet=~CAP_SYS_ADMIN CAP_SYS_PTRACE CAP_SYSLOG + +[Install] +WantedBy=default.target diff --git a/conf/systemd_syncing-server-js-worker.service b/conf/systemd_syncing-server-worker.service similarity index 84% rename from conf/systemd_syncing-server-js-worker.service rename to conf/systemd_syncing-server-worker.service index 8209f96..706f016 100644 --- a/conf/systemd_syncing-server-js-worker.service +++ b/conf/systemd_syncing-server-worker.service @@ -3,16 +3,16 @@ Description=StandardNotes syncing server worker After=network.target After=mysql.service After=redis.service -After=__APP__-syncing-server-js.service +After=__APP__-syncing-server.service [Service] Type=simple User=__APP__ Group=__APP__ -WorkingDirectory=__FINALPATH__/live/syncing-server-js -EnvironmentFile=__FINALPATH__/live/syncing-server-js-worker.env -ExecStart=/usr/bin/yarn worker -StandardOutput=append:/var/log/__APP__/syncing-server-js-worker.log +WorkingDirectory=__FINALPATH__/live +EnvironmentFile=__FINALPATH__/live/syncing-server-worker.env +ExecStart=/usr/bin/yarn start:syncing-server-worker +StandardOutput=append:/var/log/__APP__/syncing-server-worker.log StandardError=inherit Restart=always diff --git a/conf/systemd_syncing-server-js.service b/conf/systemd_syncing-server.service similarity index 87% rename from conf/systemd_syncing-server-js.service rename to conf/systemd_syncing-server.service index ccab225..cffd348 100644 --- a/conf/systemd_syncing-server-js.service +++ b/conf/systemd_syncing-server.service @@ -8,10 +8,10 @@ After=redis.service Type=simple User=__APP__ Group=__APP__ -WorkingDirectory=__FINALPATH__/live/syncing-server-js -EnvironmentFile=__FINALPATH__/live/syncing-server-js.env -ExecStart=/usr/bin/yarn start -StandardOutput=append:/var/log/__APP__/syncing-server-js.log +WorkingDirectory=__FINALPATH__/live +EnvironmentFile=__FINALPATH__/live/syncing-server.env +ExecStart=/usr/bin/yarn start:syncing-server +StandardOutput=append:/var/log/__APP__/syncing-server.log StandardError=inherit Restart=always diff --git a/manifest.json b/manifest.json index 612bba9..3279f1e 100644 --- a/manifest.json +++ b/manifest.json @@ -5,7 +5,7 @@ "description": { "en": "The Standard Notes syncing server. An end-to-end encrypted note-taking app." }, - "version": "2022.06.20~ynh1", + "version": "2022.07.29~ynh1", "url": "https://github.com/standardnotes/standalone", "upstream": { "license": "AGPL-3.0-or-later", @@ -38,7 +38,7 @@ "name": "path", "type": "path", "example": "/example", - "default": "/example" + "default": "/" } ] } diff --git a/scripts/_common.sh b/scripts/_common.sh index f02be43..1afc3a9 100644 --- a/scripts/_common.sh +++ b/scripts/_common.sh @@ -3,12 +3,12 @@ #================================================= # COMMON VARIABLES #================================================= -RUBY_VERSION="2.7.3" NODEJS_VERSION="16" -syncing_server_js_version="1.54.1" -auth_version="1.46.2" api_gateway_version="1.40.1" +auth_version="1.46.2" +files_version="0" +syncing_server_version="1.54.1" swap_needed=2048 node_max_old_space_size=6144 diff --git a/scripts/backup b/scripts/backup index 8769460..ab86be9 100755 --- a/scripts/backup +++ b/scripts/backup @@ -31,6 +31,7 @@ app=$YNH_APP_INSTANCE_NAME final_path=$(ynh_app_setting_get --app=$app --key=final_path) domain=$(ynh_app_setting_get --app=$app --key=domain) db_name=$(ynh_app_setting_get --app=$app --key=db_name) +datadir=$(ynh_app_setting_get --app=$app --key=datadir) #================================================= # BACKUP THE APP MAIN DIR @@ -39,6 +40,12 @@ ynh_print_info "Backing up the main app directory..." ynh_backup --src_path="$final_path" +#================================================= +# BACKUP THE DATA DIR +#================================================= + +ynh_backup --src_path="$datadir" --is_big + #================================================= # BACKUP THE NGINX CONFIGURATION #================================================= @@ -75,11 +82,12 @@ ynh_backup --src_path="/etc/logrotate.d/$app" #================================================= ynh_print_info "Backing up systemd configuration..." -ynh_backup --src_path="/etc/systemd/system/$app-syncing-server-js.service" -ynh_backup --src_path="/etc/systemd/system/$app-syncing-server-js-worker.service" -ynh_backup --src_path="/etc/systemd/system/$app-auth.service" -ynh_backup --src_path="/etc/systemd/system/$app-auth-worker.service" ynh_backup --src_path="/etc/systemd/system/$app-api-gateway.service" +ynh_backup --src_path="/etc/systemd/system/$app-auth.service" +ynh_backup --src_path="/etc/systemd/system/$app-auth.service" +ynh_backup --src_path="/etc/systemd/system/$app-files.service" +ynh_backup --src_path="/etc/systemd/system/$app-syncing-server.service" +ynh_backup --src_path="/etc/systemd/system/$app-syncing-server-worker.service" #================================================= # END OF SCRIPT diff --git a/scripts/change_url b/scripts/change_url index 8056790..422835d 100644 --- a/scripts/change_url +++ b/scripts/change_url @@ -28,11 +28,13 @@ ynh_script_progression --message="Loading installation settings..." --weight=1 # Needed for helper "ynh_add_nginx_config" final_path=$(ynh_app_setting_get --app=$app --key=final_path) -port_syncing_server_js=$(ynh_app_setting_get --app=$app --key=port_syncing_server_js) -port_syncing_server_js_worker=$(ynh_app_setting_get --app=$app --key=port_syncing_server_js_worker) + +port_api_gateway=$(ynh_app_setting_get --app=$app --key=port_api_gateway) port_auth=$(ynh_app_setting_get --app=$app --key=port_auth) port_auth_worker=$(ynh_app_setting_get --app=$app --key=port_auth_worker) -port_api_gateway=$(ynh_app_setting_get --app=$app --key=port_api_gateway) +port_files=$(ynh_app_setting_get --app=$app --key=port_files) +port_syncing_server=$(ynh_app_setting_get --app=$app --key=port_syncing_server) +port_syncing_server_worker=$(ynh_app_setting_get --app=$app --key=port_syncing_server_worker) #================================================= # BACKUP BEFORE UPGRADE THEN ACTIVE TRAP diff --git a/scripts/install b/scripts/install index 519f3a7..d32d295 100755 --- a/scripts/install +++ b/scripts/install @@ -8,7 +8,6 @@ source _common.sh source ynh_add_swap -source ynh_install_ruby__2 source ynh_redis source /usr/share/yunohost/helpers @@ -53,10 +52,11 @@ ynh_app_setting_set --app=$app --key=redis_db --value="$redis_db" #================================================= # STORE SETTINGS #================================================= -ynh_app_setting_set --app=$app --key=syncing_server_js_version --value=$syncing_server_js_version -ynh_app_setting_set --app=$app --key=auth_version --value=$auth_version + ynh_app_setting_set --app=$app --key=api_gateway_version --value=$api_gateway_version -ynh_app_setting_set --app=$app --key=standalone --value="true" +ynh_app_setting_set --app=$app --key=auth_version --value=$auth_version +ynh_app_setting_set --app=$app --key=files_version --value=$files_version +ynh_app_setting_set --app=$app --key=syncing_server_version --value=$syncing_server_version #================================================= # STANDARD MODIFICATIONS @@ -66,16 +66,19 @@ ynh_app_setting_set --app=$app --key=standalone --value="true" ynh_script_progression --message="Finding an available port..." --weight=1 # Find an available port -port_syncing_server_js=$(ynh_find_port --port=3000) -port_syncing_server_js_worker=$(ynh_find_port --port=$((port_syncing_server_js+1))) -port_auth=$(ynh_find_port --port=$((port_syncing_server_js_worker+1))) +port_api_gateway=$(ynh_find_port --port=3000) +port_auth=$(ynh_find_port --port=$((port_api_gateway+1))) port_auth_worker=$(ynh_find_port --port=$((port_auth+1))) -port_api_gateway=$(ynh_find_port --port=$((port_auth_worker+1))) -ynh_app_setting_set --app=$app --key=port_syncing_server_js --value=$port_syncing_server_js -ynh_app_setting_set --app=$app --key=port_syncing_server_js_worker --value=$port_syncing_server_js_worker +port_files=$(ynh_find_port --port=$((port_auth_worker+1))) +port_syncing_server=$(ynh_find_port --port=$((port_files+1))) +port_syncing_server_worker=$(ynh_find_port --port=$((port_syncing_server+1))) + +ynh_app_setting_set --app=$app --key=port_api_gateway --value=$port_api_gateway ynh_app_setting_set --app=$app --key=port_auth --value=$port_auth ynh_app_setting_set --app=$app --key=port_auth_worker --value=$port_auth_worker -ynh_app_setting_set --app=$app --key=port_api_gateway --value=$port_api_gateway +ynh_app_setting_set --app=$app --key=port_files --value=$port_files +ynh_app_setting_set --app=$app --key=port_syncing_server --value=$port_syncing_server +ynh_app_setting_set --app=$app --key=port_syncing_server_worker --value=$port_syncing_server_worker #================================================= # INSTALL DEPENDENCIES @@ -111,9 +114,7 @@ ynh_script_progression --message="Setting up source files..." --weight=2 # Download, check integrity, uncompress and patch the source from app.src mkdir -p "$final_path/live" -ynh_setup_source --source_id=app_syncing-server-js --dest_dir="$final_path/live/syncing-server-js" -ynh_setup_source --source_id=app_auth --dest_dir="$final_path/live/auth" -ynh_setup_source --source_id=app_api-gateway --dest_dir="$final_path/live/api-gateway" +ynh_setup_source --source_id=app --dest_dir="$final_path/live" chmod 750 "$final_path" chmod -R o-rwx "$final_path" @@ -130,6 +131,20 @@ ynh_add_nginx_config #================================================= # SPECIFIC SETUP #================================================= +#================================================= +# CREATE DATA DIRECTORY +#================================================= +ynh_script_progression --message="Creating a data directory..." --weight=1 + +datadir=/home/yunohost.app/$app +ynh_app_setting_set --app=$app --key=datadir --value=$datadir + +mkdir -p $datadir/uploads + +chmod -R 750 "$datadir" +chmod -R o-rwx "$datadir" +chown -R $app:$app "$datadir" + #================================================= # ADD SWAP #================================================= @@ -142,51 +157,45 @@ ynh_add_swap --size=$swap_needed #================================================= ynh_script_progression --message="Modifying a config file..." --weight=2 -config_syncing_server_js="$final_path/live/syncing-server-js.env" -config_syncing_server_js_worker="$final_path/live/syncing-server-js-worker.env" +config_api_gateway="$final_path/live/api-gateway.env" config_auth="$final_path/live/auth.env" config_auth_worker="$final_path/live/auth-worker.env" -config_api_gateway="$final_path/live/api-gateway.env" +config_files="$final_path/live/files.env" +config_syncing_server="$final_path/live/syncing-server.env" +config_syncing_server_worker="$final_path/live/syncing-server-worker.env" jwt_secret=$(ynh_string_random --length=48 | base64) legacy_jwt_secret=$(ynh_string_random --length=48 | base64) auth_jwt_secret=$(ynh_string_random --length=48 | base64) pseudo_key_params_key=$(ynh_string_random --length=48 | base64) encryption_server_key=$(hexdump -n 32 -e '4/4 "%08X"' /dev/random) # 32bytes hex key is required +valet_token_secret=$(ynh_string_random --length=48 | base64) ynh_app_setting_set --app=$app --key=jwt_secret --value=$jwt_secret ynh_app_setting_set --app=$app --key=legacy_jwt_secret --value=$legacy_jwt_secret ynh_app_setting_set --app=$app --key=auth_jwt_secret --value=$auth_jwt_secret ynh_app_setting_set --app=$app --key=pseudo_key_params_key --value=$pseudo_key_params_key ynh_app_setting_set --app=$app --key=encryption_server_key --value=$encryption_server_key +ynh_app_setting_set --app=$app --key=valet_token_secret --value=$valet_token_secret -ynh_add_config --template="env_syncing-server-js.env.sample" --destination="$config_syncing_server_js" -ynh_add_config --template="env_syncing-server-js-worker.env.sample" --destination="$config_syncing_server_js_worker" +ynh_add_config --template="env_api-gateway.env.sample" --destination="$config_api_gateway" ynh_add_config --template="env_auth.env.sample" --destination="$config_auth" ynh_add_config --template="env_auth-worker.env.sample" --destination="$config_auth_worker" -ynh_add_config --template="env_api-gateway.env.sample" --destination="$config_api_gateway" +ynh_add_config --template="env_files.env.sample" --destination="$config_files" +ynh_add_config --template="env_syncing-server.env.sample" --destination="$config_syncing_server" +ynh_add_config --template="env_syncing-server-worker.env.sample" --destination="$config_syncing_server_worker" #================================================= # INSTALLING Standard Notes - Syncing Server #================================================= ynh_script_progression --message="Installing Standard Notes - Syncing Server..." --weight=93 - ynh_use_nodejs -pushd "$final_path/live/syncing-server-js" - ynh_print_info "Installing ... [1/3]" - ynh_exec_warn_less ynh_exec_as $app env NODE_OPTIONS="--max-old-space-size=$node_max_old_space_size" PATH=$ynh_node_load_PATH yarn install --pure-lockfile - ynh_exec_warn_less ynh_exec_as $app env NODE_OPTIONS="--max-old-space-size=$node_max_old_space_size" PATH=$ynh_node_load_PATH yarn build -popd -pushd "$final_path/live/auth" - ynh_print_info "Installing ... [2/3]" - ynh_exec_warn_less ynh_exec_as $app env NODE_OPTIONS="--max-old-space-size=$node_max_old_space_size" PATH=$ynh_node_load_PATH yarn install --pure-lockfile - ynh_exec_warn_less ynh_exec_as $app env NODE_OPTIONS="--max-old-space-size=$node_max_old_space_size" PATH=$ynh_node_load_PATH yarn build -popd -pushd "$final_path/live/api-gateway" - ynh_print_info "Installing ... [3/3]" - ynh_exec_warn_less ynh_exec_as $app env NODE_OPTIONS="--max-old-space-size=$node_max_old_space_size" PATH=$ynh_node_load_PATH yarn install --pure-lockfile - ynh_exec_warn_less ynh_exec_as $app env NODE_OPTIONS="--max-old-space-size=$node_max_old_space_size" PATH=$ynh_node_load_PATH yarn build +pushd "$final_path/live" + #ynh_exec_warn_less ynh_exec_as $app env NODE_OPTIONS="--max-old-space-size=$node_max_old_space_size" PATH=$ynh_node_load_PATH yarn install --pure-lockfile + #ynh_exec_warn_less ynh_exec_as $app env NODE_OPTIONS="--max-old-space-size=$node_max_old_space_size" PATH=$ynh_node_load_PATH yarn build + ynh_exec_warn_less ynh_exec_as $app PATH=$ynh_node_load_PATH yarn install --immutable + ynh_exec_warn_less ynh_exec_as $app PATH=$ynh_node_load_PATH yarn build popd #================================================= @@ -195,11 +204,12 @@ popd ynh_script_progression --message="Configuring a systemd service..." --weight=4 # Create a dedicated systemd config -ynh_add_systemd_config --service="$app-syncing-server-js" --template="systemd_syncing-server-js.service" -ynh_add_systemd_config --service="$app-syncing-server-js-worker" --template="systemd_syncing-server-js-worker.service" +ynh_add_systemd_config --service="$app-api-gateway" --template="systemd_api-gateway.service" ynh_add_systemd_config --service="$app-auth" --template="systemd_auth.service" ynh_add_systemd_config --service="$app-auth-worker" --template="systemd_auth-worker.service" -ynh_add_systemd_config --service="$app-api-gateway" --template="systemd_api-gateway.service" +ynh_add_systemd_config --service="$app-files" --template="systemd_files.service" +ynh_add_systemd_config --service="$app-syncing-server" --template="systemd_syncing-server.service" +ynh_add_systemd_config --service="$app-syncing-server-worker" --template="systemd_syncing-server-worker.service" #================================================= # STORE THE CONFIG FILE CHECKSUM @@ -207,11 +217,12 @@ ynh_add_systemd_config --service="$app-api-gateway" --template="systemd_api-gate ynh_script_progression --message="Storing the config file checksum..." --weight=1 # Calculate and store the config file checksum into the app settings -ynh_store_file_checksum --file="$config_syncing_server_js" -ynh_store_file_checksum --file="$config_syncing_server_js_worker" +ynh_store_file_checksum --file="$config_api_gateway" ynh_store_file_checksum --file="$config_auth" ynh_store_file_checksum --file="$config_auth_worker" -ynh_store_file_checksum --file="$config_api_gateway" +ynh_store_file_checksum --file="$config_files" +ynh_store_file_checksum --file="$config_syncing_server" +ynh_store_file_checksum --file="$config_syncing_server_worker" ynh_store_file_checksum --file="/etc/nginx/conf.d/$domain.d/$app.conf" #================================================= @@ -226,23 +237,24 @@ mkdir -p "/var/log/$app" chown -R "$app": "/var/log/$app" # Use logrotate to manage application logfile(s) -ynh_use_logrotate --logfile="/var/log/$app/syncing-server.log" -ynh_use_logrotate --logfile="/var/log/$app/syncing-server-worker.log" +ynh_use_logrotate --logfile="/var/log/$app/api-gateway.log" ynh_use_logrotate --logfile="/var/log/$app/auth.log" ynh_use_logrotate --logfile="/var/log/$app/auth-worker.log" -ynh_use_logrotate --logfile="/var/log/$app/api-gateway.log" +ynh_use_logrotate --logfile="/var/log/$app/files.log" +ynh_use_logrotate --logfile="/var/log/$app/syncing-server.log" +ynh_use_logrotate --logfile="/var/log/$app/syncing-server-worker.log" #================================================= # INTEGRATE SERVICE IN YUNOHOST #================================================= ynh_script_progression --message="Integrate $app service in Yunohost..." --weight=1 -yunohost service add "$app-syncing-server-js" --description="Standard Notes - Syncing Server" --log="/var/log/$app/syncing-server-js.log" -yunohost service add "$app-syncing-server-js-worker" --description="Standard Notes - Syncing Server - Worker" --log="/var/log/$app/syncing-server-js-worker.log" +yunohost service add "$app-api-gateway" --description="Standard Notes - API Gateway" --log="/var/log/$app/api-gateway.log" yunohost service add "$app-auth" --description="Standard Notes - Auth" --log="/var/log/$app/auth.log" yunohost service add "$app-auth-worker" --description="Standard Notes - Auth - Worker" --log="/var/log/$app/auth-worker.log" -yunohost service add "$app-api-gateway" --description="Standard Notes - API Gateway" --log="/var/log/$app/api-gateway.log" - +yunohost service add "$app-files" --description="Standard Notes - Files" --log="/var/log/$app/files.log" +yunohost service add "$app-syncing-server" --description="Standard Notes - Syncing Server" --log="/var/log/$app/syncing-server.log" +yunohost service add "$app-syncing-server-worker" --description="Standard Notes - Syncing Server - Worker" --log="/var/log/$app/syncing-server-worker.log" #================================================= # START SYSTEMD SERVICE @@ -251,30 +263,35 @@ ynh_script_progression --message="Starting a systemd service..." --weight=1 # Start a systemd service ynh_systemd_action \ - --service_name="$app-syncing-server-js" \ + --service_name="$app-api-gateway" \ --action="start" \ - --log_path="/var/log/$app/syncing-server-js.log" \ - --line_match='{"message":"Server started on port '$port_syncing_server_js'","level":"info"}' -ynh_systemd_action \ - --service_name="$app-syncing-server-js-worker" \ - --action="start" \ - --log_path="/var/log/$app/syncing-server-js-worker.log" \ - --line_match='{"message":"Starting worker...","level":"info"}' + --log_path="/var/log/$app/api-gateway.log" \ + --line_match='^.*Server started on port.*$|^.*Starting worker.*$' ynh_systemd_action \ --service_name="$app-auth" \ --action="start" \ --log_path="/var/log/$app/auth.log" \ - --line_match='{"message":"Server started on port '$port_auth'","level":"info"}' + --line_match='^.*Server started on port.*$|^.*Starting worker.*$' ynh_systemd_action \ --service_name="$app-auth-worker" \ --action="start" \ --log_path="/var/log/$app/auth-worker.log" \ - --line_match='{"message":"Starting worker...","level":"info"}' + --line_match='^.*Server started on port.*$|^.*Starting worker.*$' ynh_systemd_action \ - --service_name="$app-api-gateway" \ + --service_name="$app-files" \ --action="start" \ - --log_path="/var/log/$app/api-gateway.log" \ - --line_match='{"level":"info","message":"Server started on port '$port_api_gateway'"}' + --log_path="/var/log/$app/files.log" \ + --line_match='^.*Server started on port.*$|^.*Starting worker.*$' +ynh_systemd_action \ + --service_name="$app-syncing-server" \ + --action="start" \ + --log_path="/var/log/$app/syncing-server.log" \ + --line_match='^.*Server started on port.*$|^.*Starting worker.*$' +ynh_systemd_action \ + --service_name="$app-syncing-server-worker" \ + --action="start" \ + --log_path="/var/log/$app/syncing-server-worker.log" \ + --line_match='^.*Server started on port.*$|^.*Starting worker.*$' #================================================= # SETUP FAIL2BAN diff --git a/scripts/remove b/scripts/remove index 4a6d6ec..a4e94e0 100755 --- a/scripts/remove +++ b/scripts/remove @@ -8,7 +8,6 @@ source _common.sh source ynh_add_swap -source ynh_install_ruby__2 source ynh_redis source /usr/share/yunohost/helpers @@ -20,14 +19,17 @@ ynh_script_progression --message="Loading installation settings..." --weight=1 app=$YNH_APP_INSTANCE_NAME domain=$(ynh_app_setting_get --app=$app --key=domain) -port_syncing_server_js=$(ynh_app_setting_get --app=$app --key=port_syncing_server_js) -port_syncing_server_js_worker=$(ynh_app_setting_get --app=$app --key=port_syncing_server_js_worker) + +port_api_gateway=$(ynh_app_setting_get --app=$app --key=port_api_gateway) port_auth=$(ynh_app_setting_get --app=$app --key=port_auth) port_auth_worker=$(ynh_app_setting_get --app=$app --key=port_auth_worker) -port_api_gateway=$(ynh_app_setting_get --app=$app --key=port_api_gateway) +port_files=$(ynh_app_setting_get --app=$app --key=port_files) +port_syncing_server=$(ynh_app_setting_get --app=$app --key=port_syncing_server) +port_syncing_server_worker=$(ynh_app_setting_get --app=$app --key=port_syncing_server_worker) 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) +datadir=$(ynh_app_setting_get --app=$app --key=datadir) #================================================= # STANDARD REMOVE @@ -36,15 +38,10 @@ final_path=$(ynh_app_setting_get --app=$app --key=final_path) #================================================= # 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-syncing-server-js" >/dev/null +if ynh_exec_warn_less yunohost service status "$app-api-gateway" >/dev/null then - ynh_script_progression --message="Removing $app-syncing-server-js service..." --weight=1 - yunohost service remove "$app-syncing-server-js" -fi -if ynh_exec_warn_less yunohost service status "$app-syncing-server-js-worker" >/dev/null -then - ynh_script_progression --message="Removing $app-syncing-server-js-worker service..." --weight=1 - yunohost service remove "$app-syncing-server-js-worker" + ynh_script_progression --message="Removing $app-api-gateway service..." --weight=1 + yunohost service remove "$app-api-gateway" fi if ynh_exec_warn_less yunohost service status "$app-auth" >/dev/null then @@ -56,10 +53,20 @@ then ynh_script_progression --message="Removing $app-auth-worker service..." --weight=1 yunohost service remove "$app-auth-worker" fi -if ynh_exec_warn_less yunohost service status "$app-api-gateway" >/dev/null +if ynh_exec_warn_less yunohost service status "$app-files" >/dev/null then - ynh_script_progression --message="Removing $app-api-gateway service..." --weight=1 - yunohost service remove "$app-api-gateway" + ynh_script_progression --message="Removing $app-files service..." --weight=1 + yunohost service remove "$app-files" +fi +if ynh_exec_warn_less yunohost service status "$app-syncing-server" >/dev/null +then + ynh_script_progression --message="Removing $app-syncing-server service..." --weight=1 + yunohost service remove "$app-syncing-server" +fi +if ynh_exec_warn_less yunohost service status "$app-syncing-server-worker" >/dev/null +then + ynh_script_progression --message="Removing $app-syncing-server-worker service..." --weight=1 + yunohost service remove "$app-syncing-server-worker" fi #================================================= @@ -68,11 +75,12 @@ fi ynh_script_progression --message="Stopping and removing the systemd service..." --weight=1 # Remove the dedicated systemd config -ynh_remove_systemd_config --service="$app-syncing-server-js" -ynh_remove_systemd_config --service="$app-syncing-server-js-worker" +ynh_remove_systemd_config --service="$app-api-gateway" ynh_remove_systemd_config --service="$app-auth" ynh_remove_systemd_config --service="$app-auth-worker" -ynh_remove_systemd_config --service="$app-api-gateway" +ynh_remove_systemd_config --service="$app-files" +ynh_remove_systemd_config --service="$app-syncing-server" +ynh_remove_systemd_config --service="$app-syncing-server-worker" #================================================= # REMOVE THE MYSQL DATABASE @@ -106,6 +114,17 @@ ynh_script_progression --message="Removing app main directory..." --weight=1 # Remove the app directory securely ynh_secure_remove --file="$final_path" +#================================================= +# REMOVE DATA DIR +#================================================= + +# Remove the data directory if --purge option is used +if [ "${YNH_APP_PURGE:-0}" -eq 1 ] +then + ynh_script_progression --message="Removing app data directory..." --weight=1 + ynh_secure_remove --file="$datadir" +fi + #================================================= # REMOVE NGINX CONFIGURATION #================================================= diff --git a/scripts/restore b/scripts/restore index 9a795a3..1273558 100755 --- a/scripts/restore +++ b/scripts/restore @@ -9,7 +9,6 @@ #Keep this path for calling _common.sh inside the execution's context of backup and restore scripts source ../settings/scripts/_common.sh source ../settings/scripts/ynh_add_swap -source ../settings/scripts/ynh_install_ruby__2 source ../settings/scripts/ynh_redis source /usr/share/yunohost/helpers @@ -37,15 +36,17 @@ 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 db_pwd=$(ynh_app_setting_get --app=$app --key=mysqlpwd) +datadir=$(ynh_app_setting_get --app=$app --key=datadir) redis_db=$(ynh_redis_get_free_db) ynh_app_setting_set --app=$app --key=redis_db --value="$redis_db" -config_syncing_server_js="$final_path/live/syncing-server-js.env" -config_syncing_server_js_worker="$final_path/live/syncing-server-js-worker.env" +config_api_gateway="$final_path/live/api-gateway.env" config_auth="$final_path/live/auth.env" config_auth_worker="$final_path/live/auth-worker.env" -config_api_gateway="$final_path/live/api-gateway.env" +config_files="$final_path/live/files.env" +config_syncing_server="$final_path/live/syncing-server.env" +config_syncing_server_worker="$final_path/live/syncing-server-worker.env" #================================================= # CHECK IF THE APP CAN BE RESTORED @@ -53,7 +54,6 @@ config_api_gateway="$final_path/live/api-gateway.env" ynh_script_progression --message="Validating restoration parameters..." --weight=2 test ! -d $final_path || ynh_die --message="There is already a directory: $final_path " -test ! -d $final_path_www || ynh_die --message="There is already a directory: $final_path_www " #================================================= # STANDARD RESTORATION STEPS @@ -63,16 +63,19 @@ test ! -d $final_path_www || ynh_die --message="There is already a directory: $f ynh_script_progression --message="Finding an available port..." --weight=1 # Find an available port -port_syncing_server_js=$(ynh_find_port --port=3000) -port_syncing_server_js_worker=$(ynh_find_port --port=$((port_syncing_server_js+1))) -port_auth=$(ynh_find_port --port=$((port_syncing_server_js_worker+1))) +port_api_gateway=$(ynh_find_port --port=3000) +port_auth=$(ynh_find_port --port=$((port_api_gateway+1))) port_auth_worker=$(ynh_find_port --port=$((port_auth+1))) -port_api_gateway=$(ynh_find_port --port=$((port_auth_worker+1))) -ynh_app_setting_set --app=$app --key=port_syncing_server_js --value=$port_syncing_server_js -ynh_app_setting_set --app=$app --key=port_syncing_server_js_worker --value=$port_syncing_server_js_worker +port_files=$(ynh_find_port --port=$((port_auth_worker+1))) +port_syncing_server=$(ynh_find_port --port=$((port_files+1))) +port_syncing_server_worker=$(ynh_find_port --port=$((port_syncing_server+1))) + +ynh_app_setting_set --app=$app --key=port_api_gateway --value=$port_api_gateway ynh_app_setting_set --app=$app --key=port_auth --value=$port_auth ynh_app_setting_set --app=$app --key=port_auth_worker --value=$port_auth_worker -ynh_app_setting_set --app=$app --key=port_api_gateway --value=$port_api_gateway +ynh_app_setting_set --app=$app --key=port_files --value=$port_files +ynh_app_setting_set --app=$app --key=port_syncing_server --value=$port_syncing_server +ynh_app_setting_set --app=$app --key=port_syncing_server_worker --value=$port_syncing_server_worker #================================================= # RESTORE THE NGINX CONFIGURATION @@ -87,6 +90,15 @@ ynh_script_progression --message="Restoring the app main directory..." --weight= ynh_restore_file --origin_path="$final_path" +#================================================= +# RESTORE THE DATA DIRECTORY +#================================================= +ynh_script_progression --message="Restoring the data directory..." --weight=1 + +ynh_restore_file --origin_path="$datadir" --not_mandatory + +mkdir -p "$datadir/uploads" + #================================================= # RECREATE THE DEDICATED USER #================================================= @@ -104,6 +116,10 @@ chmod 750 "$final_path" chmod -R o-rwx "$final_path" chown -R $app:$app "$final_path" +chmod 750 "$datadir" +chmod -R o-rwx "$datadir" +chown -R $app:$app "$datadir" + mkdir -p "/var/log/$app" chown -R $app: "/var/log/$app" @@ -141,55 +157,61 @@ ynh_mysql_connect_as --user=$db_user --password=$db_pwd --database=$db_name < ./ ynh_script_progression --message="Modify config files..." --weight=2 # Redis Port -ynh_replace_string --match_string="^REDIS_URL.*$" --replace_string="REDIS_URL=redis://localhost:6379/$redis_db" --target_file="$config_syncing_server_js" -ynh_replace_string --match_string="^REDIS_URL.*$" --replace_string="REDIS_URL=redis://localhost:6379/$redis_db" --target_file="$config_syncing_server_js_worker" +ynh_replace_string --match_string="^REDIS_URL.*$" --replace_string="REDIS_URL=redis://localhost:6379/$redis_db" --target_file="$config_api_gateway" ynh_replace_string --match_string="^REDIS_URL.*$" --replace_string="REDIS_URL=redis://localhost:6379/$redis_db" --target_file="$config_auth" ynh_replace_string --match_string="^REDIS_URL.*$" --replace_string="REDIS_URL=redis://localhost:6379/$redis_db" --target_file="$config_auth_worker" -# Syncing_Server_JS Port -ynh_replace_string --match_string="^PORT.*$" --replace_string="PORT=$port_syncing_server_js" --target_file="$config_syncing_server_js" -ynh_replace_string --match_string="^SYNCING_SERVER_URL.*$" --replace_string="SYNCING_SERVER_URL=$port_syncing_server_js" --target_file="$config_auth" -ynh_replace_string --match_string="^SYNCING_SERVER_URL.*$" --replace_string="SYNCING_SERVER_URL=$port_syncing_server_js" --target_file="$config_auth_worker" -ynh_replace_string --match_string="^SYNCING_SERVER_URL.*$" --replace_string="SYNCING_SERVER_URL=$port_syncing_server_js" --target_file="$config_api_gateway" -# Syncing_Server_JS_Worker Port -ynh_replace_string --match_string="^PORT.*$" --replace_string="PORT=$port_syncing_server_js_worker" --target_file="$config_syncing_server_js_worker" +ynh_replace_string --match_string="^REDIS_URL.*$" --replace_string="REDIS_URL=redis://localhost:6379/$redis_db" --target_file="$config_files" +ynh_replace_string --match_string="^REDIS_URL.*$" --replace_string="REDIS_URL=redis://localhost:6379/$redis_db" --target_file="$config_syncing_server" +ynh_replace_string --match_string="^REDIS_URL.*$" --replace_string="REDIS_URL=redis://localhost:6379/$redis_db" --target_file="$config_syncing_server_worker" +# Syncing_Server Port +ynh_replace_string --match_string="^PORT.*$" --replace_string="PORT=$port_syncing_server" --target_file="$config_syncing_server" +ynh_replace_string --match_string="^SYNCING_SERVER_URL.*$" --replace_string="SYNCING_SERVER_URL=$port_syncing_server" --target_file="$config_api_gateway" +ynh_replace_string --match_string="^SYNCING_SERVER_URL.*$" --replace_string="SYNCING_SERVER_URL=$port_syncing_server" --target_file="$config_auth" +ynh_replace_string --match_string="^SYNCING_SERVER_URL.*$" --replace_string="SYNCING_SERVER_URL=$port_syncing_server" --target_file="$config_auth_worker" +# Syncing_Server_Worker Port +ynh_replace_string --match_string="^PORT.*$" --replace_string="PORT=$port_syncing_server_worker" --target_file="$config_syncing_server_worker" # Auth Port ynh_replace_string --match_string="^PORT.*$" --replace_string="PORT=$port_auth" --target_file="$config_auth" -ynh_replace_string --match_string="^AUTH_SERVER_URL.*$" --replace_string="AUTH_SERVER_URL=$port_auth" --target_file="$config_syncing_server_js" -ynh_replace_string --match_string="^AUTH_SERVER_URL.*$" --replace_string="AUTH_SERVER_URL=$port_auth" --target_file="$config_syncing_server_js_worker" ynh_replace_string --match_string="^AUTH_SERVER_URL.*$" --replace_string="AUTH_SERVER_URL=$port_auth" --target_file="$config_api_gateway" +ynh_replace_string --match_string="^AUTH_SERVER_URL.*$" --replace_string="AUTH_SERVER_URL=$port_auth" --target_file="$config_syncing_server" +ynh_replace_string --match_string="^AUTH_SERVER_URL.*$" --replace_string="AUTH_SERVER_URL=$port_auth" --target_file="$config_syncing_server_worker" # Auth_Worker Port ynh_replace_string --match_string="^PORT.*$" --replace_string="PORT=$port_auth_worker" --target_file="$config_auth_worker" # API-Gateway Port ynh_replace_string --match_string="^PORT.*$" --replace_string="PORT=$port_api_gateway" --target_file="$config_api_gateway" - - +# Files Port +ynh_replace_string --match_string="^PORT.*$" --replace_string="PORT=$port_files" --target_file="$config_files" #================================================= # RESTORE SYSTEMD #================================================= ynh_script_progression --message="Restoring the systemd configuration..." --weight=1 -ynh_restore_file --origin_path="/etc/systemd/system/$app-syncing-server-js.service" -ynh_restore_file --origin_path="/etc/systemd/system/$app-syncing-server-js-worker.service" +ynh_restore_file --origin_path="/etc/systemd/system/$app-api-gateway.service" ynh_restore_file --origin_path="/etc/systemd/system/$app-auth.service" ynh_restore_file --origin_path="/etc/systemd/system/$app-auth-worker.service" -ynh_restore_file --origin_path="/etc/systemd/system/$app-api-gateway.service" -systemctl enable $app-syncing-server-js.service --quiet -systemctl enable $app-syncing-server-js-worker.service --quiet +ynh_restore_file --origin_path="/etc/systemd/system/$app-files.service" +ynh_restore_file --origin_path="/etc/systemd/system/$app-syncing-server.service" +ynh_restore_file --origin_path="/etc/systemd/system/$app-syncing-server-worker.service" + +systemctl enable $app-api-gateway.service --quiet systemctl enable $app-auth.service --quiet systemctl enable $app-auth-worker.service --quiet -systemctl enable $app-api-gateway.service --quiet +systemctl enable $app-files.service --quiet +systemctl enable $app-syncing-server.service --quiet +systemctl enable $app-syncing-server-worker.service --quiet #================================================= # INTEGRATE SERVICE IN YUNOHOST #================================================= ynh_script_progression --message="Integrate $app service in Yunohost..." --weight=1 -yunohost service add "$app-syncing-server-js" --description="Standard Notes - Syncing Server" --log="/var/log/$app/syncing-server-js.log" -yunohost service add "$app-syncing-server-js-worker" --description="Standard Notes - Syncing Server - Worker" --log="/var/log/$app/syncing-server-js-worker.log" +yunohost service add "$app-api-gateway" --description="Standard Notes - API Gateway" --log="/var/log/$app/api-gateway.log" yunohost service add "$app-auth" --description="Standard Notes - Auth" --log="/var/log/$app/auth.log" yunohost service add "$app-auth-worker" --description="Standard Notes - Auth - Worker" --log="/var/log/$app/auth-worker.log" -yunohost service add "$app-api-gateway" --description="Standard Notes - API Gateway" --log="/var/log/$app/api-gateway.log" +yunohost service add "$app-files" --description="Standard Notes - Files" --log="/var/log/$app/files.log" +yunohost service add "$app-syncing-server" --description="Standard Notes - Syncing Server" --log="/var/log/$app/syncing-server.log" +yunohost service add "$app-syncing-server-worker" --description="Standard Notes - Syncing Server - Worker" --log="/var/log/$app/syncing-server-worker.log" #================================================= # START SYSTEMD SERVICE @@ -197,30 +219,35 @@ yunohost service add "$app-api-gateway" --description="Standard Notes - API Gate ynh_script_progression --message="Starting a systemd service..." --weight=1 ynh_systemd_action \ - --service_name="$app-syncing-server-js" \ + --service_name="$app-api-gateway" \ --action="start" \ - --log_path="/var/log/$app/syncing-server-js.log" \ - --line_match='{"message":"Server started on port '$port_syncing_server_js'","level":"info"}' -ynh_systemd_action \ - --service_name="$app-syncing-server-js-worker" \ - --action="start" \ - --log_path="/var/log/$app/syncing-server-js-worker.log" \ - --line_match='{"message":"Starting worker...","level":"info"}' + --log_path="/var/log/$app/api-gateway.log" \ + --line_match='^.*Server started on port.*$|^.*Starting worker.*$' ynh_systemd_action \ --service_name="$app-auth" \ --action="start" \ --log_path="/var/log/$app/auth.log" \ - --line_match='{"message":"Server started on port '$port_auth'","level":"info"}' + --line_match='^.*Server started on port.*$|^.*Starting worker.*$' ynh_systemd_action \ --service_name="$app-auth-worker" \ --action="start" \ --log_path="/var/log/$app/auth-worker.log" \ - --line_match='{"message":"Starting worker...","level":"info"}' + --line_match='^.*Server started on port.*$|^.*Starting worker.*$' ynh_systemd_action \ - --service_name="$app-api-gateway" \ + --service_name="$app-files" \ --action="start" \ - --log_path="/var/log/$app/api-gateway.log" \ - --line_match='{"level":"info","message":"Server started on port '$port_api_gateway'"}' + --log_path="/var/log/$app/files.log" \ + --line_match='^.*Server started on port.*$|^.*Starting worker.*$' +ynh_systemd_action \ + --service_name="$app-syncing-server" \ + --action="start" \ + --log_path="/var/log/$app/syncing-server.log" \ + --line_match='^.*Server started on port.*$|^.*Starting worker.*$' +ynh_systemd_action \ + --service_name="$app-syncing-server-worker" \ + --action="start" \ + --log_path="/var/log/$app/syncing-server-worker.log" \ + --line_match='^.*Server started on port.*$|^.*Starting worker.*$' #================================================= # RESTORE THE LOGROTATE CONFIGURATION diff --git a/scripts/upgrade b/scripts/upgrade index cf41261..7fc5872 100755 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -8,7 +8,6 @@ source _common.sh source ynh_add_swap -source ynh_install_ruby__2 source ynh_redis source /usr/share/yunohost/helpers @@ -23,16 +22,18 @@ 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) +datadir=$(ynh_app_setting_get --app=$app --key=datadir) db_name=$(ynh_app_setting_get --app=$app --key=db_name) db_user=$db_name db_pwd=$(ynh_app_setting_get --app=$app --key=mysqlpwd) -port_syncing_server_js=$(ynh_app_setting_get --app=$app --key=port_syncing_server_js) -port_syncing_server_js_worker=$(ynh_app_setting_get --app=$app --key=port_syncing_server_js_worker) +port_api_gateway=$(ynh_app_setting_get --app=$app --key=port_api_gateway) port_auth=$(ynh_app_setting_get --app=$app --key=port_auth) port_auth_worker=$(ynh_app_setting_get --app=$app --key=port_auth_worker) -port_api_gateway=$(ynh_app_setting_get --app=$app --key=port_api_gateway) +port_files=$(ynh_app_setting_get --app=$app --key=port_files) +port_syncing_server=$(ynh_app_setting_get --app=$app --key=port_syncing_server) +port_syncing_server_worker=$(ynh_app_setting_get --app=$app --key=port_syncing_server_worker) redis_db=$(ynh_app_setting_get --app=$app --key=redis_db) @@ -41,19 +42,19 @@ legacy_jwt_secret=$(ynh_app_setting_get --app=$app --key=legacy_jwt_secret) auth_jwt_secret=$(ynh_app_setting_get --app=$app --key=auth_jwt_secret) pseudo_key_params_key=$(ynh_app_setting_get --app=$app --key=pseudo_key_params_key) encryption_server_key=$(ynh_app_setting_get --app=$app --key=encryption_server_key) +valet_token_secret=$(ynh_app_setting_get --app=$app --key=valet_token_secret) -syncing_server_js_version_installed=$(ynh_app_setting_get --app=$app --key=syncing_server_js_version) +syncing_server_version_installed=$(ynh_app_setting_get --app=$app --key=syncing_server_version) auth_version_installed=$(ynh_app_setting_get --app=$app --key=auth_version) api_gateway_version_installed=$(ynh_app_setting_get --app=$app --key=api_gateway_version) -extensions_version_installed=$(ynh_app_setting_get --app=$app --key=extension_version) -config_syncing_server_js="$final_path/live/syncing-server-js.env" -config_syncing_server_js_worker="$final_path/live/syncing-server-js-worker.env" +config_api_gateway="$final_path/live/api-gateway.env" config_auth="$final_path/live/auth.env" config_auth_worker="$final_path/live/auth-worker.env" -config_api_gateway="$final_path/live/api-gateway.env" +config_files="$final_path/live/files.env" +config_syncing_server="$final_path/live/syncing-server.env" +config_syncing_server_worker="$final_path/live/syncing-server-worker.env" -standalone=$(ynh_app_setting_get --app=$app --key=standalone) nodejs_version_installed=$(ynh_app_setting_get --app=$app --key=nodejs_version) #================================================= @@ -89,150 +90,122 @@ ynh_abort_if_errors #================================================= ynh_script_progression --message="Stopping a systemd service..." --weight=1 -if [[ ! $standalone ]]; -then - ynh_remove_systemd_config --service=$app -else - ynh_systemd_action \ - --service_name="$app-syncing-server-js" \ - --action="stop" \ - --log_path="/var/log/$app/syncing-server-js.log" - ynh_systemd_action \ - --service_name="$app-syncing-server-js-worker" \ - --action="stop" \ - --log_path="/var/log/$app/syncing-server-js-worker.log" - ynh_systemd_action \ - --service_name="$app-auth" \ - --action="stop" \ - --log_path="/var/log/$app/auth.log" - ynh_systemd_action \ - --service_name="$app-auth-worker" \ - --action="stop" \ - --log_path="/var/log/$app/auth-worker.log" - ynh_systemd_action \ - --service_name="$app-api-gateway" \ - --action="stop" \ - --log_path="/var/log/$app/api-gateway.log" -fi +ynh_systemd_action \ + --service_name="$app-api-gateway" \ + --action="stop" \ + --log_path="/var/log/$app/api-gateway.log" +ynh_systemd_action \ + --service_name="$app-auth" \ + --action="stop" \ + --log_path="/var/log/$app/auth.log" +ynh_systemd_action \ + --service_name="$app-auth-worker" \ + --action="stop" \ + --log_path="/var/log/$app/auth-worker.log" +ynh_systemd_action \ + --service_name="$app-files" \ + --action="stop" \ + --log_path="/var/log/$app/files.log" +ynh_systemd_action \ + --service_name="$app-syncing-server" \ + --action="stop" \ + --log_path="/var/log/$app/syncing-server.log" +ynh_systemd_action \ + --service_name="$app-syncing-server-worker" \ + --action="stop" \ + --log_path="/var/log/$app/syncing-server-worker.log" #================================================= # ENSURE DOWNWARD COMPATIBILITY #================================================= ynh_script_progression --message="Ensuring downward compatibility..." --weight=1 -# Cleaning legacy permissions -if ynh_legacy_permissions_exists; then - ynh_legacy_permissions_delete_all - - ynh_app_setting_delete --app=$app --key=is_public -fi - -# Everyone can access the app. -if [[ $(ynh_permission_exists --permission="main") && ! $standalone ]] -then - ynh_permission_update --permission="main" --add="visitors" --show_tile="false" -fi -if ! ynh_permission_exists --permission="main" -then - ynh_permission_create --permission="main" --url="/" --allowed="visitors" --show_tile="false" -fi - # If final_path doesn't exist, create it if [ -z "$final_path" ]; then final_path=/opt/yunohost/$app ynh_app_setting_set --app=$app --key=final_path --value=$final_path fi - # If redis_db doesn't exist, create it if [ -z "$redis_db" ]; then redis_db=$(ynh_redis_get_free_db) ynh_app_setting_set --app=$app --key=redis_db --value="$redis_db" fi -# If port_syncing_server_js doesn't exist, create it -if [ -z "$port_syncing_server_js" ]; then - port_syncing_server_js=$(ynh_find_port --port=3000) - ynh_app_setting_set --app=$app --key=port_syncing_server_js --value=$port_syncing_server_js -fi -# If port_syncing_server_js_worker doesn't exist, create it -if [ -z "$port_syncing_server_js_worker" ]; then - port_syncing_server_js_worker=$(ynh_find_port --port=$((port_syncing_server_js+1))) - ynh_app_setting_set --app=$app --key=port_syncing_server_js_worker --value=$port_syncing_server_js_worker +# If port_api_gateway doesn't exist, create it +if [ -z "$port_api_gateway" ]; then + port_api_gateway=$(ynh_find_port --port=3000) + ynh_app_setting_set --app=$app --key=port_api_gateway --value=$port_api_gateway fi - # If port_auth doesn't exist, create it if [ -z "$port_auth" ]; then - port_auth=$(ynh_find_port --port=$((port_syncing_server_js_worker+1))) + port_auth=$(ynh_find_port --port=$((port_api_gateway+1))) ynh_app_setting_set --app=$app --key=port_auth --value=$port_auth fi - # If port_auth_worker doesn't exist, create it if [ -z "$port_auth_worker" ]; then port_auth_worker=$(ynh_find_port --port=$((port_auth+1))) ynh_app_setting_set --app=$app --key=port_auth_worker --value=$port_auth_worker fi - -# If port_api_gateway doesn't exist, create it -if [ -z "$port_api_gateway" ]; then - port_api_gateway=$(ynh_find_port --port=$((port_auth_worker+1))) - ynh_app_setting_set --app=$app --key=port_api_gateway --value=$port_api_gateway +# If port_files doesn't exist, create it +if [ -z "$port_files" ]; then + port_files=$(ynh_find_port --port=$((port_auth_worker+1))) + ynh_app_setting_set --app=$app --key=port_files --value=$port_files fi +# If port_syncing_server doesn't exist, create it +if [ -z "$port_syncing_server" ]; then + port_syncing_server=$(ynh_find_port --port=$((port_files+1))) + ynh_app_setting_set --app=$app --key=port_syncing_server --value=$port_syncing_server +fi +# If port_syncing_server_worker doesn't exist, create it +if [ -z "$port_syncing_server_worker" ]; then + port_syncing_server_worker=$(ynh_find_port --port=$((port_syncing_server+1))) + ynh_app_setting_set --app=$app --key=port_syncing_server_worker --value=$port_syncing_server_worker +fi + # If jwt_secret doesn't exist, create it if [ -z "$jwt_secret" ]; then jwt_secret=$(ynh_string_random --length=48 | base64) ynh_app_setting_set --app=$app --key=jwt_secret --value=$jwt_secret fi - # If legacy_jwt_secret doesn't exist, create it if [ -z "$legacy_jwt_secret" ]; then legacy_jwt_secret=$(ynh_string_random --length=48 | base64) ynh_app_setting_set --app=$app --key=legacy_jwt_secret --value=$legacy_jwt_secret fi - # If auth_jwt_secret doesn't exist, create it if [ -z "$auth_jwt_secret" ]; then auth_jwt_secret=$(ynh_string_random --length=48 | base64) ynh_app_setting_set --app=$app --key=auth_jwt_secret --value=$auth_jwt_secret fi - # If pseudo_key_params_key doesn't exist, create it if [ -z "$pseudo_key_params_key" ]; then pseudo_key_params_key=$(ynh_string_random --length=48 | base64) ynh_app_setting_set --app=$app --key=pseudo_key_params_key --value=$pseudo_key_params_key fi - # If encryption_server_key doesn't exist, create it if [ -z "$encryption_server_key" ]; then encryption_server_key=$(hexdump -n 32 -e '4/4 "%08X"' /dev/random) # 32bytes hex key is required ynh_app_setting_set --app=$app --key=encryption_server_key --value=$encryption_server_key fi +# If valet_token_secret doesn't exist, create it +if [ -z "$valet_token_secret" ]; then + valet_token_secret=$(ynh_string_random --length=48 | base64) + ynh_app_setting_set --app=$app --key=valet_token_secret --value=$valet_token_secret +fi + # Remove old Settings, Services, Files, Dependencies -# If access_domain exist, delete it -if [ -n $(ynh_app_setting_get --app="$app" --key=access_domain) ]; then - ynh_app_setting_delete --app=$app --key=access_domain -fi - -# If mail exist, delete it -if [ -n $(ynh_app_setting_get --app="$app" --key=mail) ]; then - ynh_app_setting_delete --app=$app --key=mail -fi - -# If port exist, delete it -if [ -n $(ynh_app_setting_get --app="$app" --key=port) ]; then - ynh_app_setting_delete --app=$app --key=port -fi - -# If final_path exist, delete it -if [ -n "$final_path_www" ]; then +# If final_path_www exist, delete it +final_path_www=$(ynh_app_setting_get --app=$app --key=final_path_www) +if [ -n ${final_path_www+x} ]; then ynh_app_setting_delete --app=$app --key=final_path_www fi - -# If final_path exist, delete it -if [ -n "$final_path_extensions" ]; then +# If final_path_extensions exist, delete it +final_path_extensions=$(ynh_app_setting_get --app=$app --key=final_path_extensions) +if [ -n ${final_path_extensions+x} ]; then ynh_app_setting_delete --app=$app --key=final_path_extensions fi @@ -243,39 +216,36 @@ then fi # If old service exsits; remove it -if ynh_exec_warn_less yunohost service status "$app" >/dev/null +if ynh_exec_warn_less yunohost service status "$app-syncing-server-js" >/dev/null then - ynh_script_progression --message="Removing $app service..." --weight=1 - yunohost service remove "$app" + ynh_script_progression --message="Removing old service..." --weight=1 + yunohost service remove "$app-syncing-server-js" fi - -# Remove old config scripts -if [ -e "/etc/yunohost/apps/$app/config_panel.toml" ]; then - ynh_secure_remove --file="/etc/yunohost/apps/$app/config_panel.toml" -fi - -if [ -e "/etc/yunohost/apps/$app/scripts/config" ]; then - ynh_secure_remove --file="/etc/yunohost/apps/$app/scripts/config" -fi - -# Remove old dependencies -if [[ ! $standalone ]]; +if ynh_exec_warn_less yunohost service status "$app-syncing-server-js-worker" >/dev/null then - ynh_remove_ruby - ynh_remove_app_dependencies + ynh_script_progression --message="Removing old service..." --weight=1 + yunohost service remove "$app-syncing-server-js-worker" fi + # Remove unneeded data -if [ -e "$final_path/live/syncing-server-js-worker" ]; then - ynh_secure_remove --file="$final_path/live/syncing-server-js-worker" -fi -if [ -e "$final_path/live/auth-worker" ]; then - ynh_secure_remove --file="$final_path/live/auth-worker" -fi if [ -e "/var/www/$app" ]; then ynh_secure_remove --file="/var/www/$app" fi +# If datadir doesn't exist, create it +# CREATE DATA DIRECTORY +if [ -z "$datadir" ]; then + datadir=/home/yunohost.app/$app + ynh_app_setting_set --app=$app --key=datadir --value=$datadir + + mkdir -p $datadir/uploads + + chmod -R 750 "$datadir" + chmod -R o-rwx "$datadir" + chown -R $app:$app "$datadir" +fi + #================================================= # CREATE DEDICATED USER #================================================= @@ -287,59 +257,20 @@ ynh_system_user_create --username=$app --home_dir=$final_path #================================================= # DOWNLOAD, CHECK AND UNPACK SOURCE #================================================= - -ynh_script_progression --message="Upgrading source files..." --weight=1 -# Remove all files if the old syncing-server is used -if [[ ! $standalone ]]; +if [ "$upgrade_type" == "UPGRADE_APP" ] then - ynh_secure_remove --file="$final_path" - ynh_secure_remove --file="/var/log/$app" -fi + ynh_script_progression --message="Upgrading source files..." --weight=1 -if [[ "$syncing_server_js_version_installed" < "$syncing_server_js_version" ]] -then - # Backup files to keep - ynh_backup_if_checksum_is_different --file=$config_syncing_server_js - ynh_backup_if_checksum_is_different --file=$config_syncing_server_js_worker - # Remove destination directory - ynh_secure_remove --file="$final_path/live/syncing-server-js" - ynh_secure_remove --file="$config_syncing_server_js" - ynh_secure_remove --file="$config_syncing_server_js_worker" # Download, check integrity, uncompress and patch the source from app.src + ynh_secure_remove --file="$final_path/live" mkdir -p "$final_path/live" - ynh_setup_source --source_id=app_syncing-server-js --dest_dir="$final_path/live/syncing-server-js" -fi + ynh_setup_source --source_id=app --dest_dir="$final_path/live" -if [[ "$auth_version_installed" < "$auth_version" ]] -then - # Backup files to keep - ynh_backup_if_checksum_is_different --file=$config_auth - ynh_backup_if_checksum_is_different --file=$config_auth_worker - # Remove destination directory - ynh_secure_remove --file="$final_path/live/auth" - ynh_secure_remove --file="$config_auth" - ynh_secure_remove --file="$config_auth_worker" - # Download, check integrity, uncompress and patch the source from app.src - mkdir -p "$final_path/live" - ynh_setup_source --source_id=app_auth --dest_dir="$final_path/live/auth" + chmod 750 "$final_path" + chmod -R o-rwx "$final_path" + chown -R $app:$app "$final_path" fi -if [[ "$api_gateway_version_installed" < "$api_gateway_version" ]] -then - # Backup files to keep - ynh_backup_if_checksum_is_different --file=$config_api_gateway - # Remove destination directory - ynh_secure_remove --file="$final_path/live/api-gateway" - ynh_secure_remove --file="$config_api_gateway" - # Download, check integrity, uncompress and patch the source from app.src - mkdir -p "$final_path/live" - ynh_setup_source --source_id=app_api-gateway --dest_dir="$final_path/live/api-gateway" -fi - -chmod 750 "$final_path" -chmod -R o-rwx "$final_path" -chown -R $app:$app "$final_path" - #================================================= # NGINX CONFIGURATION #================================================= @@ -366,6 +297,8 @@ ynh_install_extra_app_dependencies --repo="deb https://dl.yarnpkg.com/debian/ st #================================================= # SPECIFIC UPGRADE #================================================= + + #================================================= # ADD SWAP #================================================= @@ -378,11 +311,12 @@ ynh_add_swap --size=$swap_needed #================================================= ynh_script_progression --message="Modify a config file..." --weight=2 -ynh_add_config --template="env_syncing-server-js.env.sample" --destination="$config_syncing_server_js" -ynh_add_config --template="env_syncing-server-js-worker.env.sample" --destination="$config_syncing_server_js_worker" +ynh_add_config --template="env_api-gateway.env.sample" --destination="$config_api_gateway" ynh_add_config --template="env_auth.env.sample" --destination="$config_auth" ynh_add_config --template="env_auth-worker.env.sample" --destination="$config_auth_worker" -ynh_add_config --template="env_api-gateway.env.sample" --destination="$config_api_gateway" +ynh_add_config --template="env_files.env.sample" --destination="$config_files" +ynh_add_config --template="env_syncing-server.env.sample" --destination="$config_syncing_server" +ynh_add_config --template="env_syncing-server-worker.env.sample" --destination="$config_syncing_server_worker" #================================================= # INSTALLING Standard Notes - Syncing Server @@ -391,30 +325,12 @@ if [ "$upgrade_type" == "UPGRADE_APP" ] then ynh_script_progression --message="Installing Standard Notes - Syncing Server..." --weight=93 ynh_use_nodejs - if [[ "$syncing_server_js_version_installed" < "$syncing_server_js_version" ]] - then - pushd "$final_path/live/syncing-server-js" - ynh_exec_warn_less ynh_exec_as $app env NODE_OPTIONS="--max-old-space-size=$node_max_old_space_size" PATH=$ynh_node_load_PATH yarn install --pure-lockfile - ynh_exec_warn_less ynh_exec_as $app env NODE_OPTIONS="--max-old-space-size=$node_max_old_space_size" PATH=$ynh_node_load_PATH yarn build - popd - ynh_app_setting_set --app=$app --key=syncing_server_js_version --value=$syncing_server_js_version - fi - if [[ "$auth_version_installed" < "$auth_version" ]] - then - pushd "$final_path/live/auth" - ynh_exec_warn_less ynh_exec_as $app env NODE_OPTIONS="--max-old-space-size=$node_max_old_space_size" PATH=$ynh_node_load_PATH yarn install --pure-lockfile - ynh_exec_warn_less ynh_exec_as $app env NODE_OPTIONS="--max-old-space-size=$node_max_old_space_size" PATH=$ynh_node_load_PATH yarn build - popd - ynh_app_setting_set --app=$app --key=auth_version --value=$auth_version - fi - if [[ "$api_gateway_version_installed" < "$api_gateway_version" ]] - then - pushd "$final_path/live/api-gateway" - ynh_exec_warn_less ynh_exec_as $app env NODE_OPTIONS="--max-old-space-size=$node_max_old_space_size" PATH=$ynh_node_load_PATH yarn install --pure-lockfile - ynh_exec_warn_less ynh_exec_as $app env NODE_OPTIONS="--max-old-space-size=$node_max_old_space_size" PATH=$ynh_node_load_PATH yarn build - popd - ynh_app_setting_set --app=$app --key=api_gateway_version --value=$api_gateway_version - fi + pushd "$final_path/live" + #ynh_exec_warn_less ynh_exec_as $app env NODE_OPTIONS="--max-old-space-size=$node_max_old_space_size" PATH=$ynh_node_load_PATH yarn install --pure-lockfile + #ynh_exec_warn_less ynh_exec_as $app env NODE_OPTIONS="--max-old-space-size=$node_max_old_space_size" PATH=$ynh_node_load_PATH yarn build + ynh_exec_warn_less ynh_exec_as $app PATH=$ynh_node_load_PATH yarn install --immutable + ynh_exec_warn_less ynh_exec_as $app PATH=$ynh_node_load_PATH yarn build + popd fi #================================================= @@ -423,22 +339,25 @@ fi ynh_script_progression --message="Upgrading systemd configuration..." --weight=1 # Create a dedicated systemd config -ynh_add_systemd_config --service="$app-syncing-server-js" --template="systemd_syncing-server-js.service" -ynh_add_systemd_config --service="$app-syncing-server-js-worker" --template="systemd_syncing-server-js-worker.service" +ynh_add_systemd_config --service="$app-api-gateway" --template="systemd_api-gateway.service" ynh_add_systemd_config --service="$app-auth" --template="systemd_auth.service" ynh_add_systemd_config --service="$app-auth-worker" --template="systemd_auth-worker.service" -ynh_add_systemd_config --service="$app-api-gateway" --template="systemd_api-gateway.service" +ynh_add_systemd_config --service="$app-files" --template="systemd_files.service" +ynh_add_systemd_config --service="$app-syncing-server" --template="systemd_syncing-server.service" +ynh_add_systemd_config --service="$app-syncing-server-worker" --template="systemd_syncing-server-worker.service" #================================================= # STORE THE CONFIG FILE CHECKSUM #================================================= +ynh_script_progression --message="Storing the config file checksum..." --weight=1 # Calculate and store the config file checksum into the app settings -ynh_store_file_checksum --file="$config_syncing_server_js" -ynh_store_file_checksum --file="$config_syncing_server_js_worker" +ynh_store_file_checksum --file="$config_api_gateway" ynh_store_file_checksum --file="$config_auth" ynh_store_file_checksum --file="$config_auth_worker" -ynh_store_file_checksum --file="$config_api_gateway" +ynh_store_file_checksum --file="$config_files" +ynh_store_file_checksum --file="$config_syncing_server" +ynh_store_file_checksum --file="$config_syncing_server_worker" ynh_store_file_checksum --file="/etc/nginx/conf.d/$domain.d/$app.conf" #================================================= @@ -453,22 +372,24 @@ mkdir -p "/var/log/$app" chown -R "$app": "/var/log/$app" # Use logrotate to manage application logfile(s) -ynh_use_logrotate --logfile="/var/log/$app/syncing-server.log" -ynh_use_logrotate --logfile="/var/log/$app/syncing-server-worker.log" +ynh_use_logrotate --logfile="/var/log/$app/api-gateway.log" ynh_use_logrotate --logfile="/var/log/$app/auth.log" ynh_use_logrotate --logfile="/var/log/$app/auth-worker.log" -ynh_use_logrotate --logfile="/var/log/$app/api-gateway.log" +ynh_use_logrotate --logfile="/var/log/$app/files.log" +ynh_use_logrotate --logfile="/var/log/$app/syncing-server.log" +ynh_use_logrotate --logfile="/var/log/$app/syncing-server-worker.log" #================================================= # INTEGRATE SERVICE IN YUNOHOST #================================================= ynh_script_progression --message="Integrate $app service in Yunohost..." --weight=1 -yunohost service add "$app-syncing-server-js" --description="Standard Notes - Syncing Server" --log="/var/log/$app/syncing-server-js.log" -yunohost service add "$app-syncing-server-js-worker" --description="Standard Notes - Syncing Server - Worker" --log="/var/log/$app/syncing-server-js-worker.log" +yunohost service add "$app-api-gateway" --description="Standard Notes - API Gateway" --log="/var/log/$app/api-gateway.log" yunohost service add "$app-auth" --description="Standard Notes - Auth" --log="/var/log/$app/auth.log" yunohost service add "$app-auth-worker" --description="Standard Notes - Auth - Worker" --log="/var/log/$app/auth-worker.log" -yunohost service add "$app-api-gateway" --description="Standard Notes - API Gateway" --log="/var/log/$app/api-gateway.log" +yunohost service add "$app-files" --description="Standard Notes - Files" --log="/var/log/$app/files.log" +yunohost service add "$app-syncing-server" --description="Standard Notes - Syncing Server" --log="/var/log/$app/syncing-server.log" +yunohost service add "$app-syncing-server-worker" --description="Standard Notes - Syncing Server - Worker" --log="/var/log/$app/syncing-server-worker.log" #================================================= # START SYSTEMD SERVICE @@ -477,30 +398,35 @@ ynh_script_progression --message="Starting a systemd service..." --weight=1 # Start a systemd service ynh_systemd_action \ - --service_name="$app-syncing-server-js" \ + --service_name="$app-api-gateway" \ --action="start" \ - --log_path="/var/log/$app/syncing-server-js.log" \ - --line_match='{"message":"Server started on port '$port_syncing_server_js'","level":"info"}' -ynh_systemd_action \ - --service_name="$app-syncing-server-js-worker" \ - --action="start" \ - --log_path="/var/log/$app/syncing-server-js-worker.log" \ - --line_match='{"message":"Starting worker...","level":"info"}' + --log_path="/var/log/$app/api-gateway.log" \ + --line_match='^.*Server started on port.*$|^.*Starting worker.*$' ynh_systemd_action \ --service_name="$app-auth" \ --action="start" \ --log_path="/var/log/$app/auth.log" \ - --line_match='{"message":"Server started on port '$port_auth'","level":"info"}' + --line_match='^.*Server started on port.*$|^.*Starting worker.*$' ynh_systemd_action \ --service_name="$app-auth-worker" \ --action="start" \ --log_path="/var/log/$app/auth-worker.log" \ - --line_match='{"message":"Starting worker...","level":"info"}' + --line_match='^.*Server started on port.*$|^.*Starting worker.*$' ynh_systemd_action \ - --service_name="$app-api-gateway" \ + --service_name="$app-files" \ --action="start" \ - --log_path="/var/log/$app/api-gateway.log" \ - --line_match='{"level":"info","message":"Server started on port '$port_api_gateway'"}' + --log_path="/var/log/$app/files.log" \ + --line_match='^.*Server started on port.*$|^.*Starting worker.*$' +ynh_systemd_action \ + --service_name="$app-syncing-server" \ + --action="start" \ + --log_path="/var/log/$app/syncing-server.log" \ + --line_match='^.*Server started on port.*$|^.*Starting worker.*$' +ynh_systemd_action \ + --service_name="$app-syncing-server-worker" \ + --action="start" \ + --log_path="/var/log/$app/syncing-server-worker.log" \ + --line_match='^.*Server started on port.*$|^.*Starting worker.*$' #================================================= # SETUP FAIL2BAN diff --git a/scripts/ynh_install_ruby__2 b/scripts/ynh_install_ruby__2 deleted file mode 100644 index 8b07195..0000000 --- a/scripts/ynh_install_ruby__2 +++ /dev/null @@ -1,305 +0,0 @@ -#!/bin/bash - -ynh_ruby_try_bash_extension() { - if [ -x src/configure ]; then - src/configure && make -C src || { - ynh_print_info --message="Optional bash extension failed to build, but things will still work normally." - } - fi -} - -rbenv_install_dir="/opt/rbenv" -ruby_version_path="$rbenv_install_dir/versions" -# RBENV_ROOT is the directory of rbenv, it needs to be loaded as a environment variable. -export RBENV_ROOT="$rbenv_install_dir" - -# Load the version of Ruby for an app, and set variables. -# -# ynh_use_ruby has to be used in any app scripts before using Ruby for the first time. -# This helper will provide alias and variables to use in your scripts. -# -# To use gem or Ruby, use the alias `ynh_gem` and `ynh_ruby` -# Those alias will use the correct version installed for the app -# For example: use `ynh_gem install` instead of `gem install` -# -# With `sudo` or `ynh_exec_as`, use instead the fallback variables `$ynh_gem` and `$ynh_ruby` -# And propagate $PATH to sudo with $ynh_ruby_load_path -# Exemple: `ynh_exec_as $app $ynh_ruby_load_path $ynh_gem install` -# -# $PATH contains the path of the requested version of Ruby. -# However, $PATH is duplicated into $ruby_path to outlast any manipulation of $PATH -# You can use the variable `$ynh_ruby_load_path` to quickly load your Ruby version -# in $PATH for an usage into a separate script. -# Exemple: $ynh_ruby_load_path $final_path/script_that_use_gem.sh` -# -# -# Finally, to start a Ruby service with the correct version, 2 solutions -# Either the app is dependent of Ruby or gem, but does not called it directly. -# In such situation, you need to load PATH -# `Environment="__YNH_RUBY_LOAD_ENV_PATH__"` -# `ExecStart=__FINALPATH__/my_app` -# You will replace __YNH_RUBY_LOAD_ENV_PATH__ with $ynh_ruby_load_path -# -# Or Ruby start the app directly, then you don't need to load the PATH variable -# `ExecStart=__YNH_RUBY__ my_app run` -# You will replace __YNH_RUBY__ with $ynh_ruby -# -# -# one other variable is also available -# - $ruby_path: The absolute path to Ruby binaries for the chosen version. -# -# usage: ynh_use_ruby -# -# Requires YunoHost version 3.2.2 or higher. -ynh_use_ruby () { - ruby_version=$(ynh_app_setting_get --app=$app --key=ruby_version) - - # Get the absolute path of this version of Ruby - ruby_path="$ruby_version_path/$YNH_APP_INSTANCE_NAME/bin" - - # Allow alias to be used into bash script - shopt -s expand_aliases - - # Create an alias for the specific version of Ruby and a variable as fallback - ynh_ruby="$ruby_path/ruby" - alias ynh_ruby="$ynh_ruby" - # And gem - ynh_gem="$ruby_path/gem" - alias ynh_gem="$ynh_gem" - - # Load the path of this version of Ruby in $PATH - if [[ :$PATH: != *":$ruby_path"* ]]; then - PATH="$ruby_path:$PATH" - fi - # Create an alias to easily load the PATH - ynh_ruby_load_path="PATH=$PATH" - - # Sets the local application-specific Ruby version - pushd $final_path - $rbenv_install_dir/bin/rbenv local $ruby_version - popd -} - -# Install a specific version of Ruby -# -# ynh_install_ruby will install the version of Ruby provided as argument by using rbenv. -# -# This helper creates a /etc/profile.d/rbenv.sh that configures PATH environment for rbenv -# for every LOGIN user, hence your user must have a defined shell (as opposed to /usr/sbin/nologin) -# -# Don't forget to execute ruby-dependent command in a login environment -# (e.g. sudo --login option) -# When not possible (e.g. in systemd service definition), please use direct path -# to rbenv shims (e.g. $RBENV_ROOT/shims/bundle) -# -# usage: ynh_install_ruby --ruby_version=ruby_version -# | arg: -v, --ruby_version= - Version of ruby to install. -# -# Requires YunoHost version 3.2.2 or higher. -ynh_install_ruby () { - # Declare an array to define the options of this helper. - local legacy_args=v - local -A args_array=( [v]=ruby_version= ) - local ruby_version - # Manage arguments with getopts - ynh_handle_getopts_args "$@" - - # Load rbenv path in PATH - local CLEAR_PATH="$rbenv_install_dir/bin:$PATH" - - # Remove /usr/local/bin in PATH in case of Ruby prior installation - PATH=$(echo $CLEAR_PATH | sed 's@/usr/local/bin:@@') - - # Move an existing Ruby binary, to avoid to block rbenv - test -x /usr/bin/ruby && mv /usr/bin/ruby /usr/bin/ruby_rbenv - - # Install or update rbenv - rbenv="$(command -v rbenv $rbenv_install_dir/bin/rbenv | grep "$rbenv_install_dir/bin/rbenv" | head -1)" - if [ -n "$rbenv" ]; then - ynh_print_info --message="rbenv already seems installed in \`$rbenv'." - pushd "${rbenv%/*/*}" - if git remote -v 2>/dev/null | grep "https://github.com/rbenv/rbenv.git"; then - ynh_print_info --message="Trying to update with git..." - git pull -q --tags origin master - ynh_ruby_try_bash_extension - else - ynh_print_info --message="Reinstalling rbenv with git..." - cd .. - ynh_secure_remove --file=$rbenv_install_dir - mkdir -p $rbenv_install_dir - cd $rbenv_install_dir - git init -q - git remote add -f -t master origin https://github.com/rbenv/rbenv.git > /dev/null 2>&1 - git checkout -q -b master origin/master - ynh_ruby_try_bash_extension - rbenv=$rbenv_install_dir/bin/rbenv - fi - popd - else - ynh_print_info --message="Installing rbenv with git..." - mkdir -p $rbenv_install_dir - pushd $rbenv_install_dir - git init -q - git remote add -f -t master origin https://github.com/rbenv/rbenv.git > /dev/null 2>&1 - git checkout -q -b master origin/master - ynh_ruby_try_bash_extension - rbenv=$rbenv_install_dir/bin/rbenv - popd - fi - - ruby_build="$(command -v "$rbenv_install_dir"/plugins/*/bin/rbenv-install rbenv-install | head -1)" - if [ -n "$ruby_build" ]; then - ynh_print_info --message="\`rbenv install' command already available in \`$ruby_build'." - pushd "${ruby_build%/*/*}" - if git remote -v 2>/dev/null | grep "https://github.com/rbenv/ruby-build.git"; then - ynh_print_info --message="Trying to update rbenv with git..." - git pull -q origin master - fi - popd - else - ynh_print_info --message="Installing ruby-build with git..." - mkdir -p "${rbenv_install_dir}/plugins" - git clone -q https://github.com/rbenv/ruby-build.git "${rbenv_install_dir}/plugins/ruby-build" - fi - - rbenv_alias="$(command -v "$rbenv_install_dir"/plugins/*/bin/rbenv-alias rbenv-alias | head -1)" - if [ -n "$rbenv_alias" ]; then - ynh_print_info --message="\`rbenv alias' command already available in \`$rbenv_alias'." - pushd "${rbenv_alias%/*/*}" - if git remote -v 2>/dev/null | grep "https://github.com/tpope/rbenv-aliases.git"; then - ynh_print_info --message="Trying to update rbenv-aliases with git..." - git pull -q origin master - fi - popd - else - ynh_print_info --message="Installing rbenv-aliases with git..." - mkdir -p "${rbenv_install_dir}/plugins" - git clone -q https://github.com/tpope/rbenv-aliases.git "${rbenv_install_dir}/plugins/rbenv-aliase" - fi - - rbenv_latest="$(command -v "$rbenv_install_dir"/plugins/*/bin/rbenv-latest rbenv-latest | head -1)" - if [ -n "$rbenv_latest" ]; then - ynh_print_info --message="\`rbenv latest' command already available in \`$rbenv_latest'." - pushd "${rbenv_latest%/*/*}" - if git remote -v 2>/dev/null | grep "https://github.com/momo-lab/xxenv-latest.git"; then - ynh_print_info --message="Trying to update xxenv-latest with git..." - git pull -q origin master - fi - popd - else - ynh_print_info --message="Installing xxenv-latest with git..." - mkdir -p "${rbenv_install_dir}/plugins" - git clone -q https://github.com/momo-lab/xxenv-latest.git "${rbenv_install_dir}/plugins/xxenv-latest" - fi - - # Enable caching - mkdir -p "${rbenv_install_dir}/cache" - - # Create shims directory if needed - mkdir -p "${rbenv_install_dir}/shims" - - # Restore /usr/local/bin in PATH - PATH=$CLEAR_PATH - - # And replace the old Ruby binary - test -x /usr/bin/ruby_rbenv && mv /usr/bin/ruby_rbenv /usr/bin/ruby - - # Install the requested version of Ruby - local final_ruby_version=$(rbenv latest --print $ruby_version) - if ! [ -n "$final_ruby_version" ]; then - final_ruby_version=$ruby_version - fi - ynh_print_info --message="Installing Ruby-$final_ruby_version" - CONFIGURE_OPTS="--disable-install-doc --with-jemalloc" MAKE_OPTS="-j2" rbenv install --skip-existing $final_ruby_version > /dev/null 2>&1 - - # Store ruby_version into the config of this app - ynh_app_setting_set --app=$YNH_APP_INSTANCE_NAME --key=ruby_version --value=$final_ruby_version - - # Remove app virtualenv - if `rbenv alias --list | grep --quiet "$YNH_APP_INSTANCE_NAME " 1>/dev/null 2>&1` - then - rbenv alias $YNH_APP_INSTANCE_NAME --remove - fi - - # Create app virtualenv - rbenv alias $YNH_APP_INSTANCE_NAME $final_ruby_version - - # Cleanup Ruby versions - ynh_cleanup_ruby - - # Set environment for Ruby users - echo "#rbenv -export RBENV_ROOT=$rbenv_install_dir -export PATH=\"$rbenv_install_dir/bin:$PATH\" -eval \"\$(rbenv init -)\" -#rbenv" > /etc/profile.d/rbenv.sh - - # Load the environment - eval "$(rbenv init -)" -} - -# Remove the version of Ruby used by the app. -# -# This helper will also cleanup Ruby versions -# -# usage: ynh_remove_ruby -ynh_remove_ruby () { - local ruby_version=$(ynh_app_setting_get --app=$YNH_APP_INSTANCE_NAME --key=ruby_version) - - # Load rbenv path in PATH - local CLEAR_PATH="$rbenv_install_dir/bin:$PATH" - - # Remove /usr/local/bin in PATH in case of Ruby prior installation - PATH=$(echo $CLEAR_PATH | sed 's@/usr/local/bin:@@') - - rbenv alias $YNH_APP_INSTANCE_NAME --remove - - # Remove the line for this app - ynh_app_setting_delete --app=$YNH_APP_INSTANCE_NAME --key=ruby_version - - # Cleanup Ruby versions - ynh_cleanup_ruby -} - -# Remove no more needed versions of Ruby used by the app. -# -# This helper will check what Ruby version are no more required, -# and uninstall them -# If no app uses Ruby, rbenv will be also removed. -# -# usage: ynh_cleanup_ruby -ynh_cleanup_ruby () { - - # List required Ruby versions - local installed_apps=$(yunohost app list | grep -oP 'id: \K.*$') - local required_ruby_versions="" - for installed_app in $installed_apps - do - local installed_app_ruby_version=$(ynh_app_setting_get --app=$installed_app --key="ruby_version") - if [[ $installed_app_ruby_version ]] - then - required_ruby_versions="${installed_app_ruby_version}\n${required_ruby_versions}" - fi - done - - # Remove no more needed Ruby versions - local installed_ruby_versions=$(rbenv versions --bare --skip-aliases | grep -Ev '/') - for installed_ruby_version in $installed_ruby_versions - do - if ! `echo ${required_ruby_versions} | grep "${installed_ruby_version}" 1>/dev/null 2>&1` - then - ynh_print_info --message="Removing of Ruby-$installed_ruby_version" - $rbenv_install_dir/bin/rbenv uninstall --force $installed_ruby_version - fi - done - - # If none Ruby version is required - if [[ ! $required_ruby_versions ]] - then - # Remove rbenv environment configuration - ynh_print_info --message="Removing of rbenv" - ynh_secure_remove --file="$rbenv_install_dir" - ynh_secure_remove --file="/etc/profile.d/rbenv.sh" - fi -} - From 5f38aad46e4b36a3f411265c3d9701263cb34a96 Mon Sep 17 00:00:00 2001 From: Fabian Wilkens Date: Thu, 4 Aug 2022 17:29:45 +0200 Subject: [PATCH 03/21] Update: ci-auto-updater for new upstream-source --- .github/workflows/updater.sh | 133 ++++++++++++---------------------- .github/workflows/updater.yml | 9 ++- 2 files changed, 53 insertions(+), 89 deletions(-) diff --git a/.github/workflows/updater.sh b/.github/workflows/updater.sh index 5e32b7f..add164c 100644 --- a/.github/workflows/updater.sh +++ b/.github/workflows/updater.sh @@ -17,41 +17,61 @@ # Current versions are defined in _common.sh source scripts/_common.sh current_version=$(cat manifest.json | jq -j '.version|split("~")[0]') -repo=$(cat manifest.json | jq -j '.upstream.code|split("https://github.com/")[1]') -repo_ssjs="standardnotes/syncing-server-js" -repo_auth="standardnotes/auth" -repo_api="standardnotes/api-gateway" -ssjs_online_version=$(curl --silent "https://raw.githubusercontent.com/standardnotes/standalone/main/docker-compose.yml" | grep -Po 'standardnotes\/syncing-server-js:\K.*$' | head -n 1 ) -auth_online_version=$(curl --silent "https://raw.githubusercontent.com/standardnotes/standalone/main/docker-compose.yml" | grep -Po 'standardnotes\/auth:\K.*$' | head -n 1 ) -api_online_version=$(curl --silent "https://raw.githubusercontent.com/standardnotes/standalone/main/docker-compose.yml" | grep -Po 'standardnotes\/api-gateway:\K.*$' | head -n 1 ) +#repo=$(cat manifest.json | jq -j '.upstream.code|split("https://github.com/")[1]') +repo="standardnotes/server" +commit="" +id=0 +while [[ -z $commit && $id -le 29 ]] +do + commit=$(curl --silent "https://api.github.com/repos/$repo/commits" | jq -r '.[$id] | .sha' ) + tags=$(git -c 'versionsort.suffix=-' ls-remote --tags --sort='v:refname' https://github.com/standardnotes/server.git | grep $commit) -version=$(date +%Y.%m.%d) + if [[ -z $tags || $tags == *"alpha"* ]]; then + commit="" + fi + let id++ +done + +if [ -z $commit ]; then + echo "::warning ::No new version found.." + exit 0 +fi + +version=$(curl --silent "https://api.github.com/repos/$repo/commits/$commit" | jq -r '.commit.committer.date' | sed 's/T.*$//g' | sed 's/-/./g') +api_gateway_online_version=$(curl --silent "https://raw.githubusercontent.com/$repo/$commit/packages/api-gateway/package.json" | jq -j '.version') +auth_online_version=$(curl --silent "https://raw.githubusercontent.com/$repo/$commit/packages/auth/package.json" | jq -j '.version') +files_online_version=$(curl --silent "https://raw.githubusercontent.com/$repo/$commit/packages/files/package.json" | jq -j '.version') +ss_online_version=$(curl --silent "https://raw.githubusercontent.com/$repo/$commit/packages/syncing_server/package.json" | jq -j '.#version') # Setting up the environment variables echo "Current version: $current_version" -echo "Syncing-Server-JS: $syncing_server_js_version" -echo "Auth: $auth_version" echo "API-Gateway: $api_gateway_version" +echo "Auth: $auth_version" +echo "Files: $files_version" +echo "Syncing-Server: $syncing_server_version" echo "" -echo "Latest release from upstream:" -echo "Syncing-Server-JS: $ssjs_online_version" +echo "Latest release from upstream: $version" +echo "API-Gateway: $api_gateway_online_version" echo "Auth: $auth_online_version" -echo "API-Gateway: $api_online_version" +echo "Files: $files_online_version" +echo "Syncing-Server: $ss_online_version" echo "VERSION=$version" >> $GITHUB_ENV -echo "VERSION_SSJS=$syncing_server_js_version" >> $GITHUB_ENV -echo "VERSION_SSJS_UPDATE=$ssjs_online_version" >> $GITHUB_ENV +echo "VERSION_CURRENT=$current_version" >> $GITHUB_ENV +echo "VERSION_API=$api_gateway_version" >> $GITHUB_ENV +echo "VERSION_API_UPDATE=$api_gateway_online_version" >> $GITHUB_ENV echo "VERSION_AUTH=$auth_version" >> $GITHUB_ENV echo "VERSION_AUTH_UPDATE=$auth_online_version" >> $GITHUB_ENV -echo "VERSION_API=$api_gateway_version" >> $GITHUB_ENV -echo "VERSION_API_UPDATE=$api_online_version" >> $GITHUB_ENV +echo "VERSION_FILES=$files_version" >> $GITHUB_ENV +echo "VERSION_FILES_UPDATE=$files_online_version" >> $GITHUB_ENV +echo "VERSION_SS=$syncing_server_version" >> $GITHUB_ENV +echo "VERSION_SS_UPDATE=$ss_online_version" >> $GITHUB_ENV + # For the time being, let's assume the script will fail echo "PROCEED=false" >> $GITHUB_ENV # Proceed only if the retrieved version is greater than the current one -if [[ "$syncing_server_js_version" == "$ssjs_online_version" \ - && "$auth_version" == "$auth_online_version" \ - && "$api_gateway_version" == "$api_online_version" ]]; then +if [[ "$current_version" == "$version" ]]; then echo "::warning ::No new version available" exit 0 # Proceed only if a PR for this new version does not already exist @@ -60,85 +80,33 @@ elif git ls-remote -q --exit-code --heads https://github.com/$GITHUB_REPOSITORY. exit 0 fi -assets[0]="https://github.com/standardnotes/syncing-server-js/archive/$ssjs_online_version.tar.gz" -assets[1]="https://github.com/standardnotes/auth/archive/$auth_online_version.tar.gz" -assets[2]="https://github.com/standardnotes/api-gateway/archive/$api_online_version.tar.gz" -echo "${#assets[@]} available asset(s)" +asset="https://github.com/$remote/archive/$commit.tar.gz" #================================================= # UPDATE SOURCE FILES #================================================= -# Here we use the $assets variable to get the resources published in the upstream release. - -count=0 - -# Let's loop over the array of assets URLs -for asset_url in ${assets[@]}; do - -echo "Handling asset at $asset_url" - -# Assign the asset to a source file in conf/ directory -# Here we base the source file name upon a unique keyword in the assets url (admin vs. update) -# Leave $src empty to ignore the asset -case $asset_url in - *"/syncing-server-js/"*) - src="app_syncing-server-js" - ;; - *"/auth/"*) - src="app_auth" - ;; - *"/api-gateway/"*) - src="app_api-gateway" - ;; - *) - src="" - ;; -esac - -# If $src is not empty, let's process the asset -if [ ! -z "$src" ]; then - # Create the temporary directory tempdir="$(mktemp -d)" # Download sources and calculate checksum -filename=${asset_url##*/} -curl --silent -4 -L $asset_url -o "$tempdir/$filename" +filename=${asset##*/} +curl --silent -4 -L $asset -o "$tempdir/$filename" checksum=$(sha256sum "$tempdir/$filename" | head -c 64) # Delete temporary directory rm -rf $tempdir -# Get extension -if [[ $filename == *.tar.gz ]]; then - extension=tar.gz -else - extension=${filename##*.} -fi - # Rewrite source file -cat < conf/$src.src -SOURCE_URL=$asset_url +cat < conf/app.src +SOURCE_URL=$asset SOURCE_SUM=$checksum SOURCE_SUM_PRG=sha256sum -SOURCE_FORMAT=$extension +SOURCE_FORMAT=tar.gz SOURCE_IN_SUBDIR=true +SOURCE_FILENAME= EOT -echo "... conf/$src.src updated" - -count=$((count+1)) - -else -echo "... asset ignored" -fi - -done - -if [ $count == 0 ]; then - echo "::warning ::None of the assets were processed." - exit 0 -fi +echo "... conf/app.src updated" #================================================= # SPECIFIC UPDATE STEPS @@ -147,11 +115,6 @@ fi # Any action on the app's source code can be done. # The GitHub Action workflow takes care of committing all changes after this script ends. -# Update versions in scripts/_common.sh -sed -i "s/syncing_server_js_version=.*$/syncing_server_js_version=\"$ssjs_online_version\"/g" "scripts/_common.sh" -sed -i "s/auth_version=.*$/auth_version=\"$auth_online_version\"/g" "scripts/_common.sh" -sed -i "s/api_gateway_version=.*$/api_gateway_version=\"$api_online_version\"/g" "scripts/_common.sh" - #================================================= # GENERIC FINALIZA-TION #================================================= diff --git a/.github/workflows/updater.yml b/.github/workflows/updater.yml index ea27fa8..2138fe1 100644 --- a/.github/workflows/updater.yml +++ b/.github/workflows/updater.yml @@ -45,9 +45,10 @@ jobs: delete-branch: true title: 'Upgrade to ${{ env.VERSION }}' body: | - Upgrade to ${{ env.VERSION }} + Upgrade ${{ env.VERSION_CURRENT }} to ${{ env.VERSION }} - Syncing-Server-JS Version: ${{ env.VERSION_SSJS }} to ${{ env.VERSION_SSJS_UPDATE }} - Auth Version: ${{ env.VERSION_AUTH }} to ${{ env.VERSION_AUTH_UPDATE }} API-Gateway Version: ${{ env.VERSION_API }} to ${{ env.VERSION_API_UPDATE }} - draft: false + Auth Version: ${{ env.VERSION_AUTH }} to ${{ env.VERSION_AUTH_UPDATE }} + Files Version: ${{ env.VERSION_FILES }} to ${{ env.VERSION_FILEs_UPDATE }} + Syncing-Server-JS Version: ${{ env.VERSION_SS }} to ${{ env.VERSION_SS_UPDATE }} + draft: true From 3b0aadbb0728255a8b98601f40b5d5087ed60a73 Mon Sep 17 00:00:00 2001 From: yunohost-bot Date: Thu, 4 Aug 2022 15:30:35 +0000 Subject: [PATCH 04/21] Auto-update README --- README.md | 2 +- README_fr.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 64087d2..8ee546b 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ If you don't have YunoHost, please consult [the guide](https://yunohost.org/#/in The Standard Notes syncing server. An end-to-end encrypted note-taking app. -**Shipped version:** 2022.06.20~ynh1 +**Shipped version:** 2022.07.29~ynh1 **Demo:** https://standardnotes.org/demo ## Disclaimers / important information diff --git a/README_fr.md b/README_fr.md index e8cfc63..f538d9d 100644 --- a/README_fr.md +++ b/README_fr.md @@ -17,7 +17,7 @@ Si vous n'avez pas YunoHost, regardez [ici](https://yunohost.org/#/install) pour -**Version incluse :** 2022.06.20~ynh1 +**Version incluse :** 2022.07.29~ynh1 **Démo :** https://standardnotes.org/demo ## Avertissements / informations importantes From 23e3f6728b1c287c8a532123e44222b88c02837c Mon Sep 17 00:00:00 2001 From: Fabian Wilkens Date: Fri, 5 Aug 2022 13:16:16 +0200 Subject: [PATCH 05/21] Fix: typos --- conf/env_files.env.sample | 2 +- scripts/backup | 2 +- scripts/upgrade | 2 -- 3 files changed, 2 insertions(+), 4 deletions(-) diff --git a/conf/env_files.env.sample b/conf/env_files.env.sample index 7675adb..98ec8ee 100644 --- a/conf/env_files.env.sample +++ b/conf/env_files.env.sample @@ -1,4 +1,4 @@ -PATH=/opt/node_n/n/versions/node/16/bin:/opt/node_n/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin +__YNH_NODE_LOAD_PATH__ LOG_LEVEL="debug" NODE_ENV="production" diff --git a/scripts/backup b/scripts/backup index ab86be9..0f11362 100755 --- a/scripts/backup +++ b/scripts/backup @@ -84,7 +84,7 @@ ynh_print_info "Backing up systemd configuration..." ynh_backup --src_path="/etc/systemd/system/$app-api-gateway.service" ynh_backup --src_path="/etc/systemd/system/$app-auth.service" -ynh_backup --src_path="/etc/systemd/system/$app-auth.service" +ynh_backup --src_path="/etc/systemd/system/$app-auth-worker.service" ynh_backup --src_path="/etc/systemd/system/$app-files.service" ynh_backup --src_path="/etc/systemd/system/$app-syncing-server.service" ynh_backup --src_path="/etc/systemd/system/$app-syncing-server-worker.service" diff --git a/scripts/upgrade b/scripts/upgrade index 7fc5872..ac1b87b 100755 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -297,8 +297,6 @@ ynh_install_extra_app_dependencies --repo="deb https://dl.yarnpkg.com/debian/ st #================================================= # SPECIFIC UPGRADE #================================================= - - #================================================= # ADD SWAP #================================================= From 8a725fd23016a7e679095789ccead59ec6b97774 Mon Sep 17 00:00:00 2001 From: Fabian Wilkens Date: Mon, 8 Aug 2022 01:37:39 +0200 Subject: [PATCH 06/21] Update: Add cron and config_panel --- conf/cron | 1 + conf/cron.env | 7 +++++++ config_panel.toml | 15 +++++++++++++++ scripts/backup | 7 +++++++ scripts/install | 12 ++++++++++++ scripts/restore | 7 +++++++ scripts/upgrade | 12 ++++++++++++ sources/extra_files/cron.sh | 37 +++++++++++++++++++++++++++++++++++++ 8 files changed, 98 insertions(+) create mode 100644 conf/cron create mode 100644 conf/cron.env create mode 100644 config_panel.toml create mode 100755 sources/extra_files/cron.sh diff --git a/conf/cron b/conf/cron new file mode 100644 index 0000000..8ad4979 --- /dev/null +++ b/conf/cron @@ -0,0 +1 @@ +*/5 * * * * __APP__ __FINALPATH__/cron.sh > /var/log/__APP__/cron.log 2>&1 diff --git a/conf/cron.env b/conf/cron.env new file mode 100644 index 0000000..fb49032 --- /dev/null +++ b/conf/cron.env @@ -0,0 +1,7 @@ +FILES_SIZE=100 + +DB_HOST=localhost +DB_PORT=3306 +DB_USERNAME=__DB_USER__ +DB_PASSWORD=__DB_PWD__ +DB_DATABASE=__DB_NAME__ diff --git a/config_panel.toml b/config_panel.toml new file mode 100644 index 0000000..dc8fa9f --- /dev/null +++ b/config_panel.toml @@ -0,0 +1,15 @@ +version = "1.0" + +[main] +name = "StandardNotes Server configuration" +services = ["__APP__"] + + [main.config] + name = "Configuration Options" + + [main.config.files_limit] + ask = "Default user files limit" + type = "string" + default = "100" + help = "Choose a default limit in MB for the user file upload space.\n 100 = 100 MB, 1024 = 1GB, 10240 = 10GB" + bind = "FILES_SIZE:__FINALPATH__/cron.env" diff --git a/scripts/backup b/scripts/backup index 0f11362..e61a755 100755 --- a/scripts/backup +++ b/scripts/backup @@ -89,6 +89,13 @@ ynh_backup --src_path="/etc/systemd/system/$app-files.service" ynh_backup --src_path="/etc/systemd/system/$app-syncing-server.service" ynh_backup --src_path="/etc/systemd/system/$app-syncing-server-worker.service" +#================================================= +# CRON LOGROTATE +#================================================= +ynh_print_info "Backing up cron configuration..." + +ynh_backup --src_path="/etc/cron.d/$app" + #================================================= # END OF SCRIPT #================================================= diff --git a/scripts/install b/scripts/install index d32d295..917cf2f 100755 --- a/scripts/install +++ b/scripts/install @@ -115,6 +115,7 @@ ynh_script_progression --message="Setting up source files..." --weight=2 # Download, check integrity, uncompress and patch the source from app.src mkdir -p "$final_path/live" ynh_setup_source --source_id=app --dest_dir="$final_path/live" +cp "$YNH_APP_BASEDIR/sources/extra_files/cron.sh" "$final_path/cron.sh" chmod 750 "$final_path" chmod -R o-rwx "$final_path" @@ -293,6 +294,17 @@ ynh_systemd_action \ --log_path="/var/log/$app/syncing-server-worker.log" \ --line_match='^.*Server started on port.*$|^.*Starting worker.*$' +#================================================= +# SETUP A CRON +#================================================= +ynh_script_progression --message="Setup a cron..." + +ynh_add_config --template="../conf/cron.env" --destination="__finalpath__/$app.env" +ynh_add_config --template="../conf/cron" --destination="/etc/cron.d/$app" + +chown root: "/etc/cron.d/$app" +chmod 640 "/etc/cron.d/$app" + #================================================= # SETUP FAIL2BAN #================================================= diff --git a/scripts/restore b/scripts/restore index 1273558..67ec45f 100755 --- a/scripts/restore +++ b/scripts/restore @@ -249,6 +249,13 @@ ynh_systemd_action \ --log_path="/var/log/$app/syncing-server-worker.log" \ --line_match='^.*Server started on port.*$|^.*Starting worker.*$' +#================================================= +# RESTORE THE CRON CONFIGURATION +#================================================= +ynh_script_progression --message="Restoring cron configuration..." --weight=1 + +ynh_restore_file --origin_path="/etc/cron.d/$app" + #================================================= # RESTORE THE LOGROTATE CONFIGURATION #================================================= diff --git a/scripts/upgrade b/scripts/upgrade index ac1b87b..0f5b487 100755 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -265,6 +265,7 @@ then ynh_secure_remove --file="$final_path/live" mkdir -p "$final_path/live" ynh_setup_source --source_id=app --dest_dir="$final_path/live" + cp "$YNH_APP_BASEDIR/sources/extra_files/cron.sh" "$final_path/cron.sh" chmod 750 "$final_path" chmod -R o-rwx "$final_path" @@ -426,6 +427,17 @@ ynh_systemd_action \ --log_path="/var/log/$app/syncing-server-worker.log" \ --line_match='^.*Server started on port.*$|^.*Starting worker.*$' +#================================================= +# SETUP A CRON +#================================================= +ynh_script_progression --message="Setup a cron..." + +ynh_add_config --template="../conf/cron.env" --destination="__finalpath__/$app.env" +ynh_add_config --template="../conf/cron" --destination="/etc/cron.d/$app" + +chown root: "/etc/cron.d/$app" +chmod 640 "/etc/cron.d/$app" + #================================================= # SETUP FAIL2BAN #================================================= diff --git a/sources/extra_files/cron.sh b/sources/extra_files/cron.sh new file mode 100755 index 0000000..17ca024 --- /dev/null +++ b/sources/extra_files/cron.sh @@ -0,0 +1,37 @@ +#!/bin/bash + +if [ ! -f .env ] +then + export $(cat cron.env | xargs) +fi + +FILE_UPLOAD_BYTES_PER_MB=1048576 +FILE_UPLOAD_BYTES_LIMIT=$(($FILES_SIZE*$FILE_UPLOAD_BYTES_PER_MB)) + +# Searching for new users in the last 10 minutes without a Pro_Plan subscription. +mysql --password=$DB_PASSWORD --database=$DB_DATABASE <<< " \ + SELECT email FROM users WHERE created_at >= DATE_SUB( TIMESTAMP(NOW()), INTERVAL 10 HOUR) AND NOT EXISTS( SELECT * FROM user_subscriptions WHERE user_subscriptions.plan_name = \"PRO_PLAN\" AND user_subscriptions.user_uuid = users.uuid ); \ +" 2>/dev/null | + +# Read through the piped result until it's empty. +while IFS='\n' read email; do + if [[ $email = "0" ]]; then + echo "No new users registered" + fi + if [[ ${email} = "email" ]]; then + echo "New users found:" + echo "----------------------------------------" + else + # ADD new user with Email $EMAIL a PRO_PLAN subscription + echo "[$(date -Iseconds)] User: $email added to the PRO_PLAN subscription." + mysql --password=$DB_PASSWORD --database=$DB_DATABASE -e \ + "INSERT INTO user_roles (role_uuid , user_uuid) VALUES ((SELECT uuid FROM roles WHERE name=\"PRO_USER\" ORDER BY version DESC limit 1) ,(SELECT uuid FROM users WHERE email=\"$email\")) ON DUPLICATE KEY UPDATE role_uuid = VALUES(role_uuid);" + mysql --password=$DB_PASSWORD --database=$DB_DATABASE -e \ + "INSERT INTO user_subscriptions SET uuid=UUID(), plan_name=\"PRO_PLAN\", ends_at=8640000000000000, created_at=0, updated_at=0, user_uuid=(SELECT uuid FROM users WHERE email=\"$email\"), subscription_id=1, subscription_type=\"regular\";" + + # Add new user Files space. Size is 1GB*$FILES_SIZE + echo "[$(date -Iseconds)] User: $email added $FILES_SIZE MB of file spcae." + mysql --password=$DB_PASSWORD --database=$DB_DATABASE -e \ + "INSERT INTO subscription_settings(uuid, name, value, created_at, updated_at, user_subscription_uuid) VALUES (UUID(), \"FILE_UPLOAD_BYTES_LIMIT\", \"$FILE_UPLOAD_BYTES_LIMIT\", FLOOR(UNIX_TIMESTAMP(NOW(6))*1000000), FLOOR(UNIX_TIMESTAMP(NOW(6))*1000000), (SELECT us.uuid FROM user_subscriptions us INNER JOIN users u ON us.user_uuid=u.uuid WHERE u.email=\"$email\"));" + fi +done From 48738a664f5ed16379182098991c1f7e5247224a Mon Sep 17 00:00:00 2001 From: yunohost-bot Date: Mon, 8 Aug 2022 00:01:31 +0000 Subject: [PATCH 07/21] Auto-update README --- README.md | 1 + README_fr.md | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 8ee546b..177f0b5 100644 --- a/README.md +++ b/README.md @@ -19,6 +19,7 @@ The Standard Notes syncing server. An end-to-end encrypted note-taking app. **Shipped version:** 2022.07.29~ynh1 + **Demo:** https://standardnotes.org/demo ## Disclaimers / important information diff --git a/README_fr.md b/README_fr.md index f538d9d..1b3b09e 100644 --- a/README_fr.md +++ b/README_fr.md @@ -17,7 +17,8 @@ Si vous n'avez pas YunoHost, regardez [ici](https://yunohost.org/#/install) pour -**Version incluse :** 2022.07.29~ynh1 +**Version incluse :** 2022.07.29~ynh1 + **Démo :** https://standardnotes.org/demo ## Avertissements / informations importantes From 95e328d60624eeb2ab39e9cdc69a9ceace78fbd3 Mon Sep 17 00:00:00 2001 From: Fabian Wilkens Date: Mon, 8 Aug 2022 02:18:22 +0200 Subject: [PATCH 08/21] Update: Add cron and config_panel --- conf/cron.env | 7 +++++++ sources/extra_files/cron.sh | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/conf/cron.env b/conf/cron.env index fb49032..eb03e00 100644 --- a/conf/cron.env +++ b/conf/cron.env @@ -1,3 +1,10 @@ +# cron.env +# This file get overwritten when the app gets upgraded. +# Change the value in the config_panel +# https://my_domain.tld/yunohost/admin/#/apps/$app_id/config-panel + +# Default FILES Upload Linit in MB for new users. +# 100 = 100MB, 1000 = 1000MB, 1024 = 1GB, 10240 = 10GB FILES_SIZE=100 DB_HOST=localhost diff --git a/sources/extra_files/cron.sh b/sources/extra_files/cron.sh index 17ca024..2e5f2be 100755 --- a/sources/extra_files/cron.sh +++ b/sources/extra_files/cron.sh @@ -10,7 +10,7 @@ FILE_UPLOAD_BYTES_LIMIT=$(($FILES_SIZE*$FILE_UPLOAD_BYTES_PER_MB)) # Searching for new users in the last 10 minutes without a Pro_Plan subscription. mysql --password=$DB_PASSWORD --database=$DB_DATABASE <<< " \ - SELECT email FROM users WHERE created_at >= DATE_SUB( TIMESTAMP(NOW()), INTERVAL 10 HOUR) AND NOT EXISTS( SELECT * FROM user_subscriptions WHERE user_subscriptions.plan_name = \"PRO_PLAN\" AND user_subscriptions.user_uuid = users.uuid ); \ + SELECT email FROM users WHERE created_at >= DATE_SUB( TIMESTAMP(NOW()), INTERVAL 10 MINUTE) AND NOT EXISTS( SELECT * FROM user_subscriptions WHERE user_subscriptions.plan_name = \"PRO_PLAN\" AND user_subscriptions.user_uuid = users.uuid ); \ " 2>/dev/null | # Read through the piped result until it's empty. From 6372a418ab19a3316daa81bd5c890b488f38eb21 Mon Sep 17 00:00:00 2001 From: Fabian Wilkens Date: Tue, 9 Aug 2022 09:59:02 +0200 Subject: [PATCH 09/21] Update: update config_panel, add actions --- actions.toml | 8 ++ conf/cron.env | 2 +- conf/env_auth-worker.env.sample | 2 +- conf/env_auth.env.sample | 2 +- config_panel.toml | 28 +++++-- scripts/actions/add_subscription.sh | 55 ++++++++++++++ scripts/config | 111 ++++++++++++++++++++++++++++ scripts/install | 5 ++ scripts/upgrade | 13 ++++ 9 files changed, 215 insertions(+), 11 deletions(-) create mode 100644 actions.toml create mode 100755 scripts/actions/add_subscription.sh create mode 100644 scripts/config diff --git a/actions.toml b/actions.toml new file mode 100644 index 0000000..abb7e4a --- /dev/null +++ b/actions.toml @@ -0,0 +1,8 @@ +[add_subscriptions] +name = "Add a subscription and file space to all users without a subscription." +command = "/bin/bash scripts/actions/add_subscription.sh" +# user = "root" # optional +# cwd = "/" # optional +# accepted_return_codes = [0, 1, 2, 3] # optional +accepted_return_codes = [0] +description = "Add subs" diff --git a/conf/cron.env b/conf/cron.env index eb03e00..bcd313f 100644 --- a/conf/cron.env +++ b/conf/cron.env @@ -5,7 +5,7 @@ # Default FILES Upload Linit in MB for new users. # 100 = 100MB, 1000 = 1000MB, 1024 = 1GB, 10240 = 10GB -FILES_SIZE=100 +FILES_SIZE=__FILES_SIZE__ DB_HOST=localhost DB_PORT=3306 diff --git a/conf/env_auth-worker.env.sample b/conf/env_auth-worker.env.sample index dfd11f1..282a3c3 100644 --- a/conf/env_auth-worker.env.sample +++ b/conf/env_auth-worker.env.sample @@ -26,7 +26,7 @@ DB_MIGRATIONS_PATH=dist/migrations/*.js REDIS_URL=redis://localhost:6379/__REDIS_DB__ -DISABLE_USER_REGISTRATION=false +DISABLE_USER_REGISTRATION=__DISABLE_USER_REGISTRATION__ ACCESS_TOKEN_AGE=5184000 REFRESH_TOKEN_AGE=31556926 diff --git a/conf/env_auth.env.sample b/conf/env_auth.env.sample index 9cf3633..614f3ad 100644 --- a/conf/env_auth.env.sample +++ b/conf/env_auth.env.sample @@ -26,7 +26,7 @@ DB_MIGRATIONS_PATH=dist/migrations/*.js REDIS_URL=redis://localhost:6379/__REDIS_DB__ -DISABLE_USER_REGISTRATION=false +DISABLE_USER_REGISTRATION=__DISABLE_USER_REGISTRATION__ ACCESS_TOKEN_AGE=5184000 REFRESH_TOKEN_AGE=31556926 diff --git a/config_panel.toml b/config_panel.toml index dc8fa9f..88e2fe5 100644 --- a/config_panel.toml +++ b/config_panel.toml @@ -2,14 +2,26 @@ version = "1.0" [main] name = "StandardNotes Server configuration" -services = ["__APP__"] - [main.config] - name = "Configuration Options" + [main.new_user] + name = "New User Options" - [main.config.files_limit] - ask = "Default user files limit" - type = "string" + [main.new_user.disable_user_registration] + ask = "Disable user registration?" + type = "boolean" + default = "false" + help = "false = New users can register\ntrue = No new user registrations allowed" + + [main.new_user.files_limit] + ask = "Default files limit" + type = "number" default = "100" - help = "Choose a default limit in MB for the user file upload space.\n 100 = 100 MB, 1024 = 1GB, 10240 = 10GB" - bind = "FILES_SIZE:__FINALPATH__/cron.env" + help = "Choose a default limit in MB for the user file upload space.\n 100 = 100 MB\n 1024 = 1GB\n 10240 = 10GB" + + [main.subscription] + name = "User Subscription" + + [main.subscription.info] + ask = "" + type = "alert" + style = "info" diff --git a/scripts/actions/add_subscription.sh b/scripts/actions/add_subscription.sh new file mode 100755 index 0000000..f1642ae --- /dev/null +++ b/scripts/actions/add_subscription.sh @@ -0,0 +1,55 @@ +#!/bin/bash + +source /usr/share/yunohost/helpers + +#================================================= +# RETRIEVE ARGUMENTS +#================================================= + +app=$YNH_APP_INSTANCE_NAME +final_path=$(ynh_app_setting_get $app final_path) + +#================================================= +# LOAD ENV FILE +#================================================= + +if [ ! -f .env ] +then + export $(cat $final_path/cron.env | xargs) +fi + +FILE_UPLOAD_BYTES_PER_MB=1048576 +FILE_UPLOAD_BYTES_LIMIT=$(($FILES_SIZE*$FILE_UPLOAD_BYTES_PER_MB)) + +#================================================= +# ADD SUBSCRIPTION AND FILES SPACE TO ALL USERS +#================================================= + +ynh_script_progression --message="Add a subscription and $FILES_SIZE MB of file space to all users without a subscription" + +# Searching for new users in the last 10 minutes without a Pro_Plan subscription. +mysql --password=$DB_PASSWORD --database=$DB_DATABASE <<< " \ + SELECT email FROM users WHERE NOT EXISTS( SELECT * FROM user_subscriptions WHERE user_subscriptions.plan_name = \"PRO_PLAN\" AND user_subscriptions.user_uuid = users.uuid ); \ +" 2>/dev/null | + +# Read through the piped result until it's empty. +while IFS='\n' read email; do + if [[ ${email} = "email" ]]; then + ynh_print_info --message="New users found:" + ynh_print_info --message="----------------------------------------" + else + # ADD new user with Email $EMAIL a PRO_PLAN subscription + ynh_print_info --message="[$(date -Iseconds)] User: $email added to the PRO_PLAN subscription." + mysql --password=$DB_PASSWORD --database=$DB_DATABASE -e \ + "INSERT INTO user_roles (role_uuid , user_uuid) VALUES ((SELECT uuid FROM roles WHERE name=\"PRO_USER\" ORDER BY version DESC limit 1) ,(SELECT uuid FROM users WHERE email=\"$email\")) ON DUPLICATE KEY UPDATE role_uuid = VALUES(role_uuid);" + mysql --password=$DB_PASSWORD --database=$DB_DATABASE -e \ + "INSERT INTO user_subscriptions SET uuid=UUID(), plan_name=\"PRO_PLAN\", ends_at=8640000000000000, created_at=0, updated_at=0, user_uuid=(SELECT uuid FROM users WHERE email=\"$email\"), subscription_id=1, subscription_type=\"regular\";" + + # Add new user Files space. Size is 1GB*$FILES_SIZE + ynh_print_info --message="[$(date -Iseconds)] User: $email added $FILES_SIZE MB of file spcae." + mysql --password=$DB_PASSWORD --database=$DB_DATABASE -e \ + "INSERT INTO subscription_settings(uuid, name, value, created_at, updated_at, user_subscription_uuid) VALUES (UUID(), \"FILE_UPLOAD_BYTES_LIMIT\", \"$FILE_UPLOAD_BYTES_LIMIT\", FLOOR(UNIX_TIMESTAMP(NOW(6))*1000000), FLOOR(UNIX_TIMESTAMP(NOW(6))*1000000), (SELECT us.uuid FROM user_subscriptions us INNER JOIN users u ON us.user_uuid=u.uuid WHERE u.email=\"$email\"));" + fi +done + +ynh_script_progression --message="Execution completed" --last diff --git a/scripts/config b/scripts/config new file mode 100644 index 0000000..237d207 --- /dev/null +++ b/scripts/config @@ -0,0 +1,111 @@ +#!/bin/bash + +#================================================= +# GENERIC STARTING +#================================================= +# IMPORT GENERIC HELPERS +#================================================= + +source /usr/share/yunohost/helpers + +ynh_abort_if_errors + +#================================================= +# RETRIEVE ARGUMENTS +#================================================= + +app=$(ynh_app_setting_get $app id) +final_path=$(ynh_app_setting_get $app final_path) + +#================================================= +# SPECIFIC GETTERS FOR TOML SHORT KEY +#================================================= + +get__disable_user_registration(){ + + disabled=$(ynh_read_var_in_file --file="$final_path/live/auth.env" --key="DISABLE_USER_REGISTRATION") + + echo $disabled +} + +get__files_limit(){ + limit=$(ynh_read_var_in_file --file="$final_path/cron.env" --key="FILES_SIZE") + + echo $limit +} + +get__info(){ + domain="$(cat /etc/yunohost/current_host)" + limit=$(ynh_read_var_in_file --file="$final_path/cron.env" --key="FILES_SIZE") + link="https://$domain/yunohost/admin/#/apps/$app/actions" + cat << EOF +ask: "Add subscriptions:\nAdd a subscription and $limit MB of file space to all users without a subscription.\n$link" +EOF + +} + +#================================================= +# SPECIFIC VALIDATORS FOR TOML SHORT KEYS +#================================================= + +#================================================= +# SPECIFIC SETTERS FOR TOML SHORT KEYS +#================================================= + +set__disable_user_registration(){ + #--------------------------------------------- + # IMPORTANT: setter are trigger only if a change is detected + #--------------------------------------------- + if [ $disable_user_registration = "1" ]; then + disabled="true" + fi + if [ $disable_user_registration = "0" ]; then + disabled="false" + fi + + config_auth="$final_path/live/auth.env" + config_auth_worker="$final_path/live/auth-worker.env" + + ynh_write_var_in_file --file="$config_auth" --key="DISABLE_USER_REGISTRATION" --value="$disabled" + ynh_write_var_in_file --file="$config_auth_worker" --key="DISABLE_USER_REGISTRATION" --value="$disabled" + + ynh_store_file_checksum --file="$config_auth" + ynh_store_file_checksum --file="$config_auth_worker" + + ynh_systemd_action \ + --service_name="$app-auth" \ + --action="restart" \ + --log_path="/var/log/$app/auth.log" \ + --line_match='^.*Server started on port.*$|^.*Starting worker.*$' + ynh_systemd_action \ + --service_name="$app-auth-worker" \ + --action="restart" \ + --log_path="/var/log/$app/auth-worker.log" \ + --line_match='^.*Server started on port.*$|^.*Starting worker.*$' + + #--------------------------------------------- + # IMPORTANT: to be able to upgrade properly, you have to saved the value in settings too + #--------------------------------------------- + ynh_app_setting_set --app="$app" --key="disable_user_registration" --value="$disabled" +} + +set__files_limit(){ + #--------------------------------------------- + # IMPORTANT: setter are trigger only if a change is detected + #--------------------------------------------- + config_cron="$final_path/cron.env" + + ynh_write_var_in_file --file="$config_cron" --key="FILES_SIZE" --value="$files_limit" + + ynh_store_file_checksum --file="$config_cron" + + #--------------------------------------------- + # IMPORTANT: to be able to upgrade properly, you have to saved the value in settings too + #--------------------------------------------- + ynh_app_setting_set --app="$app" --key="files_size" --value="$files_limit" +} + +#================================================= +# GENERIC FINALIZATION +#================================================= +ynh_app_config_run $1 diff --git a/scripts/install b/scripts/install index 917cf2f..0bddbcd 100755 --- a/scripts/install +++ b/scripts/install @@ -58,6 +58,11 @@ ynh_app_setting_set --app=$app --key=auth_version --value=$auth_version ynh_app_setting_set --app=$app --key=files_version --value=$files_version ynh_app_setting_set --app=$app --key=syncing_server_version --value=$syncing_server_version +disable_user_registration=false +files_size=100 +ynh_app_setting_set --app=$app --key=DISABLE_USER_REGISTRATION --value=$disable_user_registration +ynh_app_setting_set --app=$app --key=FILES_SIZE --value=$files_size + #================================================= # STANDARD MODIFICATIONS #================================================= diff --git a/scripts/upgrade b/scripts/upgrade index 0f5b487..74da0eb 100755 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -48,6 +48,9 @@ syncing_server_version_installed=$(ynh_app_setting_get --app=$app --key=syncing_ auth_version_installed=$(ynh_app_setting_get --app=$app --key=auth_version) api_gateway_version_installed=$(ynh_app_setting_get --app=$app --key=api_gateway_version) +disable_user_registration=$(ynh_app_setting_get --app=$app --key=DISABLE_USER_REGISTRATION) +files_size=$(ynh_app_setting_get --app=$app --key=FILES_SIZE) + config_api_gateway="$final_path/live/api-gateway.env" config_auth="$final_path/live/auth.env" config_auth_worker="$final_path/live/auth-worker.env" @@ -195,6 +198,16 @@ if [ -z "$valet_token_secret" ]; then valet_token_secret=$(ynh_string_random --length=48 | base64) ynh_app_setting_set --app=$app --key=valet_token_secret --value=$valet_token_secret fi +# If disable_user_registration doesn't exist, create it +if [ -z "$diable_user_registration" ]; then + disable_user_registration=false + ynh_app_setting_set --app=$app --key=DISABLE_USER_REGISTRATION --value=$disable_user_registration +fi +# If files_zise doesn't exist, create it +if [ -z "$files_size" ]; then + files_size=100 + ynh_app_setting_set --app=$app --key=FILES_SIZE --value=$files_size +fi # Remove old Settings, Services, Files, Dependencies From c73657f99459121abd3471295c154dcac243da71 Mon Sep 17 00:00:00 2001 From: Fabian Wilkens Date: Tue, 9 Aug 2022 12:15:54 +0200 Subject: [PATCH 10/21] Fix: ci-auto-updater --- .github/workflows/updater.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/updater.sh b/.github/workflows/updater.sh index add164c..85c4740 100644 --- a/.github/workflows/updater.sh +++ b/.github/workflows/updater.sh @@ -23,7 +23,7 @@ commit="" id=0 while [[ -z $commit && $id -le 29 ]] do - commit=$(curl --silent "https://api.github.com/repos/$repo/commits" | jq -r '.[$id] | .sha' ) + commit=$(curl --silent "https://api.github.com/repos/$repo/commits" | jq -r ".[$id] | .sha" ) tags=$(git -c 'versionsort.suffix=-' ls-remote --tags --sort='v:refname' https://github.com/standardnotes/server.git | grep $commit) if [[ -z $tags || $tags == *"alpha"* ]]; then @@ -41,7 +41,7 @@ version=$(curl --silent "https://api.github.com/repos/$repo/commits/$commit" | j api_gateway_online_version=$(curl --silent "https://raw.githubusercontent.com/$repo/$commit/packages/api-gateway/package.json" | jq -j '.version') auth_online_version=$(curl --silent "https://raw.githubusercontent.com/$repo/$commit/packages/auth/package.json" | jq -j '.version') files_online_version=$(curl --silent "https://raw.githubusercontent.com/$repo/$commit/packages/files/package.json" | jq -j '.version') -ss_online_version=$(curl --silent "https://raw.githubusercontent.com/$repo/$commit/packages/syncing_server/package.json" | jq -j '.#version') +ss_online_version=$(curl --silent "https://raw.githubusercontent.com/$repo/$commit/packages/syncing_server/package.json" | jq -j '.version') # Setting up the environment variables echo "Current version: $current_version" From 2695bdf67e2a3b377845244fb40f6c6f1d74f8ec Mon Sep 17 00:00:00 2001 From: Fabian Wilkens Date: Tue, 9 Aug 2022 12:39:09 +0200 Subject: [PATCH 11/21] Fix: ci-auto-updater --- .github/workflows/updater.sh | 24 ++++++------------------ .github/workflows/updater.yml | 7 +------ 2 files changed, 7 insertions(+), 24 deletions(-) diff --git a/.github/workflows/updater.sh b/.github/workflows/updater.sh index 85c4740..f83f456 100644 --- a/.github/workflows/updater.sh +++ b/.github/workflows/updater.sh @@ -14,8 +14,6 @@ #================================================= # Fetching information -# Current versions are defined in _common.sh -source scripts/_common.sh current_version=$(cat manifest.json | jq -j '.version|split("~")[0]') #repo=$(cat manifest.json | jq -j '.upstream.code|split("https://github.com/")[1]') repo="standardnotes/server" @@ -41,15 +39,10 @@ version=$(curl --silent "https://api.github.com/repos/$repo/commits/$commit" | j api_gateway_online_version=$(curl --silent "https://raw.githubusercontent.com/$repo/$commit/packages/api-gateway/package.json" | jq -j '.version') auth_online_version=$(curl --silent "https://raw.githubusercontent.com/$repo/$commit/packages/auth/package.json" | jq -j '.version') files_online_version=$(curl --silent "https://raw.githubusercontent.com/$repo/$commit/packages/files/package.json" | jq -j '.version') -ss_online_version=$(curl --silent "https://raw.githubusercontent.com/$repo/$commit/packages/syncing_server/package.json" | jq -j '.version') +ss_online_version=$(curl --silent "https://raw.githubusercontent.com/$repo/$commit/packages/syncing-server/package.json" | jq -j '.version') # Setting up the environment variables echo "Current version: $current_version" -echo "API-Gateway: $api_gateway_version" -echo "Auth: $auth_version" -echo "Files: $files_version" -echo "Syncing-Server: $syncing_server_version" -echo "" echo "Latest release from upstream: $version" echo "API-Gateway: $api_gateway_online_version" echo "Auth: $auth_online_version" @@ -58,14 +51,10 @@ echo "Syncing-Server: $ss_online_version" echo "VERSION=$version" >> $GITHUB_ENV echo "VERSION_CURRENT=$current_version" >> $GITHUB_ENV -echo "VERSION_API=$api_gateway_version" >> $GITHUB_ENV -echo "VERSION_API_UPDATE=$api_gateway_online_version" >> $GITHUB_ENV -echo "VERSION_AUTH=$auth_version" >> $GITHUB_ENV -echo "VERSION_AUTH_UPDATE=$auth_online_version" >> $GITHUB_ENV -echo "VERSION_FILES=$files_version" >> $GITHUB_ENV -echo "VERSION_FILES_UPDATE=$files_online_version" >> $GITHUB_ENV -echo "VERSION_SS=$syncing_server_version" >> $GITHUB_ENV -echo "VERSION_SS_UPDATE=$ss_online_version" >> $GITHUB_ENV +echo "VERSION_API=$api_gateway_online_version" >> $GITHUB_ENV +echo "VERSION_AUTH=$auth_online_version" >> $GITHUB_ENV +echo "VERSION_FILES=$files_online_version" >> $GITHUB_ENV +echo "VERSION_SS=$ss_online_version" >> $GITHUB_ENV # For the time being, let's assume the script will fail echo "PROCEED=false" >> $GITHUB_ENV @@ -80,7 +69,7 @@ elif git ls-remote -q --exit-code --heads https://github.com/$GITHUB_REPOSITORY. exit 0 fi -asset="https://github.com/$remote/archive/$commit.tar.gz" +asset="https://github.com/$repo/archive/$commit.tar.gz" #================================================= # UPDATE SOURCE FILES @@ -104,7 +93,6 @@ SOURCE_SUM=$checksum SOURCE_SUM_PRG=sha256sum SOURCE_FORMAT=tar.gz SOURCE_IN_SUBDIR=true -SOURCE_FILENAME= EOT echo "... conf/app.src updated" diff --git a/.github/workflows/updater.yml b/.github/workflows/updater.yml index 2138fe1..a137af4 100644 --- a/.github/workflows/updater.yml +++ b/.github/workflows/updater.yml @@ -46,9 +46,4 @@ jobs: title: 'Upgrade to ${{ env.VERSION }}' body: | Upgrade ${{ env.VERSION_CURRENT }} to ${{ env.VERSION }} - - API-Gateway Version: ${{ env.VERSION_API }} to ${{ env.VERSION_API_UPDATE }} - Auth Version: ${{ env.VERSION_AUTH }} to ${{ env.VERSION_AUTH_UPDATE }} - Files Version: ${{ env.VERSION_FILES }} to ${{ env.VERSION_FILEs_UPDATE }} - Syncing-Server-JS Version: ${{ env.VERSION_SS }} to ${{ env.VERSION_SS_UPDATE }} - draft: true + draft: false From 2ce3dce0278c0452e616d75141e7a93fc57d00f4 Mon Sep 17 00:00:00 2001 From: Fabian Wilkens Date: Tue, 9 Aug 2022 21:17:53 +0200 Subject: [PATCH 12/21] Fix: fix scripts and cleanup --- conf/env_files.env.sample | 4 ++-- scripts/install | 2 +- scripts/remove | 4 ++-- scripts/upgrade | 31 ++++++++++++++++++------------- 4 files changed, 23 insertions(+), 18 deletions(-) diff --git a/conf/env_files.env.sample b/conf/env_files.env.sample index 98ec8ee..3d64490 100644 --- a/conf/env_files.env.sample +++ b/conf/env_files.env.sample @@ -1,6 +1,6 @@ __YNH_NODE_LOAD_PATH__ -LOG_LEVEL="debug" +LOG_LEVEL="info" NODE_ENV="production" VERSION="production" @@ -34,4 +34,4 @@ SQS_QUEUE_URL= SQS_AWS_REGION= # (Optional) File upload path (relative to root directory) -FILE_UPLOAD_PATH=/home/yunohost.app/__APP__/uploads/ +FILE_UPLOAD_PATH=__DATADIR__/uploads/ diff --git a/scripts/install b/scripts/install index 0bddbcd..68c9b82 100755 --- a/scripts/install +++ b/scripts/install @@ -304,7 +304,7 @@ ynh_systemd_action \ #================================================= ynh_script_progression --message="Setup a cron..." -ynh_add_config --template="../conf/cron.env" --destination="__finalpath__/$app.env" +ynh_add_config --template="../conf/cron.env" --destination="$final_path/cron.env" ynh_add_config --template="../conf/cron" --destination="/etc/cron.d/$app" chown root: "/etc/cron.d/$app" diff --git a/scripts/remove b/scripts/remove index a4e94e0..38c82de 100755 --- a/scripts/remove +++ b/scripts/remove @@ -121,8 +121,8 @@ ynh_secure_remove --file="$final_path" # Remove the data directory if --purge option is used if [ "${YNH_APP_PURGE:-0}" -eq 1 ] then - ynh_script_progression --message="Removing app data directory..." --weight=1 - ynh_secure_remove --file="$datadir" + ynh_script_progression --message="Removing app data directory..." --weight=1 + ynh_secure_remove --file="$datadir" fi #================================================= diff --git a/scripts/upgrade b/scripts/upgrade index 74da0eb..715d27e 100755 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -44,10 +44,6 @@ pseudo_key_params_key=$(ynh_app_setting_get --app=$app --key=pseudo_key_params_k encryption_server_key=$(ynh_app_setting_get --app=$app --key=encryption_server_key) valet_token_secret=$(ynh_app_setting_get --app=$app --key=valet_token_secret) -syncing_server_version_installed=$(ynh_app_setting_get --app=$app --key=syncing_server_version) -auth_version_installed=$(ynh_app_setting_get --app=$app --key=auth_version) -api_gateway_version_installed=$(ynh_app_setting_get --app=$app --key=api_gateway_version) - disable_user_registration=$(ynh_app_setting_get --app=$app --key=DISABLE_USER_REGISTRATION) files_size=$(ynh_app_setting_get --app=$app --key=FILES_SIZE) @@ -158,7 +154,7 @@ if [ -z "$port_files" ]; then fi # If port_syncing_server doesn't exist, create it if [ -z "$port_syncing_server" ]; then - port_syncing_server=$(ynh_find_port --port=$((port_files+1))) + port_syncing_server=$(ynh_find_port --port=$((port_files+1))) ynh_app_setting_set --app=$app --key=port_syncing_server --value=$port_syncing_server fi # If port_syncing_server_worker doesn't exist, create it @@ -167,7 +163,6 @@ if [ -z "$port_syncing_server_worker" ]; then ynh_app_setting_set --app=$app --key=port_syncing_server_worker --value=$port_syncing_server_worker fi - # If jwt_secret doesn't exist, create it if [ -z "$jwt_secret" ]; then jwt_secret=$(ynh_string_random --length=48 | base64) @@ -199,7 +194,7 @@ if [ -z "$valet_token_secret" ]; then ynh_app_setting_set --app=$app --key=valet_token_secret --value=$valet_token_secret fi # If disable_user_registration doesn't exist, create it -if [ -z "$diable_user_registration" ]; then +if [ -z "$disable_user_registration" ]; then disable_user_registration=false ynh_app_setting_set --app=$app --key=DISABLE_USER_REGISTRATION --value=$disable_user_registration fi @@ -209,15 +204,26 @@ if [ -z "$files_size" ]; then ynh_app_setting_set --app=$app --key=FILES_SIZE --value=$files_size fi - # Remove old Settings, Services, Files, Dependencies # If final_path_www exist, delete it +api_gateway_version_installed=$(ynh_app_setting_get --app=$app --key=api_gateway_version) +auth_version_installed=$(ynh_app_setting_get --app=$app --key=auth_version) +syncing_server_version_installed=$(ynh_app_setting_get --app=$app --key=syncing_server_version) final_path_www=$(ynh_app_setting_get --app=$app --key=final_path_www) +final_path_extensions=$(ynh_app_setting_get --app=$app --key=final_path_extensions) +if [ -n ${api_gateway_version_installed+x} ]; then + ynh_app_setting_delete --app=$app --key=api_gateway_version_installed +fi +if [ -n ${auth_version_installed+x} ]; then + ynh_app_setting_delete --app=$app --key=auth_version_installe +fi +if [ -n ${syncing_server_version_installed+x} ]; then + ynh_app_setting_delete --app=$app --key=syncing_server_version_installed +fi if [ -n ${final_path_www+x} ]; then ynh_app_setting_delete --app=$app --key=final_path_www fi # If final_path_extensions exist, delete it -final_path_extensions=$(ynh_app_setting_get --app=$app --key=final_path_extensions) if [ -n ${final_path_extensions+x} ]; then ynh_app_setting_delete --app=$app --key=final_path_extensions fi @@ -225,7 +231,7 @@ fi # If permission help exists, delete it if ynh_permission_exists --permission="help" then - ynh_permission_delete --permission="help" + ynh_permission_delete --permission="help" fi # If old service exsits; remove it @@ -240,7 +246,6 @@ then yunohost service remove "$app-syncing-server-js-worker" fi - # Remove unneeded data if [ -e "/var/www/$app" ]; then ynh_secure_remove --file="/var/www/$app" @@ -301,7 +306,7 @@ ynh_script_progression --message="Upgrading dependencies..." --weight=1 # Remove old nodejs version if [[ "$nodejs_version_installed" < "$NODEJS_VERSION" && -n "$nodejs_version_installed" ]] then - ynh_remove_nodejs + ynh_remove_nodejs fi ynh_install_app_dependencies $pkg_dependencies @@ -445,7 +450,7 @@ ynh_systemd_action \ #================================================= ynh_script_progression --message="Setup a cron..." -ynh_add_config --template="../conf/cron.env" --destination="__finalpath__/$app.env" +ynh_add_config --template="../conf/cron.env" --destination="$final_path/cron.env" ynh_add_config --template="../conf/cron" --destination="/etc/cron.d/$app" chown root: "/etc/cron.d/$app" From 353c35f573cb46519994284d5e5e4c6b23dca8cd Mon Sep 17 00:00:00 2001 From: Fabian Wilkens Date: Wed, 10 Aug 2022 16:48:52 +0200 Subject: [PATCH 13/21] Fix: cleanup --- scripts/_common.sh | 5 ----- 1 file changed, 5 deletions(-) diff --git a/scripts/_common.sh b/scripts/_common.sh index 1afc3a9..b515998 100644 --- a/scripts/_common.sh +++ b/scripts/_common.sh @@ -5,11 +5,6 @@ #================================================= NODEJS_VERSION="16" -api_gateway_version="1.40.1" -auth_version="1.46.2" -files_version="0" -syncing_server_version="1.54.1" - swap_needed=2048 node_max_old_space_size=6144 From bd0fea248abe2eaee3fd6131e5db3054d783ee5c Mon Sep 17 00:00:00 2001 From: Fabian Wilkens Date: Wed, 10 Aug 2022 16:49:52 +0200 Subject: [PATCH 14/21] Fix: increase swap & add node_option --max-old-space-size --- scripts/_common.sh | 4 ++-- scripts/install | 6 ++---- scripts/upgrade | 6 ++---- 3 files changed, 6 insertions(+), 10 deletions(-) diff --git a/scripts/_common.sh b/scripts/_common.sh index b515998..ef0c347 100644 --- a/scripts/_common.sh +++ b/scripts/_common.sh @@ -5,8 +5,8 @@ #================================================= NODEJS_VERSION="16" -swap_needed=2048 -node_max_old_space_size=6144 +swap_needed=4096 +node_max_old_space_size=4096 # dependencies used by the app pkg_dependencies="" diff --git a/scripts/install b/scripts/install index 68c9b82..1ee912d 100755 --- a/scripts/install +++ b/scripts/install @@ -198,10 +198,8 @@ ynh_script_progression --message="Installing Standard Notes - Syncing Server..." ynh_use_nodejs pushd "$final_path/live" - #ynh_exec_warn_less ynh_exec_as $app env NODE_OPTIONS="--max-old-space-size=$node_max_old_space_size" PATH=$ynh_node_load_PATH yarn install --pure-lockfile - #ynh_exec_warn_less ynh_exec_as $app env NODE_OPTIONS="--max-old-space-size=$node_max_old_space_size" PATH=$ynh_node_load_PATH yarn build - ynh_exec_warn_less ynh_exec_as $app PATH=$ynh_node_load_PATH yarn install --immutable - ynh_exec_warn_less ynh_exec_as $app PATH=$ynh_node_load_PATH yarn build + ynh_exec_warn_less ynh_exec_as $app env NODE_OPTIONS="--max-old-space-size=$node_max_old_space_size" PATH=$ynh_node_load_PATH yarn install --immutable + ynh_exec_warn_less ynh_exec_as $app env NODE_OPTIONS="--max-old-space-size=$node_max_old_space_size" PATH=$ynh_node_load_PATH yarn build popd #================================================= diff --git a/scripts/upgrade b/scripts/upgrade index 715d27e..167c099 100755 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -343,10 +343,8 @@ then ynh_script_progression --message="Installing Standard Notes - Syncing Server..." --weight=93 ynh_use_nodejs pushd "$final_path/live" - #ynh_exec_warn_less ynh_exec_as $app env NODE_OPTIONS="--max-old-space-size=$node_max_old_space_size" PATH=$ynh_node_load_PATH yarn install --pure-lockfile - #ynh_exec_warn_less ynh_exec_as $app env NODE_OPTIONS="--max-old-space-size=$node_max_old_space_size" PATH=$ynh_node_load_PATH yarn build - ynh_exec_warn_less ynh_exec_as $app PATH=$ynh_node_load_PATH yarn install --immutable - ynh_exec_warn_less ynh_exec_as $app PATH=$ynh_node_load_PATH yarn build + ynh_exec_warn_less ynh_exec_as $app env NODE_OPTIONS="--max-old-space-size=$node_max_old_space_size" PATH=$ynh_node_load_PATH yarn install --immutable + ynh_exec_warn_less ynh_exec_as $app env NODE_OPTIONS="--max-old-space-size=$node_max_old_space_size" PATH=$ynh_node_load_PATH yarn build popd fi From 8228ea26ba058764069a6c7650a53d9cec79e64a Mon Sep 17 00:00:00 2001 From: Fabian Wilkens Date: Wed, 10 Aug 2022 17:03:25 +0200 Subject: [PATCH 15/21] Update: update DISCLAIMER.md --- doc/DISCLAIMER.md | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/doc/DISCLAIMER.md b/doc/DISCLAIMER.md index fd48474..5e58e63 100644 --- a/doc/DISCLAIMER.md +++ b/doc/DISCLAIMER.md @@ -1,8 +1,4 @@ * No single-sign on or LDAP integration -* Ram requirements (Swap memory will be created during install): - * The app requires at least 800MB of RAM to work properly. - * The app requires at least 1000MB of RAM to start. - * The app requires at least 1500MB of RAM to install. +* Ram requirements ( 4GB swap memory will be created during install ): +* Configuration can be changed under: https://my_domain.tld/yunohost/admin/#/apps/$app_id/config-panel -* The ".env" config-files are stored under "/opt/yunohost/$app/live/" -* You can change the url of this app, but than all useres have to reinstall the extensions. From afefc7d99f18419eb387aa0c2842fa3feb7912aa Mon Sep 17 00:00:00 2001 From: yunohost-bot Date: Wed, 10 Aug 2022 15:03:56 +0000 Subject: [PATCH 16/21] Auto-update README --- README.md | 8 ++------ README_fr.md | 8 ++------ 2 files changed, 4 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 177f0b5..4343b46 100644 --- a/README.md +++ b/README.md @@ -24,13 +24,9 @@ The Standard Notes syncing server. An end-to-end encrypted note-taking app. ## Disclaimers / important information * No single-sign on or LDAP integration -* Ram requirements (Swap memory will be created during install): - * The app requires at least 800MB of RAM to work properly. - * The app requires at least 1000MB of RAM to start. - * The app requires at least 1500MB of RAM to install. +* Ram requirements ( 4GB swap memory will be created during install ): +* Configuration can be changed under: https://my_domain.tld/yunohost/admin/#/apps/$app_id/config-panel -* The ".env" config-files are stored under "/opt/yunohost/$app/live/" -* You can change the url of this app, but than all useres have to reinstall the extensions. ## Documentation and resources diff --git a/README_fr.md b/README_fr.md index 1b3b09e..dba54cc 100644 --- a/README_fr.md +++ b/README_fr.md @@ -24,13 +24,9 @@ Si vous n'avez pas YunoHost, regardez [ici](https://yunohost.org/#/install) pour ## Avertissements / informations importantes * No single-sign on or LDAP integration -* Ram requirements (Swap memory will be created during install): - * The app requires at least 800MB of RAM to work properly. - * The app requires at least 1000MB of RAM to start. - * The app requires at least 1500MB of RAM to install. +* Ram requirements ( 4GB swap memory will be created during install ): +* Configuration can be changed under: https://my_domain.tld/yunohost/admin/#/apps/$app_id/config-panel -* The ".env" config-files are stored under "/opt/yunohost/$app/live/" -* You can change the url of this app, but than all useres have to reinstall the extensions. ## Documentations et ressources From 2e29c9c5dd34ed84edf33b043d174f4dc4af56c8 Mon Sep 17 00:00:00 2001 From: Fabian Wilkens Date: Wed, 10 Aug 2022 17:28:54 +0200 Subject: [PATCH 17/21] Fix: cleanup --- scripts/install | 5 ----- 1 file changed, 5 deletions(-) diff --git a/scripts/install b/scripts/install index 1ee912d..1981012 100755 --- a/scripts/install +++ b/scripts/install @@ -53,11 +53,6 @@ ynh_app_setting_set --app=$app --key=redis_db --value="$redis_db" # STORE SETTINGS #================================================= -ynh_app_setting_set --app=$app --key=api_gateway_version --value=$api_gateway_version -ynh_app_setting_set --app=$app --key=auth_version --value=$auth_version -ynh_app_setting_set --app=$app --key=files_version --value=$files_version -ynh_app_setting_set --app=$app --key=syncing_server_version --value=$syncing_server_version - disable_user_registration=false files_size=100 ynh_app_setting_set --app=$app --key=DISABLE_USER_REGISTRATION --value=$disable_user_registration From 36600c383557c1406615d94ab3d92e5efce4c981 Mon Sep 17 00:00:00 2001 From: Fabian Wilkens Date: Wed, 10 Aug 2022 23:15:43 +0200 Subject: [PATCH 18/21] Fix: upgrade & action scripts --- scripts/actions/add_subscription.sh | 2 +- scripts/upgrade | 36 +++++++++++------------------ 2 files changed, 15 insertions(+), 23 deletions(-) diff --git a/scripts/actions/add_subscription.sh b/scripts/actions/add_subscription.sh index f1642ae..c3da3ad 100755 --- a/scripts/actions/add_subscription.sh +++ b/scripts/actions/add_subscription.sh @@ -15,7 +15,7 @@ final_path=$(ynh_app_setting_get $app final_path) if [ ! -f .env ] then - export $(cat $final_path/cron.env | xargs) + export $(cat $final_path/cron.env | grep -v -E "^#" | xargs) fi FILE_UPLOAD_BYTES_PER_MB=1048576 diff --git a/scripts/upgrade b/scripts/upgrade index 167c099..17be4a3 100755 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -132,34 +132,24 @@ if [ -z "$redis_db" ]; then fi -# If port_api_gateway doesn't exist, create it -if [ -z "$port_api_gateway" ]; then +# If one port_* doesn't exist, create all new +if [[ -z "$port_api_gateway" || \ + -z "$port_auth" || \ + -z "$port_auth_worker" || \ + -z "$port_files" || \ + -z "$port_syncing_server" || \ + -z "$port_syncing_server_worker" ]]; then port_api_gateway=$(ynh_find_port --port=3000) - ynh_app_setting_set --app=$app --key=port_api_gateway --value=$port_api_gateway -fi -# If port_auth doesn't exist, create it -if [ -z "$port_auth" ]; then port_auth=$(ynh_find_port --port=$((port_api_gateway+1))) - ynh_app_setting_set --app=$app --key=port_auth --value=$port_auth -fi -# If port_auth_worker doesn't exist, create it -if [ -z "$port_auth_worker" ]; then port_auth_worker=$(ynh_find_port --port=$((port_auth+1))) - ynh_app_setting_set --app=$app --key=port_auth_worker --value=$port_auth_worker -fi -# If port_files doesn't exist, create it -if [ -z "$port_files" ]; then port_files=$(ynh_find_port --port=$((port_auth_worker+1))) - ynh_app_setting_set --app=$app --key=port_files --value=$port_files -fi -# If port_syncing_server doesn't exist, create it -if [ -z "$port_syncing_server" ]; then port_syncing_server=$(ynh_find_port --port=$((port_files+1))) - ynh_app_setting_set --app=$app --key=port_syncing_server --value=$port_syncing_server -fi -# If port_syncing_server_worker doesn't exist, create it -if [ -z "$port_syncing_server_worker" ]; then port_syncing_server_worker=$(ynh_find_port --port=$((port_syncing_server+1))) + ynh_app_setting_set --app=$app --key=port_api_gateway --value=$port_api_gateway + ynh_app_setting_set --app=$app --key=port_auth --value=$port_auth + ynh_app_setting_set --app=$app --key=port_auth_worker --value=$port_auth_worker + ynh_app_setting_set --app=$app --key=port_files --value=$port_files + ynh_app_setting_set --app=$app --key=port_syncing_server --value=$port_syncing_server ynh_app_setting_set --app=$app --key=port_syncing_server_worker --value=$port_syncing_server_worker fi @@ -239,11 +229,13 @@ if ynh_exec_warn_less yunohost service status "$app-syncing-server-js" >/dev/nul then ynh_script_progression --message="Removing old service..." --weight=1 yunohost service remove "$app-syncing-server-js" + ynh_remove_systemd_config --service="$app-syncing-server-js" fi if ynh_exec_warn_less yunohost service status "$app-syncing-server-js-worker" >/dev/null then ynh_script_progression --message="Removing old service..." --weight=1 yunohost service remove "$app-syncing-server-js-worker" + ynh_remove_systemd_config --service="$app-syncing-server-worker-js" fi # Remove unneeded data From 437d1c023bd27bc7f5444fbfc07b5e928f5928f5 Mon Sep 17 00:00:00 2001 From: Fabian Wilkens Date: Thu, 11 Aug 2022 13:20:52 +0200 Subject: [PATCH 19/21] Fix: restore, remove change_url scripts --- scripts/_common.sh | 30 ++++++++++++++++++++++++++++++ scripts/change_url | 9 +++++++++ scripts/remove | 6 ++++++ scripts/restore | 15 +++++++++------ 4 files changed, 54 insertions(+), 6 deletions(-) diff --git a/scripts/_common.sh b/scripts/_common.sh index ef0c347..5023f2d 100644 --- a/scripts/_common.sh +++ b/scripts/_common.sh @@ -15,7 +15,37 @@ pkg_dependencies="" # PERSONAL HELPERS #================================================= +# Substitute/replace a string (or expression) by another in a file on a +# +# usage: ynh_replace_string_occurrence --occurrence=occurrence --match_string=match_string --replace_string=replace_string --target_file=target_file +# | arg: -o, --occurrence= - Replace the nth occurrence in the file +# | arg: -m, --match_string= - String to be searched and replaced in the file +# | arg: -r, --replace_string= - String that will replace matches +# | arg: -f, --target_file= - File in which the string will be replaced. +# +# As this helper is based on sed command, regular expressions and references to +# sub-expressions can be used (see sed manual page for more information) +# +ynh_replace_string_occurrence() { + # Declare an array to define the options of this helper. + local legacy_args=omrf + local -A args_array=([o]=occurrence [m]=match_string= [r]=replace_string= [f]=target_file=) + local occurrence + local match_string + local replace_string + local target_file + # Manage arguments with getopts + ynh_handle_getopts_args "$@" + set +o xtrace # set +x + local delimit=@ + # Escape the delimiter if it's in the string. + match_string=${match_string//${delimit}/"\\${delimit}"} + replace_string=${replace_string//${delimit}/"\\${delimit}"} + + set -o xtrace # set -x + sed --in-place "s${delimit}${match_string}${delimit}${replace_string}${delimit}${occurrence}" "$target_file" +} #================================================ # EXPERIMENTAL HELPERS diff --git a/scripts/change_url b/scripts/change_url index 422835d..7dd9ab8 100644 --- a/scripts/change_url +++ b/scripts/change_url @@ -36,6 +36,8 @@ port_files=$(ynh_app_setting_get --app=$app --key=port_files) port_syncing_server=$(ynh_app_setting_get --app=$app --key=port_syncing_server) port_syncing_server_worker=$(ynh_app_setting_get --app=$app --key=port_syncing_server_worker) +config_api_gateway="$final_path/live/api-gateway.env" + #================================================= # BACKUP BEFORE UPGRADE THEN ACTIVE TRAP #================================================= @@ -104,6 +106,13 @@ fi #================================================= # SPECIFIC MODIFICATIONS #================================================= +# MODIFY CONFIG +#================================================= +ynh_script_progression --message="Modify configuring..." --weight=1 + +ynh_replace_string --match_string="^FILES_SERVER_URL.*$" --replace_string="FILES_SERVER_URL=https://$new_domain$new_path/files" --target_file="$config_api_gateway" +ynh_store_file_checksum --file="$config_api_gateway" + #================================================= # SETUP FAIL2BAN #================================================= diff --git a/scripts/remove b/scripts/remove index 38c82de..969a31c 100755 --- a/scripts/remove +++ b/scripts/remove @@ -153,6 +153,12 @@ ynh_remove_fail2ban_config #================================================= # SPECIFIC REMOVE #================================================= +# REMOVE CRON CONFIGURATION +#================================================= +ynh_script_progression --message="Removing cron configuration..." --weight=1 + +ynh_secure_remove --file="/etc/cron.d/$app" + #================================================= # REMOVE SWAP #================================================= diff --git a/scripts/restore b/scripts/restore index 67ec45f..4522096 100755 --- a/scripts/restore +++ b/scripts/restore @@ -47,6 +47,7 @@ config_auth_worker="$final_path/live/auth-worker.env" config_files="$final_path/live/files.env" config_syncing_server="$final_path/live/syncing-server.env" config_syncing_server_worker="$final_path/live/syncing-server-worker.env" +config_nginx="/etc/nginx/conf.d/$domain.d/$app.conf" #================================================= # CHECK IF THE APP CAN BE RESTORED @@ -165,22 +166,24 @@ ynh_replace_string --match_string="^REDIS_URL.*$" --replace_string="REDIS_URL=re ynh_replace_string --match_string="^REDIS_URL.*$" --replace_string="REDIS_URL=redis://localhost:6379/$redis_db" --target_file="$config_syncing_server_worker" # Syncing_Server Port ynh_replace_string --match_string="^PORT.*$" --replace_string="PORT=$port_syncing_server" --target_file="$config_syncing_server" -ynh_replace_string --match_string="^SYNCING_SERVER_URL.*$" --replace_string="SYNCING_SERVER_URL=$port_syncing_server" --target_file="$config_api_gateway" -ynh_replace_string --match_string="^SYNCING_SERVER_URL.*$" --replace_string="SYNCING_SERVER_URL=$port_syncing_server" --target_file="$config_auth" -ynh_replace_string --match_string="^SYNCING_SERVER_URL.*$" --replace_string="SYNCING_SERVER_URL=$port_syncing_server" --target_file="$config_auth_worker" +ynh_replace_string --match_string="^SYNCING_SERVER_JS_URL.*$" --replace_string="SYNCING_SERVER_JS_URL=http://localhost:$port_syncing_server" --target_file="$config_api_gateway" +ynh_replace_string --match_string="^SYNCING_SERVER_URL.*$" --replace_string="SYNCING_SERVER_URL=http://localhost:$port_syncing_server" --target_file="$config_auth" +ynh_replace_string --match_string="^SYNCING_SERVER_URL.*$" --replace_string="SYNCING_SERVER_URL=http://localhost:$port_syncing_server" --target_file="$config_auth_worker" # Syncing_Server_Worker Port ynh_replace_string --match_string="^PORT.*$" --replace_string="PORT=$port_syncing_server_worker" --target_file="$config_syncing_server_worker" # Auth Port ynh_replace_string --match_string="^PORT.*$" --replace_string="PORT=$port_auth" --target_file="$config_auth" -ynh_replace_string --match_string="^AUTH_SERVER_URL.*$" --replace_string="AUTH_SERVER_URL=$port_auth" --target_file="$config_api_gateway" -ynh_replace_string --match_string="^AUTH_SERVER_URL.*$" --replace_string="AUTH_SERVER_URL=$port_auth" --target_file="$config_syncing_server" -ynh_replace_string --match_string="^AUTH_SERVER_URL.*$" --replace_string="AUTH_SERVER_URL=$port_auth" --target_file="$config_syncing_server_worker" +ynh_replace_string --match_string="^AUTH_SERVER_URL.*$" --replace_string="AUTH_SERVER_URL=http://localhost:$port_auth" --target_file="$config_api_gateway" +ynh_replace_string --match_string="^AUTH_SERVER_URL.*$" --replace_string="AUTH_SERVER_URL=http://localhost:$port_auth" --target_file="$config_syncing_server" +ynh_replace_string --match_string="^AUTH_SERVER_URL.*$" --replace_string="AUTH_SERVER_URL=http://localhost:$port_auth" --target_file="$config_syncing_server_worker" # Auth_Worker Port ynh_replace_string --match_string="^PORT.*$" --replace_string="PORT=$port_auth_worker" --target_file="$config_auth_worker" # API-Gateway Port ynh_replace_string --match_string="^PORT.*$" --replace_string="PORT=$port_api_gateway" --target_file="$config_api_gateway" +ynh_replace_string_occurrence --occurrence="1" --match_string="^proxy_pass.*$" --replace_string="proxy_pass http://127.0.0.1:$port_api_gateway/;" --target_file="$config_nginx" # Files Port ynh_replace_string --match_string="^PORT.*$" --replace_string="PORT=$port_files" --target_file="$config_files" +ynh_replace_string_occurrence --occurrence="2" --match_string="^proxy_pass.*$" --replace_string="proxy_pass http://127.0.0.1:$port_files/;" --target_file="$config_nginx" #================================================= # RESTORE SYSTEMD From 7d745505667b4263889af7acea2467a550f1b7a0 Mon Sep 17 00:00:00 2001 From: Fabian Wilkens Date: Fri, 12 Aug 2022 16:53:32 +0200 Subject: [PATCH 20/21] Fix: scripts --- scripts/_common.sh | 6 ++++++ scripts/remove | 2 ++ scripts/restore | 4 ++-- scripts/upgrade | 4 +++- sources/extra_files/cron.sh | 2 +- 5 files changed, 14 insertions(+), 4 deletions(-) diff --git a/scripts/_common.sh b/scripts/_common.sh index 5023f2d..edcbb3b 100644 --- a/scripts/_common.sh +++ b/scripts/_common.sh @@ -15,6 +15,12 @@ pkg_dependencies="" # PERSONAL HELPERS #================================================= + +# Reset failed systemd services. +ynh_reset_systemd(){ + systemctl reset-failed +} + # Substitute/replace a string (or expression) by another in a file on a # # usage: ynh_replace_string_occurrence --occurrence=occurrence --match_string=match_string --replace_string=replace_string --target_file=target_file diff --git a/scripts/remove b/scripts/remove index 969a31c..1b7c9f5 100755 --- a/scripts/remove +++ b/scripts/remove @@ -82,6 +82,8 @@ ynh_remove_systemd_config --service="$app-files" ynh_remove_systemd_config --service="$app-syncing-server" ynh_remove_systemd_config --service="$app-syncing-server-worker" +ynh_reset_systemd + #================================================= # REMOVE THE MYSQL DATABASE #================================================= diff --git a/scripts/restore b/scripts/restore index 4522096..7182150 100755 --- a/scripts/restore +++ b/scripts/restore @@ -180,10 +180,10 @@ ynh_replace_string --match_string="^AUTH_SERVER_URL.*$" --replace_string="AUTH_S ynh_replace_string --match_string="^PORT.*$" --replace_string="PORT=$port_auth_worker" --target_file="$config_auth_worker" # API-Gateway Port ynh_replace_string --match_string="^PORT.*$" --replace_string="PORT=$port_api_gateway" --target_file="$config_api_gateway" -ynh_replace_string_occurrence --occurrence="1" --match_string="^proxy_pass.*$" --replace_string="proxy_pass http://127.0.0.1:$port_api_gateway/;" --target_file="$config_nginx" +ynh_replace_string_occurrence --occurrence="1" --match_string="proxy_pass.*$" --replace_string="proxy_pass http://127.0.0.1:$port_api_gateway/;" --target_file="$config_nginx" # Files Port ynh_replace_string --match_string="^PORT.*$" --replace_string="PORT=$port_files" --target_file="$config_files" -ynh_replace_string_occurrence --occurrence="2" --match_string="^proxy_pass.*$" --replace_string="proxy_pass http://127.0.0.1:$port_files/;" --target_file="$config_nginx" +ynh_replace_string_occurrence --occurrence="2" --match_string="proxy_pass.*$" --replace_string="proxy_pass http://127.0.0.1:$port_files/;" --target_file="$config_nginx" #================================================= # RESTORE SYSTEMD diff --git a/scripts/upgrade b/scripts/upgrade index 17be4a3..ad9d81f 100755 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -230,12 +230,14 @@ then ynh_script_progression --message="Removing old service..." --weight=1 yunohost service remove "$app-syncing-server-js" ynh_remove_systemd_config --service="$app-syncing-server-js" + ynh_reset_systemd fi if ynh_exec_warn_less yunohost service status "$app-syncing-server-js-worker" >/dev/null then ynh_script_progression --message="Removing old service..." --weight=1 yunohost service remove "$app-syncing-server-js-worker" - ynh_remove_systemd_config --service="$app-syncing-server-worker-js" + ynh_remove_systemd_config --service="$app-syncing-server-js-worker" + ynh_reset_systemd fi # Remove unneeded data diff --git a/sources/extra_files/cron.sh b/sources/extra_files/cron.sh index 2e5f2be..5be7ea4 100755 --- a/sources/extra_files/cron.sh +++ b/sources/extra_files/cron.sh @@ -2,7 +2,7 @@ if [ ! -f .env ] then - export $(cat cron.env | xargs) + export $(cat cron.env | grep -v -E "^#" | xargs) fi FILE_UPLOAD_BYTES_PER_MB=1048576 From e52fd430558bc410c67c18e138cb84b046022bb7 Mon Sep 17 00:00:00 2001 From: Fabian Wilkens Date: Fri, 12 Aug 2022 23:17:56 +0200 Subject: [PATCH 21/21] Fix: restore script --- scripts/_common.sh | 17 ++++++++--------- scripts/restore | 4 ++-- 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/scripts/_common.sh b/scripts/_common.sh index edcbb3b..8a95269 100644 --- a/scripts/_common.sh +++ b/scripts/_common.sh @@ -15,16 +15,15 @@ pkg_dependencies="" # PERSONAL HELPERS #================================================= - # Reset failed systemd services. ynh_reset_systemd(){ systemctl reset-failed } -# Substitute/replace a string (or expression) by another in a file on a +# Substitute/replace a string (or expression) by another in a file on a line # -# usage: ynh_replace_string_occurrence --occurrence=occurrence --match_string=match_string --replace_string=replace_string --target_file=target_file -# | arg: -o, --occurrence= - Replace the nth occurrence in the file +# usage: ynh_replace_string_on_line --line=line --match_string=match_string --replace_string=replace_string --target_file=target_file +# | arg: -l, --line= - Replace match on nth line in the file # | arg: -m, --match_string= - String to be searched and replaced in the file # | arg: -r, --replace_string= - String that will replace matches # | arg: -f, --target_file= - File in which the string will be replaced. @@ -32,11 +31,11 @@ ynh_reset_systemd(){ # As this helper is based on sed command, regular expressions and references to # sub-expressions can be used (see sed manual page for more information) # -ynh_replace_string_occurrence() { +ynh_replace_string_on_line() { # Declare an array to define the options of this helper. - local legacy_args=omrf - local -A args_array=([o]=occurrence [m]=match_string= [r]=replace_string= [f]=target_file=) - local occurrence + local legacy_args=lmrf + local -A args_array=([l]=line= [m]=match_string= [r]=replace_string= [f]=target_file=) + local line local match_string local replace_string local target_file @@ -50,7 +49,7 @@ ynh_replace_string_occurrence() { replace_string=${replace_string//${delimit}/"\\${delimit}"} set -o xtrace # set -x - sed --in-place "s${delimit}${match_string}${delimit}${replace_string}${delimit}${occurrence}" "$target_file" + sed --in-place "${line} s${delimit}${match_string}${delimit}${replace_string}${delimit}" "$target_file" } #================================================ diff --git a/scripts/restore b/scripts/restore index 7182150..60b186c 100755 --- a/scripts/restore +++ b/scripts/restore @@ -180,10 +180,10 @@ ynh_replace_string --match_string="^AUTH_SERVER_URL.*$" --replace_string="AUTH_S ynh_replace_string --match_string="^PORT.*$" --replace_string="PORT=$port_auth_worker" --target_file="$config_auth_worker" # API-Gateway Port ynh_replace_string --match_string="^PORT.*$" --replace_string="PORT=$port_api_gateway" --target_file="$config_api_gateway" -ynh_replace_string_occurrence --occurrence="1" --match_string="proxy_pass.*$" --replace_string="proxy_pass http://127.0.0.1:$port_api_gateway/;" --target_file="$config_nginx" +ynh_replace_string_on_line --line="2" --match_string="proxy_pass.*$" --replace_string="proxy_pass http://127.0.0.1:$port_api_gateway/;" --target_file="$config_nginx" # Files Port ynh_replace_string --match_string="^PORT.*$" --replace_string="PORT=$port_files" --target_file="$config_files" -ynh_replace_string_occurrence --occurrence="2" --match_string="proxy_pass.*$" --replace_string="proxy_pass http://127.0.0.1:$port_files/;" --target_file="$config_nginx" +ynh_replace_string_on_line --line="17" --match_string="proxy_pass.*$" --replace_string="proxy_pass http://127.0.0.1:$port_files/;" --target_file="$config_nginx" #================================================= # RESTORE SYSTEMD