diff --git a/README.md b/README.md index a482755..19ec395 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ If you don't have YunoHost, please consult [the guide](https://yunohost.org/#/in CryptPad is a collaboration suite that is end-to-end-encrypted and open-source. It is built to enable collaboration, synchronizing changes to documents in real time. Because all data is encrypted, the service and its administrators have no way of seeing the content being edited and stored. -**Shipped version:** 5.2.1~ynh6 +**Shipped version:** 5.2.1~ynh7 **Demo:** https://cryptpad.fr/ @@ -26,24 +26,6 @@ CryptPad is a collaboration suite that is end-to-end-encrypted and open-source. ![Screenshot of CryptPad](./doc/screenshots/screenshot.png) -## Disclaimers / important information - -## Configuration - -We have added the mandatory sandbox domain for you but you still need to configure your DNS and generate Let's Encrypt Certificates for it !! - -Once CryptPad is installed, create an account via the Register button on the home page. To make this account an instance administrator: - -1. Copy the public key found in User Menu (avatar at the top right) > Settings > Account > Public Signing Key -2. Paste this key in `/var/www/cryptpad/config/config.js` in the following array (uncomment and replace the placeholder): -``` -adminKeys: [ - "[cryptpad-user1@my.awesome.website/YZgXQxKR0Rcb6r6CmxHPdAGLVludrAF2lEnkbx1vVOo=]", -], -``` - -3. Restart CryptPad service (In YunoHost webadmin -> Services -> cryptpad -> Restart) - ## Documentation and resources * Official app website: diff --git a/README_fr.md b/README_fr.md index 648affb..42aac78 100644 --- a/README_fr.md +++ b/README_fr.md @@ -18,7 +18,7 @@ Si vous n’avez pas YunoHost, regardez [ici](https://yunohost.org/#/install) po CryptPad est une suite de collaboration chiffrée de bout en bout et open source. Il est conçu pour permettre la collaboration, en synchronisant les modifications apportées aux documents en temps réel. Étant donné que toutes les données sont chiffrées, le service et ses administrateurs n'ont aucun moyen de voir le contenu modifié et stocké. -**Version incluse :** 5.2.1~ynh6 +**Version incluse :** 5.2.1~ynh7 **Démo :** https://cryptpad.fr/ @@ -26,24 +26,6 @@ CryptPad est une suite de collaboration chiffrée de bout en bout et open source ![Capture d’écran de CryptPad](./doc/screenshots/screenshot.png) -## Avertissements / informations importantes - -## Configuration - -Nous avons ajouté le domaine obligatoire sandbox pour vous mais vous devez encore configurer votre DNS et générer les certificats pour celui-ci. - -Une fois CryptPad installé, créez un compte via le bouton S'inscrire sur la page d'accueil. Pour faire de ce compte un administrateur d'instance : - -1. Copiez la clé publique trouvée dans le menu utilisateur (avatar en haut à droite) > Paramètres > Compte > Clé de signature publique -2. Collez cette clé dans `/var/www/cryptpad/config/config.js` dans le tableau suivant (décommentez et remplacez l'espace réservé) : -``` -adminKeys: [ - "[cryptpad-user1@my.awesome.website/YZgXQxKR0Rcb6r6CmxHPdAGLVludrAF2lEnkbx1vVOo=]", -], -``` - -3. Redémarrer le service CryptPad (Dans webadmin YunoHost -> Services -> cryptpad -> Redémarrer) - ## Documentations et ressources * Site officiel de l’app : diff --git a/check_process b/check_process deleted file mode 100644 index 657867b..0000000 --- a/check_process +++ /dev/null @@ -1,30 +0,0 @@ -;; Test complet - ; Manifest - domain="domain.tld" - is_public=1 - admin="john" - ; Checks - pkg_linter=1 - setup_sub_dir=0 - setup_root=1 - setup_nourl=0 - setup_private=1 - setup_public=1 - upgrade=1 - #4.10.0 - upgrade=1 from_commit=2a54cd03f90c93b07150a64644ffc7f208110a18 - #4.12.0 - upgrade=1 from_commit=1e36039893dc35533b320257ca7f93ef1d07a164 - backup_restore=1 - multi_instance=0 - port_already_use=0 - change_url=1 -;;; Options -Email= -Notification=none -;;; Upgrade options - ; commit=2a54cd03f90c93b07150a64644ffc7f208110a18 - name=update to 4.10.0 -;;; Upgrade options - ; commit=1e36039893dc35533b320257ca7f93ef1d07a164 - name=update to 4.12.0 diff --git a/conf/app.src b/conf/app.src deleted file mode 100644 index 2ab7c07..0000000 --- a/conf/app.src +++ /dev/null @@ -1,6 +0,0 @@ -SOURCE_URL=https://github.com/xwiki-labs/cryptpad/archive/5.2.1.tar.gz -SOURCE_SUM=945abe5bae0da25a4e2ef8e02730aaa5bb5e5a0b8bfd7a23a09ec38422d7c47f -SOURCE_SUM_PRG=sha256sum -SOURCE_FORMAT=tar.gz -SOURCE_IN_SUBDIR=true -SOURCE_FILENAME=cryptpad.tar.gz diff --git a/conf/config.js b/conf/config.js index 3b3d188..768b0bf 100644 --- a/conf/config.js +++ b/conf/config.js @@ -95,7 +95,7 @@ module.exports = { * that of your httpPort + 1. You probably don't need to change this. * */ - httpSafePort: __PORTI__, + httpSafePort: __PORT_PORTI__, /* CryptPad will launch a child process for every core available * in order to perform CPU-intensive tasks in parallel. diff --git a/conf/nginx.conf b/conf/nginx.conf index 3fdbc28..fba1cd7 100644 --- a/conf/nginx.conf +++ b/conf/nginx.conf @@ -10,7 +10,7 @@ more_set_headers "X-Content-Type-Options: nosniff"; more_set_headers "Access-Control-Allow-Origin: '${allowed_origins}'"; more_set_headers "Cross-Origin-Resource-Policy: cross-origin"; more_set_headers "Cross-Origin-Embedder-Policy: require-corp"; -root __FINALPATH__/; +root __INSTALL_DIR__/; index index.html; error_page 404 /customize.dist/404.html; if ($uri ~ ^(\/|.*\/|.*\.html)$) { diff --git a/conf/systemd.service b/conf/systemd.service index b4c0368..91f3747 100644 --- a/conf/systemd.service +++ b/conf/systemd.service @@ -1,12 +1,12 @@ [Unit] -Description=Zero Knowledge realtime collaborative editor. +Description=CryptPad: Zero Knowledge realtime collaborative editor. After=syslog.target network.target [Service] Type=simple User=__APP__ Group=__APP__ -WorkingDirectory=__FINALPATH__ +WorkingDirectory=__INSTALL_DIR__ Environment=PATH=__ENV_PATH__ Environment=NODE_ENV=production ExecStart=__YNH_NPM__ start diff --git a/doc/DISCLAIMER.md b/doc/ADMIN.md similarity index 97% rename from doc/DISCLAIMER.md rename to doc/ADMIN.md index 4a2f596..697dfd8 100644 --- a/doc/DISCLAIMER.md +++ b/doc/ADMIN.md @@ -1,5 +1,3 @@ -## Configuration - We have added the mandatory sandbox domain for you but you still need to configure your DNS and generate Let's Encrypt Certificates for it !! Once CryptPad is installed, create an account via the Register button on the home page. To make this account an instance administrator: diff --git a/doc/DISCLAIMER_fr.md b/doc/ADMIN_fr.md similarity index 100% rename from doc/DISCLAIMER_fr.md rename to doc/ADMIN_fr.md diff --git a/doc/POST_INSTALL.md b/doc/POST_INSTALL.md new file mode 100644 index 0000000..d617b01 --- /dev/null +++ b/doc/POST_INSTALL.md @@ -0,0 +1,13 @@ +We have added a sandbox domain: __SANDBOXDOMAIN__ for you but you still need to configure your DNS and generate the Let's Encrypt Certificates for it. +You will need also to restart CryptPad service after this is done. + +Then you can please open CryptPad domain: https://__DOMAIN__ +Once CryptPad is installed, create an account via the Sign Up button on the home page which will take you to the Register page. +To make this account an instance administrator: + +1. Copy the public key found in User Menu (avatar at the top right) > Settings > Account > Public Signing Key +2. Paste this key in /var/www/cryptpad/config/config.js in the following array (uncomment and replace the placeholder): + +adminKeys: [ + "[cryptpad-user1@my.awesome.website/YZgXQxKR0Rcb6r6CmxHPdAGLVludrAF2lEnkbx1vVOo=]", +], diff --git a/doc/POST_UPGRADE.md b/doc/POST_UPGRADE.md new file mode 100644 index 0000000..6023335 --- /dev/null +++ b/doc/POST_UPGRADE.md @@ -0,0 +1,10 @@ +We have added a sandbox domain for you but you still need to configure your DNS and generate Let's Encrypt Certificates for it !! +If not already done, then you can please open CryptPad domain: https://__DOMAIN__ + +Create an account via the Register button on the home page. To make this account an instance administrator: +1. Copy the public key found in User Menu (avatar at the top right) > Settings > Account > Public Signing Key +2. Paste this key in /var/www/cryptpad/config/config.js in the following array (uncomment and replace the placeholder): +adminKeys: [ + "[cryptpad-user1@my.awesome.website/YZgXQxKR0Rcb6r6CmxHPdAGLVludrAF2lEnkbx1vVOo=]", +], +If you are facing an issue or want to improve this app, please open a new issue in this project: https://github.com/YunoHost-Apps/cryptpad_ynh" diff --git a/manifest.json b/manifest.json deleted file mode 100644 index 8128f96..0000000 --- a/manifest.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "name": "CryptPad", - "id": "cryptpad", - "packaging_format": 1, - "description": { - "en": "Zero Knowledge realtime collaborative office suite", - "fr": "Suite bureautique chiffrée pour la collaboration en temps réel" - }, - "version": "5.2.1~ynh6", - "url": "https://cryptpad.fr/", - "upstream": { - "license": "AGPL-3.0-only", - "website": "https://cryptpad.fr/", - "demo": "https://cryptpad.fr/", - "admindoc": "https://docs.cryptpad.fr/en/", - "code": "https://github.com/xwiki-labs/cryptpad", - "cpe": "cpe:2.3:a:xwiki:cryptpad" - }, - "license": "AGPL-3.0-only", - "maintainer": { - "name": "frju365", - "email": "win10@tutanota.com", - "url": "https://frju365.yunohost.support" - }, - "requirements": { - "yunohost": ">= 11.1.6" - }, - "multi_instance": false, - "services": [ - "nginx" - ], - "arguments": { - "install": [ - { - "name": "domain", - "type": "domain", - "help": { - "en": "CryptPad needs to be installed in a dedicated domain or sub-domain.", - "fr": "CryptPad doit être installé dans un domaine ou sous-domaine dédié." - } - }, - { - "name": "is_public", - "type": "boolean", - "help": { - "en": "If enabled, CryptPad will be accessible by people who do not have an account. This can be changed later via the webadmin.", - "fr": "Si cette case est cochée, CryptPad sera accessible aux personnes n’ayant pas de compte. Vous pourrez changer ceci plus tard via la webadmin." - }, - "default": true - }, - { - "name": "admin", - "type": "user" - } - ] - } -} diff --git a/manifest.toml b/manifest.toml new file mode 100644 index 0000000..2dfcaf7 --- /dev/null +++ b/manifest.toml @@ -0,0 +1,61 @@ +packaging_format = 2 + +id = "cryptpad" +name = "CryptPad" +description.en = "Zero Knowledge realtime collaborative office suite" +description.fr = "Suite bureautique chiffrée pour la collaboration en temps réel" + +version = "5.2.1~ynh7" + +maintainers = ["ddataa"] + +[upstream] +license = "AGPL-3.0-only" +website = "https://cryptpad.fr/" +demo = "https://cryptpad.fr/" +admindoc = "https://docs.cryptpad.fr/en/" +code = "https://github.com/xwiki-labs/cryptpad" +cpe = "cpe:2.3:a:xwiki:cryptpad" +fund = "https://opencollective.com/cryptpad/contribute?language=fr" + +[integration] +yunohost = ">= 11.1.15" +architectures = "all" +multi_instance = false +ldap = false +sso = false +disk = "50M" +ram.build = "350M" +ram.runtime = "50M" + +[install] + [install.domain] + help.en = "CryptPad needs to be installed in a dedicated domain or sub-domain." + help.fr = "CryptPad doit être installé dans un domaine ou sous-domaine dédié." + type = "domain" + full_domain = true + + [install.init_main_permission] + help.en = "If enabled, CryptPad will be accessible by people who do not have an account. This can be changed later via the webadmin." + help.fr = "Si cette case est cochée, CryptPad sera accessible aux personnes n’ayant pas de compte. Vous pourrez changer ceci plus tard via la webadmin." + type = "group" + default = "visitors" + + [install.admin] + type = "user" + +[resources] + [resources.sources.main] + url = "https://github.com/xwiki-labs/cryptpad/archive/5.2.1.tar.gz" + sha256 = "945abe5bae0da25a4e2ef8e02730aaa5bb5e5a0b8bfd7a23a09ec38422d7c47f" + + [resources.ports] + main.default = 3000 + porti.default = 3001 + + [resources.system_user] + + [resources.install_dir] + + [resources.permissions] + main.url = "/" diff --git a/scripts/_common.sh b/scripts/_common.sh index af38340..447f5df 100644 --- a/scripts/_common.sh +++ b/scripts/_common.sh @@ -14,63 +14,6 @@ nodejs_version="16.14.2" # EXPERIMENTAL HELPERS #================================================= -# Send an email to inform the administrator -# -# usage: ynh_send_readme_to_admin app_message [recipients] -# | arg: app_message - The message to send to the administrator. -# | arg: 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" -ynh_send_readme_to_admin() { - local app_message="${1:-...No specific information...}" - local recipients="${2:-root}" - - # 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") - - local mail_subject="☁️🆈🅽🅷☁️: \`$app\` has important message for you" - - local mail_message="This is an automated message from your beloved YunoHost server. -Specific information for the application $app. -$app_message ---- -Automatic diagnosis data from YunoHost -$(yunohost tools diagnosis | grep -B 100 "services:" | sed '/services:/d')" - - # 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 - - # Send the email to the recipients - echo "$mail_message" | $mail_bin -a "Content-Type: text/plain; charset=UTF-8" -s "$mail_subject" "$recipients" -} - #================================================= # FUTURE OFFICIAL HELPERS #================================================= diff --git a/scripts/backup b/scripts/backup index d72c557..7189d8c 100644 --- a/scripts/backup +++ b/scripts/backup @@ -10,26 +10,6 @@ source ../settings/scripts/_common.sh source /usr/share/yunohost/helpers -#================================================= -# MANAGE SCRIPT FAILURE -#================================================= - -ynh_clean_setup () { - true -} -# Exit if an error occurs during the execution of the script -ynh_abort_if_errors - -#================================================= -# LOAD SETTINGS -#================================================= -ynh_print_info --message="Loading installation settings..." - -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) - #================================================= # DECLARE DATA AND CONF FILES TO BACKUP #================================================= @@ -39,7 +19,7 @@ ynh_print_info --message="Declaring files to be backed up..." # BACKUP THE APP MAIN DIR #================================================= -ynh_backup --src_path="$final_path" +ynh_backup --src_path="$install_dir" #================================================= # BACKUP THE NGINX CONFIGURATION diff --git a/scripts/change_url b/scripts/change_url index f1d87e1..5d35e69 100644 --- a/scripts/change_url +++ b/scripts/change_url @@ -9,60 +9,6 @@ source _common.sh source /usr/share/yunohost/helpers -#================================================= -# RETRIEVE ARGUMENTS -#================================================= - -old_domain=$YNH_APP_OLD_DOMAIN -old_path=$YNH_APP_OLD_PATH - -new_domain=$YNH_APP_NEW_DOMAIN -new_path="/" - -app=$YNH_APP_INSTANCE_NAME - -#================================================= -# LOAD SETTINGS -#================================================= -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) - -#================================================= -# BACKUP BEFORE CHANGE URL THEN ACTIVE TRAP -#================================================= -ynh_script_progression --message="Backing up the app before changing its URL (may take a while)..." --weight=2 - -# Backup the current version of the app -ynh_backup_before_upgrade -ynh_clean_setup () { - ynh_clean_check_starting - # Remove the new domain config file, the remove script won't do it as it doesn't know yet its location. - ynh_secure_remove --file="/etc/nginx/conf.d/$new_domain.d/$app.conf" - - # Restore it if the upgrade fails - ynh_restore_upgradebackup -} -# Exit if an error occurs during the execution of the script -ynh_abort_if_errors - -#================================================= -# CHECK WHICH PARTS SHOULD BE CHANGED -#================================================= - -change_domain=0 -if [ "$old_domain" != "$new_domain" ] -then - change_domain=1 -fi - -change_path=0 -if [ "$old_path" != "$new_path" ] -then - change_path=1 -fi - #================================================= # STANDARD MODIFICATIONS #================================================= @@ -77,29 +23,7 @@ ynh_systemd_action --service_name=$app --action="stop" --log_path="/var/log/$app #================================================= ynh_script_progression --message="Updating NGINX web server configuration..." --weight=1 -nginx_conf_path=/etc/nginx/conf.d/$old_domain.d/$app.conf - -# Change the path in the NGINX config file -if [ $change_path -eq 1 ] -then - # Make a backup of the original NGINX config file if modified - ynh_backup_if_checksum_is_different --file="$nginx_conf_path" - # Set global variables for NGINX helper - domain="$old_domain" - path_url="$new_path" - # Create a dedicated NGINX config - ynh_add_nginx_config -fi - -# Change the domain for NGINX -if [ $change_domain -eq 1 ] -then - # Delete file checksum for the old conf file location - ynh_delete_file_checksum --file="$nginx_conf_path" - mv $nginx_conf_path /etc/nginx/conf.d/$new_domain.d/$app.conf - # Store file checksum for the new config file location - ynh_store_file_checksum --file="/etc/nginx/conf.d/$new_domain.d/$app.conf" -fi +ynh_change_url_nginx_config #================================================= # GENERIC FINALISATION @@ -110,13 +34,6 @@ ynh_script_progression --message="Starting a systemd service..." --weight=1 ynh_systemd_action --service_name=$app --action="start" --log_path=systemd --line_match="server available" -#================================================= -# RELOAD NGINX -#================================================= -ynh_script_progression --message="Reloading NGINX web server..." --weight=1 - -ynh_systemd_action --service_name=nginx --action=reload - #================================================= # END OF SCRIPT #================================================= diff --git a/scripts/install b/scripts/install index 883a1e8..5be5342 100644 --- a/scripts/install +++ b/scripts/install @@ -9,63 +9,12 @@ source _common.sh source /usr/share/yunohost/helpers -#================================================= -# MANAGE SCRIPT FAILURE -#================================================= - -ynh_clean_setup () { - ynh_clean_check_starting -} -# Exit if an error occurs during the execution of the script -ynh_abort_if_errors - #================================================= # RETRIEVE ARGUMENTS FROM THE MANIFEST #================================================= -domain=$YNH_APP_ARG_DOMAIN -path_url="/" -is_public=$YNH_APP_ARG_IS_PUBLIC -admin=$YNH_APP_ARG_ADMIN email=$(ynh_user_get_info --username=$admin --key=mail) -app=$YNH_APP_INSTANCE_NAME - -#================================================= -# CHECK IF THE APP CAN BE INSTALLED WITH THESE ARGS -#================================================= -ynh_script_progression --message="Validating installation parameters..." --weight=1 - -final_path=/var/www/$app -test ! -e "$final_path" || ynh_die --message="This path already contains a folder" - -# Register (book) web path -ynh_webpath_register --app=$app --domain=$domain --path_url=$path_url - -#================================================= -# STORE SETTINGS FROM MANIFEST -#================================================= -ynh_script_progression --message="Storing installation settings..." - -ynh_app_setting_set --app=$app --key=domain --value=$domain -ynh_app_setting_set --app=$app --key=path --value=$path_url -ynh_app_setting_set --app=$app --key=admin --value=$admin - -#================================================= -# STANDARD MODIFICATIONS -#================================================= -# FIND AND OPEN A PORT -#================================================= -ynh_script_progression --message="Finding an available port..." --weight=1 - -# Find an available port -port=$(ynh_find_port --port=3000) -ynh_app_setting_set --app=$app --key=port --value=$port - -# Find an available port -porti=$(ynh_find_port --port=$(($port + 1))) -ynh_app_setting_set --app=$app --key=porti --value=$porti - #================================================= # CREATE A SANDBOX DOMAIN #================================================= @@ -83,6 +32,8 @@ if [[ $domain == *".local" ]]; then sandboxdomain=sandbox-$domain fi +ynh_app_setting_set --app=$app --key=sandboxdomain --value=$sandboxdomain + ynh_script_progression --message="Setting up sandobx domain : $sandboxdomain" --weight=1 # We don't test that in CI @@ -98,60 +49,47 @@ ynh_script_progression --message="Installing dependencies..." --weight=20 ynh_exec_warn_less ynh_install_nodejs --nodejs_version=$nodejs_version -#================================================= -# CREATE DEDICATED USER -#================================================= -ynh_script_progression --message="Configuring system user..." --weight=1 - -# Create a system user -ynh_system_user_create --username=$app --home_dir="$final_path" - #================================================= # DOWNLOAD, CHECK AND UNPACK SOURCE #================================================= ynh_script_progression --message="Setting up source files..." --weight=10 -ynh_app_setting_set --app=$app --key=final_path --value=$final_path # Download, check integrity, uncompress and patch the source from app.src -ynh_setup_source --dest_dir="$final_path" +ynh_setup_source --dest_dir="$install_dir" -chmod 750 "$final_path" -chmod -R o-rwx "$final_path" -chown -R $app:$app "$final_path" +chmod -R o-rwx "$install_dir" +chown -R $app:$app "$install_dir" #================================================= -# NGINX CONFIGURATION +# SYSTEM CONFIGURATION #================================================= -ynh_script_progression --message="Configuring NGINX web server..." --weight=1 +ynh_script_progression --message="Adding system configurations related to $app..." --weight=1 # Create a dedicated NGINX config ynh_add_nginx_config +env_path="$PATH" +# Create a dedicated systemd config +ynh_add_systemd_config + +yunohost service add $app --description="Zero Knowledge realtime collaborative editor" --log="/var/log/$app/$app.log" + #================================================= # ADD A CONFIGURATION #================================================= ynh_script_progression --message="Adding a configuration file..." -ynh_add_config --template="../conf/config.js" --destination="$final_path/config/config.js" +ynh_add_config --template="../conf/config.js" --destination="$install_dir/config/config.js" -chmod 600 "$final_path/config/config.js" -chown $app "$final_path/config/config.js" - -#================================================= -# SETUP SYSTEMD -#================================================= -ynh_script_progression --message="Configuring a systemd service..." --weight=1 - -env_path="$PATH" -# Create a dedicated systemd config -ynh_add_systemd_config +chmod 600 "$install_dir/config/config.js" +chown $app "$install_dir/config/config.js" #================================================= # INSTALL CRYPTPAD #================================================= ynh_script_progression --message="Building $app... (this will take some time and resources!)" --weight=60 -pushd "$final_path" +pushd "$install_dir" ynh_use_nodejs ynh_exec_warn_less npm install --allow-root ynh_exec_warn_less npm install -g bower @@ -160,15 +98,6 @@ pushd "$final_path" ynh_exec_warn_less npm run build popd -#================================================= -# GENERIC FINALIZATION -#================================================= -# INTEGRATE SERVICE IN YUNOHOST -#================================================= -ynh_script_progression --message="Integrating service in YunoHost..." --weight=1 - -yunohost service add $app --description="Zero Knowledge realtime collaborative editor" --log="/var/log/$app/$app.log" - #================================================= # START SYSTEMD SERVICE #================================================= @@ -180,13 +109,6 @@ ynh_systemd_action --service_name=$app --action="start" --log_path="systemd" #================================================= # SETUP SSOWAT #================================================= -ynh_script_progression --message="Configuring permissions..." --weight=1 - -# Make app public if necessary -if [ $is_public -eq 1 ] -then - ynh_permission_update --permission="main" --add="visitors" -fi # We authorize access to sandbox domain # We don't test that in CI @@ -197,51 +119,18 @@ fi #================================================= # APPLY FOLDER RIGHTS #================================================= -chgrp -R www-data $final_path + +chgrp -R www-data $install_dir #================================================= # COPY NGINX CONF IN SANDBOX DOMAIN #================================================= + # We don't test that in CI if ! [ ${PACKAGE_CHECK_EXEC:-0} -eq 1 ]; then ynh_add_config --template="/etc/nginx/conf.d/$domain.d/cryptpad.conf" --destination="/etc/nginx/conf.d/$sandboxdomain.d/cryptpad.conf" fi -#================================================= -# RELOAD NGINX -#================================================= -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..." --weight=1 - -message="CryptPad was successfully installed :) - -READ CAREFULLY !! - -We have added a sandbox domain : $sandboxdomain for you but you still need to configure your DNS and generate the Let's Encrypt Certificates for it. -You will need also to restart CryptPad service after this is done. - -Then you can please open your $app domain: https://$domain$path_url -Once CryptPad is installed, create an account via the Sign Up button on the home page which will take you to the Register page. -To make this account an instance administrator: - -1. Copy the public key found in User Menu (avatar at the top right) > Settings > Account > Public Signing Key -2. Paste this key in /var/www/cryptpad/config/config.js in the following array (uncomment and replace the placeholder): - -adminKeys: [ - "[cryptpad-user1@my.awesome.website/YZgXQxKR0Rcb6r6CmxHPdAGLVludrAF2lEnkbx1vVOo=]", -], - - -If you are facing an issue or want to improve this app, please open a new issue in this project: https://github.com/YunoHost-Apps/cryptpad_ynh" - -ynh_send_readme_to_admin "$message" - #================================================= # END OF SCRIPT #================================================= diff --git a/scripts/remove b/scripts/remove index 6a1ae2e..dbc0282 100644 --- a/scripts/remove +++ b/scripts/remove @@ -10,21 +10,11 @@ source _common.sh source /usr/share/yunohost/helpers #================================================= -# LOAD SETTINGS +# REMOVE SYSTEM CONFIGURATIONS #================================================= -ynh_script_progression --message="Loading installation settings..." --weight=1 - -app=$YNH_APP_INSTANCE_NAME - -domain=$(ynh_app_setting_get --app=$app --key=domain) -port=$(ynh_app_setting_get --app=$app --key=port) -final_path=$(ynh_app_setting_get --app=$app --key=final_path) - -#================================================= -# STANDARD REMOVE -#================================================= -# REMOVE SERVICE INTEGRATION IN YUNOHOST +# REMOVE SYSTEMD SERVICE #================================================= +ynh_script_progression --message="Removing system configurations related to $app..." --weight=1 # Remove the service from the list of services known by YunoHost (added from `yunohost service add`) if ynh_exec_warn_less yunohost service status $app >/dev/null @@ -33,27 +23,9 @@ then yunohost service remove $app fi -#================================================= -# STOP AND REMOVE SERVICE -#================================================= -ynh_script_progression --message="Stopping and removing the systemd service..." --weight=2 - # Remove the dedicated systemd config ynh_remove_systemd_config -#================================================= -# REMOVE APP MAIN DIR -#================================================= -ynh_script_progression --message="Removing app main directory..." --weight=3 - -# Remove the app directory securely -ynh_secure_remove --file="$final_path" - -#================================================= -# REMOVE NGINX CONFIGURATION -#================================================= -ynh_script_progression --message="Removing NGINX web server configuration..." --weight=1 - # Remove the dedicated NGINX config ynh_remove_nginx_config @@ -94,22 +66,6 @@ if ! [ ${PACKAGE_CHECK_EXEC:-0} -eq 1 ]; then fi fi - -#================================================= -# RELOAD YUNOHOST-API to refresh web admin domains after domain creation (bug core?) -#================================================= -#ynh_systemd_action --service_name=yunohost-api --action=reload - -#================================================= -# GENERIC FINALIZATION -#================================================= -# REMOVE DEDICATED USER -#================================================= -ynh_script_progression --message="Removing the dedicated system user..." --weight=1 - -# Delete a system user -ynh_system_user_delete --username=$app - #================================================= # END OF SCRIPT #================================================= diff --git a/scripts/restore b/scripts/restore index 8bea0d0..b8a266e 100644 --- a/scripts/restore +++ b/scripts/restore @@ -10,68 +10,22 @@ source ../settings/scripts/_common.sh source /usr/share/yunohost/helpers -#================================================= -# MANAGE SCRIPT FAILURE -#================================================= - -ynh_clean_setup () { - ynh_clean_check_starting -} -# Exit if an error occurs during the execution of the script -ynh_abort_if_errors - -#================================================= -# LOAD SETTINGS -#================================================= -ynh_script_progression --message="Loading installation settings..." --weight=1 - -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) - -#================================================= -# CHECK IF THE APP CAN BE RESTORED -#================================================= -ynh_script_progression --message="Validating restoration parameters..." --weight=1 - -test ! -d $final_path \ - || ynh_die --message="There is already a directory: $final_path " - -#================================================= -# STANDARD RESTORATION STEPS -#================================================= -# RESTORE THE NGINX CONFIGURATION -#================================================= -ynh_script_progression --message="Restoring the NGINX web server configuration..." - -ynh_restore_file --origin_path="/etc/nginx/conf.d/$domain.d/$app.conf" - -#================================================= -# RECREATE THE DEDICATED USER -#================================================= -ynh_script_progression --message="Recreating the dedicated system user..." --weight=1 - -# Create the dedicated user (if not existing) -ynh_system_user_create --username=$app --home_dir="$final_path" - #================================================= # RESTORE THE APP MAIN DIR #================================================= ynh_script_progression --message="Restoring the app main directory..." --weight=6 -ynh_restore_file --origin_path="$final_path" +ynh_restore_file --origin_path="$install_dir" -chmod 750 "$final_path" -chmod -R o-rwx "$final_path" -chown -R $app:$app "$final_path" -chmod 600 "$final_path/config/config.js" +chmod -R o-rwx "$install_dir" +chown -R $app:$app "$install_dir" +chmod 600 "$install_dir/config/config.js" #================================================= # APPLY FOLDER GROUP RIGHTS FOR WWW-DATA #================================================= -chgrp -R www-data $final_path + +chgrp -R www-data $install_dir #================================================= # REINSTALL DEPENDENCIES @@ -82,33 +36,27 @@ ynh_script_progression --message="Reinstalling dependencies..." --weight=7 ynh_exec_warn_less ynh_install_nodejs --nodejs_version=$nodejs_version #================================================= -# RESTORE SYSTEMD +# RESTORE SYSTEM CONFIGURATIONS #================================================= -ynh_script_progression --message="Restoring the systemd configuration..." --weight=1 +# RESTORE THE PHP-FPM CONFIGURATION +#================================================= +ynh_script_progression --message="Restoring system configurations related to $app..." --weight=1 + +ynh_restore_file --origin_path="/etc/nginx/conf.d/$domain.d/$app.conf" ynh_restore_file --origin_path="/etc/systemd/system/$app.service" systemctl enable $app.service --quiet -#================================================= -# INTEGRATE SERVICE IN YUNOHOST -#================================================= -ynh_script_progression --message="Integrating service in YunoHost..." --weight=1 - yunohost service add $app --description="Zero Knowledge realtime collaborative editor" --log="/var/log/$app/$app.log" -#================================================= -# START SYSTEMD SERVICE -#================================================= -ynh_script_progression --message="Starting a systemd service..." --weight=1 - -ynh_systemd_action --service_name=$app --action="start" --log_path=systemd --line_match="server available" - #================================================= # GENERIC FINALIZATION #================================================= -# RELOAD NGINX +# RELOAD NGINX AND PHP-FPM OR THE APP SERVICE #================================================= -ynh_script_progression --message="Reloading NGINX web server..." --weight=1 +ynh_script_progression --message="Reloading NGINX web server and $app's service..." --weight=1 + +ynh_systemd_action --service_name=$app --action="start" --log_path=systemd --line_match="server available" ynh_systemd_action --service_name=nginx --action=reload diff --git a/scripts/upgrade b/scripts/upgrade index a48e2fc..e55c805 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -14,38 +14,14 @@ source /usr/share/yunohost/helpers #================================================= ynh_script_progression --message="Loading installation settings..." --weight=1 -app=$YNH_APP_INSTANCE_NAME - -domain=$(ynh_app_setting_get --app=$app --key=domain) -path_url=$(ynh_app_setting_get --app=$app --key=path) -admin=$(ynh_app_setting_get --app=$app --key=admin) -final_path=$(ynh_app_setting_get --app=$app --key=final_path) email=$(ynh_user_get_info --username=$admin --key=mail) -port=$(ynh_app_setting_get --app=$app --key=port) -porti=$(ynh_app_setting_get --app=$app --key=porti) #================================================= # CHECK VERSION #================================================= -ynh_script_progression --message="Checking version..." upgrade_type=$(ynh_check_app_version_changed) -#================================================= -# BACKUP BEFORE UPGRADE THEN ACTIVE TRAP -#================================================= -ynh_script_progression --message="Backing up the app before upgrading (may take a while)..." --weight=1 - -# Backup the current version of the app -ynh_backup_before_upgrade -ynh_clean_setup () { - ynh_clean_check_starting - # Restore it if the upgrade fails - ynh_restore_upgradebackup -} -# Exit if an error occurs during the execution of the script -ynh_abort_if_errors - #================================================= # STANDARD UPGRADE STEPS #================================================= @@ -55,32 +31,6 @@ ynh_script_progression --message="Stopping a systemd service..." --weight=1 ynh_systemd_action --service_name=$app --action="stop" --log_path="/var/log/$app/$app.log" -#================================================= -# ENSURE DOWNWARD COMPATIBILITY -#================================================= -ynh_script_progression --message="Ensuring downward compatibility..." --weight=2 - -# If final_path doesn't exist, create it -if [ -z "$final_path" ]; then - final_path=/var/www/$app - ynh_app_setting_set --app=$app --key=final_path --value=$final_path -fi - -# Cleaning legacy permissions -if ynh_legacy_permissions_exists; then - ynh_legacy_permissions_delete_all - - ynh_app_setting_delete --app=$app --key=is_public -fi - -#================================================= -# CREATE DEDICATED USER -#================================================= -ynh_script_progression --message="Making sure dedicated system user exists..." --weight=1 - -# Create a dedicated user (if not existing) -ynh_system_user_create --username=$app --home_dir="$final_path" - #================================================= # DOWNLOAD, CHECK AND UNPACK SOURCE #================================================= @@ -90,21 +40,22 @@ then ynh_script_progression --message="Upgrading source files..." --weight=1 # Download, check integrity, uncompress and patch the source from app.src - ynh_setup_source --dest_dir="$final_path" --keep="config/config.js" + ynh_setup_source --dest_dir="$install_dir" #--keep="config/config.js" - chmod 750 "$final_path" - chmod -R o-rwx "$final_path" - chown -R $app:$app "$final_path" + chmod -R o-rwx "$install_dir" + chown -R $app:$app "$install_dir" fi #================================================= # APPLY FOLDER GROUP RIGHTS FOR WWW-DATA #================================================= -chgrp -R www-data $final_path + +chgrp -R www-data $install_dir #================================================= # CREATE A SANDBOX DOMAIN #================================================= + # if the main domain for the app is a root domain, we create a correct sandbox subdomain if [[ $domain == *"."* ]]; then sandboxdomain=sandbox.$domain @@ -137,6 +88,7 @@ ynh_script_progression --message="Upgrading NGINX web server configuration..." - # Create a dedicated NGINX config ynh_add_nginx_config +env_path="$PATH" #================================================= # UPGRADE DEPENDENCIES #================================================= @@ -149,7 +101,7 @@ ynh_exec_warn_less ynh_install_nodejs --nodejs_version=$nodejs_version #================================================= ynh_script_progression --message="Building $app... (this will take some time and resources!)" --weight=60 -pushd "$final_path" +pushd "$install_dir" ynh_exec_warn_less npm install --allow-root ynh_exec_warn_less npm install -g bower ynh_exec_warn_less bower update --allow-root @@ -158,27 +110,22 @@ pushd "$final_path" popd #================================================= -# SETUP SYSTEMD +# CREATE SYSTEMD SERVICE #================================================= -ynh_script_progression --message="Upgrading systemd configuration..." --weight=1 - -env_path="$PATH" # Create a dedicated systemd config ynh_add_systemd_config -#================================================= -# GENERIC FINALIZATION -#================================================= -# INTEGRATE SERVICE IN YUNOHOST -#================================================= -ynh_script_progression --message="Integrating service in YunoHost..." --weight=1 - yunohost service add $app --description="Zero Knowledge realtime collaborative editor" --log="/var/log/$app/$app.log" #================================================= # ADD UPGRADED CONFIG WITH SANDBOX #================================================= -ynh_add_config --template="../conf/config.js" --destination="$final_path/config/config.js" +ynh_script_progression --message="Updating a configuration file..." --weight=1 + +ynh_add_config --template="../conf/config.js" --destination="$install_dir/config/config.js" + +chmod 600 "$install_dir/config/config.js" +chown $app "$install_dir/config/config.js" #================================================= # START SYSTEMD SERVICE @@ -190,6 +137,7 @@ ynh_systemd_action --service_name=$app --action="start" --log_path=systemd --lin #================================================= # COPY NGINX CONF IN SANDBOX DOMAIN #================================================= + # We don't test that in CI if ! [ ${PACKAGE_CHECK_EXEC:-0} -eq 1 ]; then if [ -n "$sandboxdomain" ]; then @@ -203,32 +151,6 @@ if ! [ ${PACKAGE_CHECK_EXEC:-0} -eq 1 ]; then ynh_permission_url --permission="main" --add_url=$sandboxdomain --auth_header=true fi -#================================================= -# RELOAD NGINX -#================================================= -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..." --weight=1 - -message="CryptPad was successfully upgraded :) -We have added a sandbox domain for you but you still need to configure your DNS and generate Let's Encrypt Certificates for it !! -If not already done, then you can please open your $app domain: https://$domain$path_url -Create an account via the Register button on the home page. To make this account an instance administrator: -1. Copy the public key found in User Menu (avatar at the top right) > Settings > Account > Public Signing Key -2. Paste this key in /var/www/cryptpad/config/config.js in the following array (uncomment and replace the placeholder): -adminKeys: [ - "[cryptpad-user1@my.awesome.website/YZgXQxKR0Rcb6r6CmxHPdAGLVludrAF2lEnkbx1vVOo=]", -], -If you are facing an issue or want to improve this app, please open a new issue in this project: https://github.com/YunoHost-Apps/cryptpad_ynh" - -ynh_send_readme_to_admin "$message" - - #================================================= # END OF SCRIPT #================================================= diff --git a/tests.toml b/tests.toml new file mode 100644 index 0000000..c9ccc0e --- /dev/null +++ b/tests.toml @@ -0,0 +1,11 @@ +test_format = 1.0 + +[default] + + # ------------------------------- + # Commits to test upgrade from + # ------------------------------- + + test_upgrade_from.2a54cd03.name = "Upgrade from 4.10.0" + + test_upgrade_from.1e360398.name = "Upgrade from 4.12.0"