From 09d946cf3e456e146729f4a8227cb6ddcd2ce0d1 Mon Sep 17 00:00:00 2001 From: Miraty Date: Sun, 25 Oct 2020 16:31:23 +0100 Subject: [PATCH 1/8] Remove --time and --weight=1 --- scripts/backup | 8 ++++---- scripts/change_url | 6 +++--- scripts/install | 18 +++++++++--------- scripts/remove | 10 +++++----- scripts/restore | 10 +++++----- scripts/upgrade | 32 ++++++++++---------------------- 6 files changed, 36 insertions(+), 48 deletions(-) diff --git a/scripts/backup b/scripts/backup index e9f5b01..18a3c31 100755 --- a/scripts/backup +++ b/scripts/backup @@ -24,7 +24,7 @@ ynh_abort_if_errors #================================================= # LOAD SETTINGS #================================================= -ynh_script_progression --message="Loading installation settings..." --time --weight=1 +ynh_script_progression --message="Loading installation settings..." app=$YNH_APP_INSTANCE_NAME @@ -37,21 +37,21 @@ domain=$(ynh_app_setting_get --app=$app --key=domain) #================================================= # BACKUP THE APP MAIN DIR #================================================= -ynh_script_progression --message="Backing up the main app directory..." --time --weight=1 +ynh_script_progression --message="Backing up the main app directory..." ynh_backup --src_path="$final_path" #================================================= # BACKUP THE NGINX CONFIGURATION #================================================= -ynh_script_progression --message="Backing up nginx web server configuration..." --time --weight=1 +ynh_script_progression --message="Backing up nginx web server configuration..." ynh_backup --src_path="/etc/nginx/conf.d/$domain.d/$app.conf" #================================================= # BACKUP THE PHP-FPM CONFIGURATION #================================================= -ynh_script_progression --message="Backing up php-fpm configuration..." --time --weight=1 +ynh_script_progression --message="Backing up php-fpm configuration..." ynh_backup --src_path="/etc/php/7.0/fpm/pool.d/$app.conf" diff --git a/scripts/change_url b/scripts/change_url index 997a61b..eeee689 100755 --- a/scripts/change_url +++ b/scripts/change_url @@ -24,7 +24,7 @@ app=$YNH_APP_INSTANCE_NAME #================================================= # LOAD SETTINGS #================================================= -ynh_script_progression --message="Loading installation settings..." --time --weight=1 +ynh_script_progression --message="Loading installation settings..." # Needed for helper "ynh_add_nginx_config" final_path=$(ynh_app_setting_get --app=$app --key=final_path) @@ -56,7 +56,7 @@ fi #================================================= # MODIFY URL IN NGINX CONF #================================================= -ynh_script_progression --message="Updating nginx web server configuration..." --time --weight=1 +ynh_script_progression --message="Updating nginx web server configuration..." nginx_conf_path=/etc/nginx/conf.d/$old_domain.d/$app.conf @@ -85,7 +85,7 @@ fi #================================================= # RELOAD NGINX #================================================= -ynh_script_progression --message="Reloading nginx web server..." --time --weight=1 +ynh_script_progression --message="Reloading nginx web server..." ynh_systemd_action --service_name=nginx --action=reload diff --git a/scripts/install b/scripts/install index 97fca39..515c4fe 100755 --- a/scripts/install +++ b/scripts/install @@ -51,7 +51,7 @@ app=$YNH_APP_INSTANCE_NAME ### Use the execution time, given by --time, to estimate the weight of a step. ### A common way to do it is to set a weight equal to the execution time in second +1. ### The execution time is given for the duration since the previous call. So the weight should be applied to this previous call. -ynh_script_progression --message="Validating installation parameters..." --time --weight=1 +ynh_script_progression --message="Validating installation parameters..." ### If the app uses nginx as web server (written in HTML/PHP in most cases), the final path should be "/var/www/$app". ### If the app provides an internal web server (or uses another application server such as uwsgi), the final path should be "/opt/yunohost/$app" @@ -64,7 +64,7 @@ ynh_webpath_register --app=$app --domain=$domain --path_url=$path_url #================================================= # STORE SETTINGS FROM MANIFEST #================================================= -ynh_script_progression --message="Storing installation settings..." --time --weight=1 +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 @@ -77,7 +77,7 @@ ynh_app_setting_set --app=$app --key=final_path --value=$final_path #================================================= # DOWNLOAD, CHECK AND UNPACK SOURCE #================================================= -ynh_script_progression --message="Setting up source files..." --weight=1 +ynh_script_progression --message="Setting up source files..." ### `ynh_setup_source` is used to install an app from a zip or tar.gz file, ### downloaded from an upstream source, like a git repository. @@ -89,7 +89,7 @@ ynh_setup_source --dest_dir="$final_path" #================================================= # NGINX CONFIGURATION #================================================= -ynh_script_progression --message="Configuring nginx web server..." --time --weight=1 +ynh_script_progression --message="Configuring nginx web server..." ### `ynh_add_nginx_config` will use the file conf/nginx.conf @@ -99,7 +99,7 @@ ynh_add_nginx_config #================================================= # CREATE DEDICATED USER #================================================= -ynh_script_progression --message="Configuring system user..." --time --weight=1 +ynh_script_progression --message="Configuring system user..." # Create a system user ynh_system_user_create --username=$app @@ -107,7 +107,7 @@ ynh_system_user_create --username=$app #================================================= # PHP-FPM CONFIGURATION #================================================= -ynh_print_info "Configuring php-fpm..." --time --weight=1 +ynh_script_progression "Configuring php-fpm..." ### `ynh_add_fpm_config` is used to set up a PHP config. ### You can remove it if your app doesn't use PHP. @@ -140,7 +140,7 @@ chmod -R g+w $final_path #================================================= # SETUP SSOWAT #================================================= -ynh_script_progression --message="Configuring SSOwat..." --time --weight=1 +ynh_script_progression --message="Configuring SSOwat..." # Make app public if necessary if [ $is_public -eq 1 ] @@ -152,7 +152,7 @@ fi #================================================= # RELOAD NGINX #================================================= -ynh_script_progression --message="Reloading nginx web server..." --time --weight=1 +ynh_script_progression --message="Reloading nginx web server..." ynh_systemd_action --service_name=nginx --action=reload @@ -160,4 +160,4 @@ ynh_systemd_action --service_name=nginx --action=reload # END OF SCRIPT #================================================= -ynh_script_progression --message="Installation of $app completed" --time --last +ynh_script_progression --message="Installation of $app completed" --last diff --git a/scripts/remove b/scripts/remove index 9390010..623bb1d 100755 --- a/scripts/remove +++ b/scripts/remove @@ -12,7 +12,7 @@ source /usr/share/yunohost/helpers #================================================= # LOAD SETTINGS #================================================= -ynh_script_progression --message="Loading installation settings..." --time --weight=1 +ynh_script_progression --message="Loading installation settings..." app=$YNH_APP_INSTANCE_NAME @@ -26,7 +26,7 @@ final_path=$(ynh_app_setting_get --app=$app --key=final_path) #================================================= # REMOVE APP MAIN DIR #================================================= -ynh_script_progression --message="Removing app main directory..." --time --weight=1 +ynh_script_progression --message="Removing app main directory..." # Remove the app directory securely ynh_secure_remove --file="$final_path" @@ -34,7 +34,7 @@ ynh_secure_remove --file="$final_path" #================================================= # REMOVE NGINX CONFIGURATION #================================================= -ynh_script_progression --message="Removing nginx web server configuration..." --time --weight=1 +ynh_script_progression --message="Removing nginx web server configuration..." # Remove the dedicated nginx config ynh_remove_nginx_config @@ -42,7 +42,7 @@ ynh_remove_nginx_config #================================================= # REMOVE PHP-FPM CONFIGURATION #================================================= -ynh_script_progression --message="Removing php-fpm configuration..." --time --weight=1 +ynh_script_progression --message="Removing php-fpm configuration..." # Remove the dedicated php-fpm config ynh_remove_fpm_config @@ -52,7 +52,7 @@ ynh_remove_fpm_config #================================================= # REMOVE DEDICATED USER #================================================= -ynh_script_progression --message="Removing the dedicated system user..." --time --weight=1 +ynh_script_progression --message="Removing the dedicated system user..." # Delete a system user ynh_system_user_delete --username=$app diff --git a/scripts/restore b/scripts/restore index 18f6c21..0dd3e39 100755 --- a/scripts/restore +++ b/scripts/restore @@ -24,7 +24,7 @@ ynh_abort_if_errors #================================================= # LOAD SETTINGS #================================================= -ynh_script_progression --message="Loading settings..." --time --weight=1 +ynh_script_progression --message="Loading settings..." app=$YNH_APP_INSTANCE_NAME @@ -35,7 +35,7 @@ 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..." --time --weight=1 +ynh_script_progression --message="Validating restoration parameters..." ynh_webpath_available --domain=$domain --path_url=$path_url \ || ynh_die --message="Path not available: ${domain}${path_url}" @@ -53,14 +53,14 @@ ynh_restore_file --origin_path="/etc/nginx/conf.d/$domain.d/$app.conf" #================================================= # RESTORE THE APP MAIN DIR #================================================= -ynh_script_progression --message="Restoring the app main directory..." --time --weight=1 +ynh_script_progression --message="Restoring the app main directory..." ynh_restore_file --origin_path="$final_path" #================================================= # RECREATE THE DEDICATED USER #================================================= -ynh_script_progression --message="Recreating the dedicated system user..." --time --weight=1 +ynh_script_progression --message="Recreating the dedicated system user..." # Create the dedicated user (if not existing) ynh_system_user_create --username=$app @@ -84,7 +84,7 @@ ynh_restore_file --origin_path="/etc/php/7.0/fpm/pool.d/$app.conf" #================================================= # RELOAD NGINX AND PHP-FPM #================================================= -ynh_script_progression --message="Reloading nginx web server and php-fpm..." --time --weight=1 +ynh_script_progression --message="Reloading nginx web server and php-fpm..." ynh_systemd_action --service_name=php7.0-fpm --action=reload ynh_systemd_action --service_name=nginx --action=reload diff --git a/scripts/upgrade b/scripts/upgrade index adf36be..cd303b6 100755 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -12,7 +12,7 @@ source /usr/share/yunohost/helpers #================================================= # LOAD SETTINGS #================================================= -ynh_script_progression --message="Loading installation settings..." --time --weight=1 +ynh_script_progression --message="Loading installation settings..." app=$YNH_APP_INSTANCE_NAME @@ -36,7 +36,7 @@ upgrade_type=$(ynh_check_app_version_changed) #================================================= # ENSURE DOWNWARD COMPATIBILITY #================================================= -ynh_script_progression --message="Ensuring downward compatibility..." --time --weight=1 +ynh_script_progression --message="Ensuring downward compatibility..." # Fix is_public as a boolean value if [ "$is_public" = "Yes" ]; then @@ -56,7 +56,7 @@ fi #================================================= # BACKUP BEFORE UPGRADE THEN ACTIVE TRAP #================================================= -ynh_script_progression --message="Backing up the app before upgrading (may take a while)..." --time --weight=1 +ynh_script_progression --message="Backing up the app before upgrading (may take a while)..." # Backup the current version of the app ynh_backup_before_upgrade @@ -67,18 +67,6 @@ ynh_clean_setup () { # Exit if an error occurs during the execution of the script ynh_abort_if_errors -#================================================= -# CHECK THE PATH -#================================================= - -# Normalize the URL path syntax -# N.B. : this is for app installations before YunoHost 2.7 -# where this value might be something like /foo/ or foo/ -# instead of /foo .... -# If nobody installed your app before 2.7, then you may -# safely remove this line -path_url=$(ynh_normalize_url_path --path_url=$path_url) - #================================================= # STANDARD UPGRADE STEPS #================================================= @@ -89,7 +77,7 @@ path_url=$(ynh_normalize_url_path --path_url=$path_url) if [ "$upgrade_type" == "UPGRADE_APP" ] then - ynh_script_progression --message="Upgrading source files..." --time --weight=1 + ynh_script_progression --message="Upgrading source files..." # Download, check integrity, uncompress and patch the source from app.src ynh_setup_source --dest_dir="$final_path" @@ -105,7 +93,7 @@ fi #================================================= # NGINX CONFIGURATION #================================================= -ynh_script_progression --message="Upgrading nginx web server configuration..." --time --weight=1 +ynh_script_progression --message="Upgrading nginx web server configuration..." # Create a dedicated nginx config ynh_add_nginx_config @@ -113,14 +101,14 @@ ynh_add_nginx_config #================================================= # UPGRADE DEPENDENCIES #================================================= -#ynh_script_progression --message="Upgrading dependencies..." --time --weight=1 +#ynh_script_progression --message="Upgrading dependencies..." #ynh_install_app_dependencies $pkg_dependencies #================================================= # CREATE DEDICATED USER #================================================= -ynh_script_progression --message="Making sure dedicated system user exists..." --time --weight=1 +ynh_script_progression --message="Making sure dedicated system user exists..." # Create a dedicated user (if not existing) ynh_system_user_create --username=$app @@ -128,7 +116,7 @@ ynh_system_user_create --username=$app #================================================= # PHP-FPM CONFIGURATION #================================================= -ynh_script_progression --message="Upgrading php-fpm configuration..." --time --weight=1 +ynh_script_progression --message="Upgrading php-fpm configuration..." # Create a dedicated php-fpm config ynh_add_fpm_config @@ -156,7 +144,7 @@ chmod -R g+w $final_path #================================================= # SETUP SSOWAT #================================================= -ynh_script_progression --message="Upgrading SSOwat configuration..." --time --weight=1 +ynh_script_progression --message="Upgrading SSOwat configuration..." # Make app public if necessary if [ $is_public -eq 1 ] @@ -168,7 +156,7 @@ fi #================================================= # RELOAD NGINX #================================================= -ynh_script_progression --message="Reloading nginx web server..." --time --weight=1 +ynh_script_progression --message="Reloading nginx web server..." ynh_systemd_action --service_name=nginx --action=reload -- 2.30.2 From 7b6119f07ef2de6914df950a41f28e4c9fa0883a Mon Sep 17 00:00:00 2001 From: Miraty Date: Sun, 25 Oct 2020 16:31:52 +0100 Subject: [PATCH 2/8] Use new (ynh 3.8) permission system --- scripts/install | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/scripts/install b/scripts/install index 515c4fe..3a66cf6 100755 --- a/scripts/install +++ b/scripts/install @@ -145,8 +145,7 @@ ynh_script_progression --message="Configuring SSOwat..." # Make app public if necessary if [ $is_public -eq 1 ] then - # unprotected_uris allows SSO credentials to be passed anyway. - ynh_app_setting_set --app=$app --key=unprotected_uris --value="/" + ynh_permission_update --permission "main" --add visitors fi #================================================= -- 2.30.2 From 3d96d42f0e03c0596a8a014e930fa67e515fe038 Mon Sep 17 00:00:00 2001 From: Miraty Date: Sun, 25 Oct 2020 16:32:10 +0100 Subject: [PATCH 3/8] php7.0 > php7.3 --- conf/nginx.conf | 2 +- conf/php-fpm.conf | 2 +- manifest.json | 20 ++++++++------------ screenshot.png | Bin 4 files changed, 10 insertions(+), 14 deletions(-) mode change 100644 => 100755 screenshot.png diff --git a/conf/nginx.conf b/conf/nginx.conf index f2277ea..37de41d 100755 --- a/conf/nginx.conf +++ b/conf/nginx.conf @@ -18,7 +18,7 @@ location __PATH__/ { try_files $uri $uri/ index.php; location ~ [^/]\.php(/|$) { fastcgi_split_path_info ^(.+?\.php)(/.*)$; - fastcgi_pass unix:/var/run/php/php7.0-fpm-__NAME__.sock; + fastcgi_pass unix:/var/run/php/php__PHPVERSION__-fpm-__NAME__.sock; fastcgi_index index.php; include fastcgi_params; diff --git a/conf/php-fpm.conf b/conf/php-fpm.conf index ab5dca9..ab1a471 100755 --- a/conf/php-fpm.conf +++ b/conf/php-fpm.conf @@ -33,7 +33,7 @@ group = __USER__ ; (IPv6 and IPv4-mapped) on a specific port; ; '/path/to/unix/socket' - to listen on a unix socket. ; Note: This value is mandatory. -listen = /var/run/php/php7.0-fpm-__NAMETOCHANGE__.sock +listen = /var/run/php/php__PHPVERSION__-fpm-__NAMETOCHANGE__.sock ; Set listen(2) backlog. ; Default Value: 511 (-1 on FreeBSD and OpenBSD) diff --git a/manifest.json b/manifest.json index 34b6316..4271581 100755 --- a/manifest.json +++ b/manifest.json @@ -3,11 +3,11 @@ "id": "qr", "packaging_format": 1, "description": { - "en": "A QR codes generator", - "fr": "Un générateur de codes QR" + "en": "QR codes generator", + "fr": "Générateur de codes QR" }, "version": "1.2.0~ynh2", - "url": "https://code.antopie.org/miraty/libreqr/", + "url": "https://code.antopie.org/miraty/libreqr", "license": "AGPL-3.0-or-later", "maintainer": { "name": "Miraty", @@ -15,12 +15,12 @@ "url": "https://miraty.antopie.org" }, "requirements": { - "yunohost": ">= 3.6" + "yunohost": ">= 4.0" }, "multi_instance": true, "services": [ "nginx", - "php7.0-fpm" + "php7.3-fpm" ], "arguments": { "install" : [ @@ -28,10 +28,10 @@ "name": "domain", "type": "domain", "ask": { - "en": "Choose a domain for LibreQR", - "fr": "Choisissez un domaine pour LibreQR" + "en": "Choose a domain name for LibreQR", + "fr": "Choisissez un nom de domaine pour LibreQR" }, - "example": "michu.home" + "example": "qr.domain.tld" }, { "name": "path", @@ -50,10 +50,6 @@ "en": "Is it a public application?", "fr": "Est-ce une application publique ?" }, - "help": { - "en": "Can LibreQR be used by everyone?", - "fr": "LibreQR peut-elle être utilisée par tout le monde ?" - }, "default": true } ] diff --git a/screenshot.png b/screenshot.png old mode 100644 new mode 100755 -- 2.30.2 From ef1913c51cdb8e0db48a5823905c32975f15987b Mon Sep 17 00:00:00 2001 From: Miraty Date: Sat, 31 Oct 2020 19:55:37 +0100 Subject: [PATCH 4/8] Update to LibreQR 1.3.0 --- README.md | 61 +++++++++++++++++++----------------------------- README_fr.md | 46 ++++++++++++++++++++++++++++++++++++ conf/app.src | 4 ++-- manifest.json | 6 ++--- screenshot.png | Bin 35030 -> 36754 bytes scripts/install | 3 ++- scripts/upgrade | 5 ++-- 7 files changed, 80 insertions(+), 45 deletions(-) create mode 100755 README_fr.md mode change 100755 => 100644 screenshot.png diff --git a/README.md b/README.md index 89e7cb9..2c20a55 100755 --- a/README.md +++ b/README.md @@ -1,59 +1,46 @@ -# LibreQR pour YunoHost +# LibreQR for YunoHost -[![Integration level](https://dash.yunohost.org/integration/qr.svg)](https://dash.yunohost.org/appci/app/qr) +[![Integration level](https://dash.yunohost.org/integration/qr.svg)](https://dash.yunohost.org/appci/app/qr) ![](https://ci-apps.yunohost.org/ci/badges/qr.status.svg) ![](https://ci-apps.yunohost.org/ci/badges/qr.maintain.svg) +[![Install LibreQR with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=qr) -> *Ce package vous permet d'installer LibreQR rapidement et simplement sur un serveur Yunohost. -Si vous n'avez pas YunoHost, regardez [ici](https://yunohost.org/#/install) pour savoir comment l'installer et en profiter.* +*[Lire ce readme en français.](./README_fr.md)* -## Vue d'ensemble +> *This package allows you to install LibreQR quickly and simply on a YunoHost server. +If you don't have YunoHost, please consult [the guide](https://yunohost.org/#/install) to learn how to install it.* -Un interface Web en PHP pour générer des codes QR. -Fonctionne même sans JavaScript. +## Overview -**Version incluse:** 1.2.0 +A Web interface for generating QR codes in PHP. -## Capture d'écran +**Shipped version:** 1.3.0 + +## Screenshot ![](screenshot.png) -## Démo +## Demo -* [Démo officielle](https://qr.antopie.org) +* [Official demo](https://qr.antopie.org) ## Configuration -Modifiez le fichier /var/www/qr/config.inc.php à votre guise +You can configure this app by editing `/var/www/qr/config.inc.php`. -## Caractéristiques spécifiques YunoHost +## YunoHost specific features -### Support multi-utilisateurs +### Multi-user support -Il n'y a aucune forme d'authentification dans l'application. +* There is no authentication in the app +* The app can be installed multiple time ### Supported architectures -* x86-64b - [![Build Status](https://ci-apps.yunohost.org/ci/logs/qr%20%28Apps%29.svg)](https://ci-apps.yunohost.org/ci/apps/qr/) +* x86-64 - [![Build Status](https://ci-apps.yunohost.org/ci/logs/qr%20%28Apps%29.svg)](https://ci-apps.yunohost.org/ci/apps/qr/) * ARMv8-A - [![Build Status](https://ci-apps-arm.yunohost.org/ci/logs/qr%20%28Apps%29.svg)](https://ci-apps-arm.yunohost.org/ci/apps/qr/) -## Limitations +## Links -* Interface uniquement en français pour l'instant. - -## Liens - - * Signaler un bug dans le paquet YunoHost : https://code.antopie.org/miraty/qr_ynh/issues - * Signaler un bug dans l'application principale : https://code.antopie.org/miraty/libreqr/issues - * Dépôt de l'application principale : https://code.antopie.org/miraty/libreqr - * Site web de YunoHost : https://yunohost.org - -## Informations pour le développement - -Merci de faire vos pull request sur la [branche testing](https://code.antopie.org/miraty/qr_ynh/src/branch/testing). - -Pour essayer la branche testing, procédez comme suit. - -```bash -sudo yunohost app install https://code.antopie.org/miraty/qr_ynh/tree/testing --debug -ou -sudo yunohost app upgrade qr -u https://code.antopie.org/miraty/qr_ynh/tree/testing --debug -``` + * Report a bug in this package: + * Report a bug in LibreQR: + * LibreQR repository: + * YunoHost website: diff --git a/README_fr.md b/README_fr.md new file mode 100755 index 0000000..c8afaee --- /dev/null +++ b/README_fr.md @@ -0,0 +1,46 @@ +# LibreQR pour YunoHost + +[![Niveau d'intégration](https://dash.yunohost.org/integration/qr.svg)](https://dash.yunohost.org/appci/app/qr) ![](https://ci-apps.yunohost.org/ci/badges/qr.status.svg) ![](https://ci-apps.yunohost.org/ci/badges/qr.maintain.svg) +[![Installer LibreQR avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=qr) + +*[Read this readme in english.](./README.md)* + +> *Ce package vous permet d'installer LibreQR rapidement et simplement sur un serveur YunoHost. +Si vous n'avez pas YunoHost, consultez [le guide](https://yunohost.org/#/install) pour apprendre comment l'installer.* + +## Vue d'ensemble + +Une interface Web pour générer des codes QR en PHP. + +**Version incluse :** 1.3.0 + +## Capture d'écran + +![](screenshot.png) + +## Démo + +* [Démo officielle](https://qr.antopie.org) + +## Configuration + +Vous pouvez configurer cette application en modifiant `/var/www/qr/config.inc.php`. + +## Caractéristiques spécifiques YunoHost + +### Support multi-utilisateur + +* Il n'y a pas d'authentification dans l'application +* L'application peut-être installée plusieurs fois + +### Architectures supportées + +* x86-64 - [![Build Status](https://ci-apps.yunohost.org/ci/logs/qr%20%28Apps%29.svg)](https://ci-apps.yunohost.org/ci/apps/qr/) +* ARMv8-A - [![Build Status](https://ci-apps-arm.yunohost.org/ci/logs/qr%20%28Apps%29.svg)](https://ci-apps-arm.yunohost.org/ci/apps/qr/) + +## Liens + + * Signaler un bug dans ce paquet : + * Signaler un bug dans LibreQR : + * Dépôt de LibreQR : + * Site web de YunoHost : diff --git a/conf/app.src b/conf/app.src index 7e25a33..04015ee 100755 --- a/conf/app.src +++ b/conf/app.src @@ -1,5 +1,5 @@ -SOURCE_URL=https://libreqr.antopie.org/1.2.0.tar.gz -SOURCE_SUM=ae897291398fddc94c6e2593c3fb6a089d778d3850596bc0407d4f35ebe49d5ed43e522b08853641ae4e7e7851f2d50cf9a3d9f6a7d85c67741abccd7ff527e2 +SOURCE_URL=https://libreqr.antopie.org/releases/libreqr-1.3.0.tar.gz +SOURCE_SUM=abdc76774330ec9370e641ca80ba73cfcfe280b615aa40bf5b57326707f2258224fc4d8f751a23f4115a8c4f1cafead39919b6a1bf76938a35005c51eff2a713 SOURCE_SUM_PRG=sha512sum SOURCE_FORMAT=tar.gz SOURCE_IN_SUBDIR=true diff --git a/manifest.json b/manifest.json index 4271581..21178f9 100755 --- a/manifest.json +++ b/manifest.json @@ -3,10 +3,10 @@ "id": "qr", "packaging_format": 1, "description": { - "en": "QR codes generator", - "fr": "Générateur de codes QR" + "en": "Web interface for generating QR codes", + "fr": "Interface Web pour générer des codes QR" }, - "version": "1.2.0~ynh2", + "version": "1.3.0~ynh1", "url": "https://code.antopie.org/miraty/libreqr", "license": "AGPL-3.0-or-later", "maintainer": { diff --git a/screenshot.png b/screenshot.png old mode 100755 new mode 100644 index 30d1450ae5891936e894e94eb4262afdfdbd895e..c24d4172da7876cd15c73bcae6268dde5f777288 GIT binary patch literal 36754 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 literal 35030 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 t=|rhD=ltdyc;=^Mk({|AdnlSKdk diff --git a/scripts/install b/scripts/install index 3a66cf6..6b20f72 100755 --- a/scripts/install +++ b/scripts/install @@ -135,7 +135,8 @@ ynh_add_fpm_config # Set permissions to app files chown -R root:$app $final_path -chmod -R g+w $final_path +chmod -R 750 $final_path +chmod -R 770 $final_path/temp #================================================= # SETUP SSOWAT diff --git a/scripts/upgrade b/scripts/upgrade index cd303b6..e323220 100755 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -88,6 +88,7 @@ then ynh_secure_remove --file="$final_path/parinux.png" ynh_secure_remove --file="$final_path/phpqrcode" ynh_secure_remove --file="$final_path/ubuntu-dl.ttf" + ynh_secure_remove --file="$final_path/style.min.css" fi #================================================= @@ -127,9 +128,9 @@ ynh_add_fpm_config ### Verify the checksum of a file, stored by `ynh_store_file_checksum` in the install script. ### And create a backup of this file if the checksum is different. So the file will be backed up if the admin had modified it. -ynh_backup_if_checksum_is_different --file="$final_path/options.inc.php" +ynh_backup_if_checksum_is_different --file="$final_path/config.inc.php" # Recalculate and store the checksum of the file for the next upgrade. -ynh_store_file_checksum --file="$final_path/options.inc.php" +ynh_store_file_checksum --file="$final_path/config.inc.php" #================================================= # GENERIC FINALIZATION -- 2.30.2 From a72232e5c84d154820fced1644b591f53b63a5ce Mon Sep 17 00:00:00 2001 From: Miraty Date: Sat, 31 Oct 2020 22:01:13 +0100 Subject: [PATCH 5/8] Fix permissions --- scripts/backup | 4 ++-- scripts/install | 11 ++++++++--- scripts/remove | 4 +++- scripts/restore | 20 +++++++++++++++----- scripts/upgrade | 29 +++++++++++++++++------------ 5 files changed, 45 insertions(+), 23 deletions(-) diff --git a/scripts/backup b/scripts/backup index 18a3c31..6bcde3e 100755 --- a/scripts/backup +++ b/scripts/backup @@ -53,10 +53,10 @@ ynh_backup --src_path="/etc/nginx/conf.d/$domain.d/$app.conf" #================================================= ynh_script_progression --message="Backing up php-fpm configuration..." -ynh_backup --src_path="/etc/php/7.0/fpm/pool.d/$app.conf" +ynh_backup --src_path="/etc/php/7.3/fpm/pool.d/$app.conf" #================================================= # END OF SCRIPT #================================================= -ynh_script_progression --message="Backup script completed for $app. (YunoHost will then actually copy those files to the archive)." --time --last +ynh_script_progression --message="Backup script completed for $app. (YunoHost will then actually copy those files to the archive)." --last diff --git a/scripts/install b/scripts/install index 6b20f72..b5800e5 100755 --- a/scripts/install +++ b/scripts/install @@ -134,9 +134,14 @@ ynh_add_fpm_config ### that really need such authorization. # Set permissions to app files -chown -R root:$app $final_path -chmod -R 750 $final_path -chmod -R 770 $final_path/temp +chown -R root: $final_path +find $final_path -type f | xargs chmod 644 +find $final_path -type d | xargs chmod 755 + +# For temp subdir, the user must have write permissions +mkdir -p $final_path/temp +chown -R $app:root $final_path/temp +chmod 711 $final_path/temp #================================================= # SETUP SSOWAT diff --git a/scripts/remove b/scripts/remove index 623bb1d..ee40376 100755 --- a/scripts/remove +++ b/scripts/remove @@ -47,6 +47,8 @@ ynh_script_progression --message="Removing php-fpm configuration..." # Remove the dedicated php-fpm config ynh_remove_fpm_config +ynh_systemd_action --action=restart --service_name=php7.3-fpm + #================================================= # GENERIC FINALIZATION #================================================= @@ -61,4 +63,4 @@ ynh_system_user_delete --username=$app # END OF SCRIPT #================================================= -ynh_script_progression --message="Removal of $app completed" --time --last +ynh_script_progression --message="Removal of $app completed" --last diff --git a/scripts/restore b/scripts/restore index 0dd3e39..c440d16 100755 --- a/scripts/restore +++ b/scripts/restore @@ -69,15 +69,25 @@ ynh_system_user_create --username=$app # RESTORE USER RIGHTS #================================================= +### For security reason, any app should set the permissions to root: before anything else. +### Then, if write authorization is needed, any access should be given only to directories +### that really need such authorization. + # Set permissions to app files -chown -R root:$app $final_path -chmod -R g+w $final_path +chown -R root: $final_path +find $final_path -type f | xargs chmod 644 +find $final_path -type d | xargs chmod 755 + +# For temp subdir, the user must have write permissions +mkdir -p $final_path/temp +chown -R $app:root $final_path/temp +chmod 711 $final_path/temp #================================================= # RESTORE THE PHP-FPM CONFIGURATION #================================================= -ynh_restore_file --origin_path="/etc/php/7.0/fpm/pool.d/$app.conf" +ynh_restore_file --origin_path="/etc/php/7.3/fpm/pool.d/$app.conf" #================================================= # GENERIC FINALIZATION @@ -86,11 +96,11 @@ ynh_restore_file --origin_path="/etc/php/7.0/fpm/pool.d/$app.conf" #================================================= ynh_script_progression --message="Reloading nginx web server and php-fpm..." -ynh_systemd_action --service_name=php7.0-fpm --action=reload +ynh_systemd_action --service_name=php7.3-fpm --action=reload ynh_systemd_action --service_name=nginx --action=reload #================================================= # END OF SCRIPT #================================================= -ynh_script_progression --message="Restoration completed for $app" --time --last +ynh_script_progression --message="Restoration completed for $app" --last diff --git a/scripts/upgrade b/scripts/upgrade index e323220..4862fcc 100755 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -79,16 +79,12 @@ if [ "$upgrade_type" == "UPGRADE_APP" ] then ynh_script_progression --message="Upgrading source files..." + # Remove old version + ynh_secure_remove --file="$final_path" + # Download, check integrity, uncompress and patch the source from app.src ynh_setup_source --dest_dir="$final_path" - # Remove unused directories or files from older release - ynh_secure_remove --file="$final_path/aide.svg" - ynh_secure_remove --file="$final_path/favicons" - ynh_secure_remove --file="$final_path/parinux.png" - ynh_secure_remove --file="$final_path/phpqrcode" - ynh_secure_remove --file="$final_path/ubuntu-dl.ttf" - ynh_secure_remove --file="$final_path/style.min.css" fi #================================================= @@ -138,9 +134,19 @@ ynh_store_file_checksum --file="$final_path/config.inc.php" # SECURE FILES AND DIRECTORIES #================================================= +### For security reason, any app should set the permissions to root: before anything else. +### Then, if write authorization is needed, any access should be given only to directories +### that really need such authorization. + # Set permissions to app files -chown -R root:$app $final_path -chmod -R g+w $final_path +chown -R root: $final_path +find $final_path -type f | xargs chmod 644 +find $final_path -type d | xargs chmod 755 + +# For temp subdir, the user must have write permissions +mkdir -p $final_path/temp +chown -R $app:root $final_path/temp +chmod 711 $final_path/temp #================================================= # SETUP SSOWAT @@ -150,8 +156,7 @@ ynh_script_progression --message="Upgrading SSOwat configuration..." # Make app public if necessary if [ $is_public -eq 1 ] then - # unprotected_uris allows SSO credentials to be passed anyway - ynh_app_setting_set --app=$app --key=unprotected_uris --value="/" + ynh_permission_update --permission "main" --add visitors fi #================================================= @@ -165,4 +170,4 @@ ynh_systemd_action --service_name=nginx --action=reload # END OF SCRIPT #================================================= -ynh_script_progression --message="Upgrade of $app completed" --time --last +ynh_script_progression --message="Upgrade of $app completed" --last -- 2.30.2 From 0070bdb1a7a586fa01e2ca5c850463b650d586f9 Mon Sep 17 00:00:00 2001 From: Miraty Date: Tue, 3 Nov 2020 22:24:17 +0100 Subject: [PATCH 6/8] Update checksum --- conf/app.src | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/app.src b/conf/app.src index 04015ee..0920305 100755 --- a/conf/app.src +++ b/conf/app.src @@ -1,5 +1,5 @@ SOURCE_URL=https://libreqr.antopie.org/releases/libreqr-1.3.0.tar.gz -SOURCE_SUM=abdc76774330ec9370e641ca80ba73cfcfe280b615aa40bf5b57326707f2258224fc4d8f751a23f4115a8c4f1cafead39919b6a1bf76938a35005c51eff2a713 +SOURCE_SUM=50334a26fcb478914a29cdc5b04a2a21f1428269197befca65c3d234aac0859df75609292ea69b855a8a9e43c8747a2fe38389ae4b7fb29c0613a040a65ab455 SOURCE_SUM_PRG=sha512sum SOURCE_FORMAT=tar.gz SOURCE_IN_SUBDIR=true -- 2.30.2 From 91388cb5698d429129c508ab74527a78ad536569 Mon Sep 17 00:00:00 2001 From: Miraty Date: Tue, 3 Nov 2020 22:34:22 +0100 Subject: [PATCH 7/8] Add information about the YNH ID of the app --- README.md | 4 ++++ README_fr.md | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/README.md b/README.md index 2c20a55..b07dd46 100755 --- a/README.md +++ b/README.md @@ -38,6 +38,10 @@ You can configure this app by editing `/var/www/qr/config.inc.php`. * x86-64 - [![Build Status](https://ci-apps.yunohost.org/ci/logs/qr%20%28Apps%29.svg)](https://ci-apps.yunohost.org/ci/apps/qr/) * ARMv8-A - [![Build Status](https://ci-apps-arm.yunohost.org/ci/logs/qr%20%28Apps%29.svg)](https://ci-apps-arm.yunohost.org/ci/apps/qr/) +## Additional information + +The application is called LibreQR, but its technical ID in YunoHost is `qr` for historical reasons. + ## Links * Report a bug in this package: diff --git a/README_fr.md b/README_fr.md index c8afaee..ceea1ee 100755 --- a/README_fr.md +++ b/README_fr.md @@ -38,6 +38,10 @@ Vous pouvez configurer cette application en modifiant `/var/www/qr/config.inc.ph * x86-64 - [![Build Status](https://ci-apps.yunohost.org/ci/logs/qr%20%28Apps%29.svg)](https://ci-apps.yunohost.org/ci/apps/qr/) * ARMv8-A - [![Build Status](https://ci-apps-arm.yunohost.org/ci/logs/qr%20%28Apps%29.svg)](https://ci-apps-arm.yunohost.org/ci/apps/qr/) +## Informations additionnelles + +L'application s'appelle LibreQR, mais son identifiant technique dans YunoHost est `qr` pour des raisons historiques. + ## Liens * Signaler un bug dans ce paquet : -- 2.30.2 From f1c107d2e4250334025fe8e059cb462770d60f89 Mon Sep 17 00:00:00 2001 From: Miraty Date: Tue, 3 Nov 2020 22:47:35 +0100 Subject: [PATCH 8/8] Better readme markdown formatting for gitea --- README.md | 1 + README_fr.md | 1 + 2 files changed, 2 insertions(+) diff --git a/README.md b/README.md index b07dd46..6262d00 100755 --- a/README.md +++ b/README.md @@ -1,6 +1,7 @@ # LibreQR for YunoHost [![Integration level](https://dash.yunohost.org/integration/qr.svg)](https://dash.yunohost.org/appci/app/qr) ![](https://ci-apps.yunohost.org/ci/badges/qr.status.svg) ![](https://ci-apps.yunohost.org/ci/badges/qr.maintain.svg) + [![Install LibreQR with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=qr) *[Lire ce readme en français.](./README_fr.md)* diff --git a/README_fr.md b/README_fr.md index ceea1ee..35377a7 100755 --- a/README_fr.md +++ b/README_fr.md @@ -1,6 +1,7 @@ # LibreQR pour YunoHost [![Niveau d'intégration](https://dash.yunohost.org/integration/qr.svg)](https://dash.yunohost.org/appci/app/qr) ![](https://ci-apps.yunohost.org/ci/badges/qr.status.svg) ![](https://ci-apps.yunohost.org/ci/badges/qr.maintain.svg) + [![Installer LibreQR avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=qr) *[Read this readme in english.](./README.md)* -- 2.30.2