From a5d09300289519ea057d162084a4b198931b7ee8 Mon Sep 17 00:00:00 2001 From: Alex Noel Date: Mon, 7 Sep 2026 15:07:20 +0200 Subject: [PATCH] =?UTF-8?q?Prot=C3=A9ger=20les=20donn=C3=A9es=20persistant?= =?UTF-8?q?es=20=C3=A0=20la=20mise=20=C3=A0=20jour?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 3 +++ manifest.toml | 2 +- scripts/_common.sh | 49 ++++++++++++++++++++++++++++++++++++++++++++++ scripts/restore | 1 + scripts/upgrade | 15 ++++++++++++-- 5 files changed, 67 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index 1330247..4fd7dac 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,5 @@ *.log .DS_Store +.manifest.v2.schema.json +.spdx_licenses +.tests.v1.schema.json diff --git a/manifest.toml b/manifest.toml index 1e27516..b16e505 100644 --- a/manifest.toml +++ b/manifest.toml @@ -5,7 +5,7 @@ id = "globinours" name = "Globinours" description.en = "Lightweight animal shelter management" description.fr = "Gestion légère et complète pour refuges animaliers" -version = "1.0.0-rc.4~ynh1" +version = "1.0.0-rc.4~ynh2" maintainers = ["OverSu"] [upstream] diff --git a/scripts/_common.sh b/scripts/_common.sh index 676a018..ae0a063 100755 --- a/scripts/_common.sh +++ b/scripts/_common.sh @@ -65,6 +65,12 @@ prepare_persistent_paths() { ln -s "$data_dir/storage" "$install_dir/storage" ln -s "$data_dir/media" "$install_dir/public/media" + repair_and_verify_permissions +} + +repair_and_verify_permissions() { + ynh_print_info "Checking Globinours persistent-data permissions..." + chown -R "$app:www-data" "$install_dir" chown -R "$app:$app" "$data_dir" chmod -R u=rwX,g=rX,o= "$install_dir" @@ -74,4 +80,47 @@ prepare_persistent_paths() { chmod 0710 "$data_dir" chown -R "$app:www-data" "$data_dir/media" chmod -R u=rwX,g=rX,o= "$data_dir/media" + + if ! ynh_exec_as_app test -r "$data_dir" || ! ynh_exec_as_app test -w "$data_dir"; then + ynh_die --message="The Globinours system user cannot read and write its persistent data directory." + fi + if ! runuser -u www-data -- test -x "$data_dir" || ! runuser -u www-data -- test -r "$data_dir/media"; then + ynh_die --message="Nginx cannot access the Globinours public media directory." + fi + if [[ -f "$data_dir/refuge.sqlite" ]]; then + local integrity_check + integrity_check="$(ynh_exec_as_app sqlite3 "$data_dir/refuge.sqlite" "PRAGMA quick_check;")" + if [[ "$integrity_check" != "ok" ]]; then + ynh_die --message="The Globinours database failed its integrity check." + fi + fi +} + +inventory_persistent_data() { + local inventory_file="$1" + + : > "$inventory_file" + if [[ -f "$data_dir/refuge.sqlite" ]]; then + printf '%s\n' "refuge.sqlite" >> "$inventory_file" + fi + for persistent_subdir in association grants medical-documents private-media media; do + if [[ -d "$data_dir/$persistent_subdir" ]]; then + find "$data_dir/$persistent_subdir" -type f -printf '%P\n' | + sed "s#^#$persistent_subdir/#" >> "$inventory_file" + fi + done + sort -u -o "$inventory_file" "$inventory_file" +} + +verify_persistent_inventory() { + local inventory_file="$1" + local missing_file + + while IFS= read -r persistent_file; do + [[ -z "$persistent_file" ]] && continue + if [[ ! -f "$data_dir/$persistent_file" ]]; then + missing_file="$persistent_file" + ynh_die --message="Persistent data disappeared during the operation: $missing_file" + fi + done < "$inventory_file" } diff --git a/scripts/restore b/scripts/restore index cbf410f..045e798 100755 --- a/scripts/restore +++ b/scripts/restore @@ -36,6 +36,7 @@ done prepare_persistent_paths install_yunohost_logo ynh_exec_as_app php "$install_dir/scripts/migrate.php" +repair_and_verify_permissions ynh_systemctl --service="php$php_version-fpm" --action=reload ynh_systemctl --service=nginx --action=reload diff --git a/scripts/upgrade b/scripts/upgrade index d0a1d61..94c3fe1 100755 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -24,12 +24,17 @@ fi migrate_legacy_data +data_inventory="$(mktemp)" +data_guard="$data_dir/.globinours-upgrade-guard" +inventory_persistent_data "$data_inventory" +touch "$data_guard" + #================================================= # ENABLE MAINTENANCE MODE #================================================= touch "$data_dir/storage/maintenance.flag" -trap 'rm -f "$data_dir/storage/maintenance.flag"' EXIT +trap 'rm -f "$data_dir/storage/maintenance.flag" "$data_guard" "$data_inventory"' EXIT #================================================= # DOWNLOAD, CHECK AND UNPACK SOURCE @@ -56,7 +61,13 @@ ynh_config_add_phpfpm ynh_config_add_nginx ynh_exec_as_app php "$install_dir/scripts/migrate.php" -rm -f "$data_dir/storage/maintenance.flag" +if [[ ! -f "$data_guard" ]]; then + ynh_die --message="The persistent data directory was replaced during the upgrade." +fi +verify_persistent_inventory "$data_inventory" +repair_and_verify_permissions + +rm -f "$data_dir/storage/maintenance.flag" "$data_guard" "$data_inventory" trap - EXIT ynh_systemctl --service="php$php_version-fpm" --action=reload