From 3ef7d26ed2b1c7ee907eb4664d33a0514363dc22 Mon Sep 17 00:00:00 2001 From: Amo Date: Tue, 25 May 2021 03:05:19 +0530 Subject: [PATCH 01/23] [autopatch] Autopatch to migrate to new permission system --- scripts/restore | 2 -- scripts/upgrade | 16 ++++++++++------ 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/scripts/restore b/scripts/restore index 5f8af87..fce850a 100755 --- a/scripts/restore +++ b/scripts/restore @@ -125,8 +125,6 @@ ynh_restore_file "/etc/fail2ban/jail.d/$app.conf" ynh_restore_file "/etc/fail2ban/filter.d/$app.conf" ynh_systemd_action --action=restart --service_name=fail2ban -# Make app public -ynh_app_setting_set $app skipped_uris "/" #================================================= # GENERIC FINALIZATION diff --git a/scripts/upgrade b/scripts/upgrade index 9d03e17..7d3f75f 100755 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -48,6 +48,16 @@ ynh_clean_setup () { # Exit if an error occurs during the execution of the script ynh_abort_if_errors +#================================================= +# Migrate legacy permissions to new system +#================================================= +if ynh_legacy_permissions_exists +then + ynh_legacy_permissions_delete_all + + ynh_app_setting_delete --app=$app --key=is_public +fi + #================================================= # STANDARD UPGRADE STEPS #================================================= @@ -222,12 +232,6 @@ elif [ $database -eq 2 ]; then ynh_install_app_dependencies $pkg_dependencies fi -#================================================= -# SETUP SSOWAT -#================================================= -# As Osada is social network and have its own permission there is no need to keep Osada behind SSO -ynh_script_progression --message="Upgrading SSOwat configuration..." -ynh_app_setting_set --app=$app --key=unprotected_uris --value="/" #================================================= # RELOAD NGINX From a58c0c01ded0afcb79e8db989fbd775a619c6ded Mon Sep 17 00:00:00 2001 From: ericgaspar Date: Sun, 15 Aug 2021 09:41:06 +0200 Subject: [PATCH 02/23] Fix --- check_process | 12 +++--------- manifest.json | 8 ++++---- scripts/install | 12 +++++++----- scripts/upgrade | 15 +++++++++------ 4 files changed, 23 insertions(+), 24 deletions(-) diff --git a/check_process b/check_process index 3c46ac3..1f698ae 100755 --- a/check_process +++ b/check_process @@ -1,13 +1,8 @@ -# See here for more information -# https://github.com/YunoHost/package_check#syntax-check_process-file - -# Move this file from check_process.default to check_process when you have filled it. - ;; Test complet ; Manifest - domain="domain.tld" (DOMAIN) - admin="john" (USER) - database="1" (STRING) + domain="domain.tld" + admin="john" + database="1" ; Checks pkg_linter=1 setup_sub_dir=0 @@ -19,7 +14,6 @@ #upgrade=1 from_commit= backup_restore=1 multi_instance=1 - port_already_use=0 change_url=0 ;;; Options Email= diff --git a/manifest.json b/manifest.json index 55eb103..0da2013 100755 --- a/manifest.json +++ b/manifest.json @@ -3,8 +3,8 @@ "id": "osada", "name": "osada", "description": { - "en": "Osada is a decentralized publication platform and social network.", - "fr": "Osada est une plateforme de publication décentralisée et un réseau social." + "en": "Decentralized publication platform and social network", + "fr": "Plateforme de publication décentralisée et un réseau social" }, "url": "http://zotlabs.com/osada/", "license": "MIT", @@ -15,12 +15,12 @@ }, "services": [ "nginx", - "php7.0-fpm", + "php7.3-fpm", "mysql", "postgresql" ], "requirements": { - "yunohost": ">= 4.0.0" + "yunohost": ">= 4.2.0" }, "multi_instance": true, "arguments": { diff --git a/scripts/install b/scripts/install index 2d7bb74..b1a1bdd 100755 --- a/scripts/install +++ b/scripts/install @@ -213,12 +213,14 @@ ynh_add_fpm_config --package="$extra_php_dependencies" ynh_script_progression --message="Set right for Osada..." chown -R $app: $final_path +#================================================= +# SET CRON JOB +#================================================= + # Set up cron job -ynh_script_progression --message="Setting up cron job..." -ynh_replace_string --match_string="YNH_WWW_PATH" --replace_string="$final_path" --target_file="../conf/poller-cron" -ynh_replace_string --match_string="__USER__" --replace_string="$app" --target_file="../conf/poller-cron" -ynh_replace_string --match_string="__PHP_VERSION__" --replace_string="$phpversion" --target_file="../conf/poller-cron" -cp ../conf/poller-cron /etc/cron.d/$app +ynh_add_config --template="../conf/poller-cron" --destination="/etc/cron.d/$app" +chown root: "/etc/cron.d/$app" +chmod 644 "/etc/cron.d/$app" #================================================= # STORE THE CONFIG FILE CHECKSUM diff --git a/scripts/upgrade b/scripts/upgrade index 9d03e17..6c41776 100755 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -192,18 +192,21 @@ ynh_script_progression --message="Upgrading logrotate configuration..." # Use logrotate to manage app-specific logfile(s) ynh_use_logrotate --non-append +#================================================= # UPGRADE FAIL2BAN #================================================= ynh_script_progression --message="Re-configure Fail2Ban..." ynh_add_fail2ban_config --logpath="$final_path/php.log" --failregex="^.*auth\.php.*failed login attempt.*from IP .*$" --max_retry="5" -# Set cron job -ynh_print_info "Setting up cron job..." -ynh_replace_string --match_string="YNH_WWW_PATH" --replace_string="$final_path" --target_file="../conf/poller-cron" -ynh_replace_string --match_string="__USER__" --replace_string="$app" --target_file="../conf/poller-cron" -ynh_replace_string --match_string="__PHP_VERSION__" --replace_string="$phpversion" --target_file="../conf/poller-cron" -cp -f ../conf/poller-cron /etc/cron.d/$app +#================================================= +# UPGRADE CRON JOB +#================================================= + +# Set up cron job +ynh_add_config --template="../conf/poller-cron" --destination="/etc/cron.d/$app" +chown root: "/etc/cron.d/$app" +chmod 644 "/etc/cron.d/$app" #================================================= # UPGRADE DEPENDENCIES From 8f5a20cb0d180a83c36d2cf49fe5939e8cfe58c1 Mon Sep 17 00:00:00 2001 From: ericgaspar Date: Sun, 15 Aug 2021 09:52:52 +0200 Subject: [PATCH 03/23] Update poller-cron --- conf/poller-cron | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/poller-cron b/conf/poller-cron index 0808434..e96b157 100755 --- a/conf/poller-cron +++ b/conf/poller-cron @@ -1,2 +1,2 @@ # Run poller periodically to update Osada -*/10 * * * * __USER__ cd YNH_WWW_PATH; /usr/bin/php Zotlabs/Daemon/Master.php Cron > /dev/null 2>&1 +*/10 * * * * __APP__ /usr/bin/php__PHPVERSION__ __FINALPATH__/Zotlabs/Daemon/Master.php Cron > /dev/null 2>&1 From 0c6ac586db99606518caf36d590c1d5d55750e4a Mon Sep 17 00:00:00 2001 From: ericgaspar Date: Sat, 11 Sep 2021 11:46:52 +0200 Subject: [PATCH 04/23] Update manifest.json --- manifest.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manifest.json b/manifest.json index 55eb103..e2343b9 100755 --- a/manifest.json +++ b/manifest.json @@ -1,7 +1,7 @@ { "packaging_format": 1, "id": "osada", - "name": "osada", + "name": "Osada", "description": { "en": "Osada is a decentralized publication platform and social network.", "fr": "Osada est une plateforme de publication décentralisée et un réseau social." From 9422f40338a9793a08ce7d86d1dcc1f90459d7d1 Mon Sep 17 00:00:00 2001 From: ericgaspar Date: Sat, 11 Sep 2021 11:56:26 +0200 Subject: [PATCH 05/23] Fix --- manifest.json | 2 +- scripts/install | 46 ++++++++++++------------------------ scripts/restore | 25 ++++++++++---------- scripts/upgrade | 62 +++++++++++++++---------------------------------- 4 files changed, 47 insertions(+), 88 deletions(-) diff --git a/manifest.json b/manifest.json index 0da2013..49809cc 100755 --- a/manifest.json +++ b/manifest.json @@ -1,7 +1,7 @@ { "packaging_format": 1, "id": "osada", - "name": "osada", + "name": "Osada", "description": { "en": "Decentralized publication platform and social network", "fr": "Plateforme de publication décentralisée et un réseau social" diff --git a/scripts/install b/scripts/install index b1a1bdd..dc3e0a8 100755 --- a/scripts/install +++ b/scripts/install @@ -27,7 +27,7 @@ ynh_abort_if_errors domain=$YNH_APP_ARG_DOMAIN path_url="/" admin=$YNH_APP_ARG_ADMIN -email=$(yunohost user info $admin | grep "mail:" | cut -d' ' -f2) +email=$(ynh_user_get_info --username=$admin --key=mail) upload="256M" random_string="$(ynh_string_random)$(ynh_string_random)$(ynh_string_random)" database=`expr $YNH_APP_ARG_DATABASE` @@ -69,6 +69,14 @@ if [ $database -eq 2 ]; then ynh_install_app_dependencies $pkg_dependencies fi +#================================================= +# CREATE DEDICATED USER +#================================================= +ynh_script_progression --message="Configuring system user..." + +# Create a system user +ynh_system_user_create --username=$app --home_dir="$final_path" + #================================================= # DOWNLOAD, CHECK AND UNPACK SOURCE #================================================= @@ -79,7 +87,7 @@ ynh_script_progression --message="Setting up Osada source files..." 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" -git clone https://codeberg.org/zot/osada.git "$final_path" +git clone https://codeberg.org/zot/osada.git "$final_path" --quiet # 2 - Osada Addons @@ -92,7 +100,7 @@ ynh_script_progression --message="Setting up Osada addons source files..." pushd "$final_path" mkdir -p extend/addon/zaddons mkdir addon - git clone https://codeberg.org/zot/osada-addons.git $final_path/extend/addon/zaddons + git clone https://codeberg.org/zot/osada-addons.git $final_path/extend/addon/zaddons --quiet filelist=(`ls extend/addon/zaddons`) cd addon for a in "${filelist[@]}" ; do @@ -123,7 +131,7 @@ ynh_script_progression --message="Creating smarty3 folder for personal data..." mkdir -p "${final_path}/store" mkdir -p "${final_path}/cache/smarty3" -chmod -R 777 $final_path/store $final_path/cache +chmod -R 775 $final_path/store $final_path/cache # Copy the template install/htconfig.sample.php to .htconfig.php ynh_script_progression --message="Moving .htconfig.php to root of Osada ..." @@ -184,23 +192,16 @@ ynh_script_progression --message="Push LDAP configuration to .htconfig.php..." cat ../conf/ldap_conf.php >> $final_path/.htconfig.php +ynh_store_file_checksum --file="$config" + #================================================= # NGINX CONFIGURATION #================================================= ynh_script_progression --message="Configuring NGINX web server..." -### `ynh_add_nginx_config` will use the file conf/nginx.conf # Create a dedicated NGINX config ynh_add_nginx_config -#================================================= -# CREATE DEDICATED USER -#================================================= -ynh_script_progression --message="Configuring system user..." - -# Create a system user -ynh_system_user_create --username=$app - #================================================= # PHP-FPM CONFIGURATION #================================================= @@ -209,10 +210,6 @@ ynh_script_progression --message="Configuring PHP-FPM..." # Create a dedicated PHP-FPM config ynh_add_fpm_config --package="$extra_php_dependencies" -# Set right permissions for Osada -ynh_script_progression --message="Set right for Osada..." -chown -R $app: $final_path - #================================================= # SET CRON JOB #================================================= @@ -222,13 +219,6 @@ ynh_add_config --template="../conf/poller-cron" --destination="/etc/cron.d/$app" chown root: "/etc/cron.d/$app" chmod 644 "/etc/cron.d/$app" -#================================================= -# STORE THE CONFIG FILE CHECKSUM -#================================================= - -# Calculate and store the config file checksum into the app settings -ynh_store_file_checksum --file="$config" - #================================================= # SETUP LOGROTATE #================================================= @@ -241,14 +231,8 @@ ynh_use_logrotate "$final_path/php.log" # SETUP FAIL2BAN #================================================= ynh_script_progression --message="Add Fail2Ban..." -ynh_add_fail2ban_config --logpath="$final_path/php.log" --failregex="^.*auth\.php.*failed login attempt.*from IP .*$" --max_retry="5" -#================================================= -# SETUP SSOWAT -#================================================= -# As Osada is social network and have its own permission there is no need to keep Osada behind SSO -ynh_script_progression --message="Configuring SSOwat..." -ynh_permission_update --permission="main" --add="visitors" +ynh_add_fail2ban_config --logpath="$final_path/php.log" --failregex="^.*auth\.php.*failed login attempt.*from IP .*$" --max_retry="5" #================================================= # RELOAD NGINX diff --git a/scripts/restore b/scripts/restore index 5f8af87..551d495 100755 --- a/scripts/restore +++ b/scripts/restore @@ -42,8 +42,6 @@ phpversion=$(ynh_app_setting_get --app=$app --key=phpversion) #================================================= 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}" test ! -d $final_path \ || ynh_die --message="There is already a directory: $final_path " @@ -55,6 +53,18 @@ test ! -d $final_path \ 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..." + +# Create the dedicated user (if not existing) +ynh_system_user_create --username=$app --home_dir="$final_path" + +chmod 750 "$final_path" +chmod -R o-rwx "$final_path" +chown -R $app:www-data "$final_path" + #================================================= # RESTORE THE APP MAIN DIR #================================================= @@ -84,14 +94,6 @@ elif [ $database -eq 2 ]; then ynh_psql_execute_file_as_root --file="./db.sql" --database="$db_name" fi -#================================================= -# RECREATE THE DEDICATED USER -#================================================= -ynh_print_info "Recreating the dedicated system user..." - -# Create the dedicated user (if not existing) -ynh_system_user_create $app - #================================================= # RESTORE THE PHP-FPM CONFIGURATION #================================================= @@ -125,9 +127,6 @@ ynh_restore_file "/etc/fail2ban/jail.d/$app.conf" ynh_restore_file "/etc/fail2ban/filter.d/$app.conf" ynh_systemd_action --action=restart --service_name=fail2ban -# Make app public -ynh_app_setting_set $app skipped_uris "/" - #================================================= # GENERIC FINALIZATION #================================================= diff --git a/scripts/upgrade b/scripts/upgrade index 6c41776..b152aa8 100755 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -24,16 +24,6 @@ last_update=$(grep update_time: /etc/yunohost/apps/$app/settings.yml | cut -c database=$(ynh_app_setting_get --app=$app --key=database) phpversion=$(ynh_app_setting_get --app=$app --key=phpversion) -#================================================= -# ENSURE DOWNWARD COMPATIBILITY -#================================================= - -# If db_name doesn't exist, create it -if [ -z "$db_name" ]; then - db_name=$(ynh_sanitize_dbid --db_name=$app) - ynh_app_setting_set --app=$app --key=db_name --value=$db_name -fi - #================================================= # BACKUP BEFORE UPGRADE THEN ACTIVE TRAP #================================================= @@ -49,30 +39,30 @@ ynh_clean_setup () { ynh_abort_if_errors #================================================= -# STANDARD UPGRADE STEPS -#================================================= -# REMOVE APP MAIN DIR +# ENSURE DOWNWARD COMPATIBILITY #================================================= ynh_print_info "Upgrading source files..." -# Create a temporary directory -# tmpdir="$(ynh_smart_mktemp 6000)" -# Backup the config file in the temp dir -# cp -a "$final_path/.htconfig.php" "$tmpdir/.htconfig.php" -# cp -a "$final_path/store" "$tmpdir/store" -# cp -a "$final_path/php.log" "$tmpdir/php.log" - -# Remove the app directory securely -# ynh_secure_remove "$final_path" - # 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 +# If db_name doesn't exist, create it +if [ -z "$db_name" ]; then + db_name=$(ynh_sanitize_dbid --db_name=$app) + ynh_app_setting_set --app=$app --key=db_name --value=$db_name +fi + #================================================= -# STANDARD UPGRADE STEPS +# CREATE DEDICATED USER +#================================================= +ynh_script_progression --message="Making sure dedicated system user exists..." + +# Create a dedicated user (if not existing) +ynh_system_user_create --username=$app --home_dir="$final_path" + #================================================= # DOWNLOAD, CHECK AND UNPACK SOURCE #================================================= @@ -148,9 +138,12 @@ else chmod -R 777 $final_path/store mkdir $final_path/addon ynh_setup_source --dest_dir="$final_path/addon" --source_id="app_addons" - fi +chmod 750 "$final_path" +chmod -R o-rwx "$final_path" +chown -R $app:www-data "$final_path" + #================================================= # NGINX CONFIGURATION #================================================= @@ -159,17 +152,6 @@ ynh_script_progression --message="Upgrading NGINX web server configuration..." # Create a dedicated NGINX config ynh_add_nginx_config -#================================================= -# CREATE DEDICATED USER -#================================================= -ynh_script_progression --message="Making sure dedicated system user exists..." - -# Create a dedicated user (if not existing) -ynh_system_user_create --username=$app - -# Set right permissions for curl install -chown -R $app: $final_path - #================================================= # PHP-FPM CONFIGURATION #================================================= @@ -212,6 +194,7 @@ chmod 644 "/etc/cron.d/$app" # UPGRADE DEPENDENCIES #================================================= ynh_script_progression --message="Upgrading dependencies..." + if [ $database -eq 1 ]; then #================================================= # CHECK VERSION FOR SPECIFIC MYSQL UPDATE @@ -225,13 +208,6 @@ elif [ $database -eq 2 ]; then ynh_install_app_dependencies $pkg_dependencies fi -#================================================= -# SETUP SSOWAT -#================================================= -# As Osada is social network and have its own permission there is no need to keep Osada behind SSO -ynh_script_progression --message="Upgrading SSOwat configuration..." -ynh_app_setting_set --app=$app --key=unprotected_uris --value="/" - #================================================= # RELOAD NGINX #================================================= From 9d422b8d9e01a443d2a5f21255a4111b433db5f7 Mon Sep 17 00:00:00 2001 From: ericgaspar Date: Sun, 12 Sep 2021 15:29:21 +0200 Subject: [PATCH 06/23] Update restore --- scripts/restore | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/scripts/restore b/scripts/restore index 551d495..cb2f890 100755 --- a/scripts/restore +++ b/scripts/restore @@ -61,10 +61,6 @@ ynh_script_progression --message="Recreating the dedicated system user..." # Create the dedicated user (if not existing) ynh_system_user_create --username=$app --home_dir="$final_path" -chmod 750 "$final_path" -chmod -R o-rwx "$final_path" -chown -R $app:www-data "$final_path" - #================================================= # RESTORE THE APP MAIN DIR #================================================= @@ -72,6 +68,10 @@ ynh_script_progression --message="Restoring the app main directory..." ynh_restore_file --origin_path="$final_path" +chmod 750 "$final_path" +chmod -R o-rwx "$final_path" +chown -R $app:www-data "$final_path" + #================================================= # RESTORE THE MYSQL DATABASE #================================================= From 1d50f1941d0dafcd267cb2b1fe67ff8a83689fff Mon Sep 17 00:00:00 2001 From: ericgaspar Date: Sun, 12 Sep 2021 15:30:21 +0200 Subject: [PATCH 07/23] Update upgrade --- scripts/upgrade | 2 ++ 1 file changed, 2 insertions(+) diff --git a/scripts/upgrade b/scripts/upgrade index b152aa8..9987b40 100755 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -23,6 +23,8 @@ upload=$(ynh_app_setting_get --app=$app --key=upload) last_update=$(grep update_time: /etc/yunohost/apps/$app/settings.yml | cut -c 14-) database=$(ynh_app_setting_get --app=$app --key=database) phpversion=$(ynh_app_setting_get --app=$app --key=phpversion) +db_name=$(ynh_app_setting_get --app=$app --key=db_name) +db_user=$db_name #================================================= # BACKUP BEFORE UPGRADE THEN ACTIVE TRAP From 82b10292c36e5ae8d841f448c688bc1cd342d7e6 Mon Sep 17 00:00:00 2001 From: ericgaspar Date: Sun, 12 Sep 2021 15:33:21 +0200 Subject: [PATCH 08/23] Fix --- scripts/backup | 34 ++++++++++++++-------------------- scripts/install | 15 +++++---------- scripts/upgrade | 6 +++--- 3 files changed, 22 insertions(+), 33 deletions(-) diff --git a/scripts/backup b/scripts/backup index 337578d..e026662 100755 --- a/scripts/backup +++ b/scripts/backup @@ -13,10 +13,6 @@ source /usr/share/yunohost/helpers # MANAGE SCRIPT FAILURE #================================================= -ynh_clean_setup () { - ### Remove this function if there's nothing to clean before calling the remove script. - true -} # Exit if an error occurs during the execution of the script ynh_abort_if_errors @@ -55,22 +51,6 @@ ynh_backup --src_path="/etc/nginx/conf.d/$domain.d/$app.conf" ynh_backup --src_path="/etc/php/$phpversion/fpm/pool.d/$app.conf" -#================================================= -# BACKUP OF THE DATABASE -#================================================= - -if [ $database -eq 1 ]; then - # Backup MySQL database - ynh_print_info --message="Backup of the MySQL database..." - ynh_mysql_dump_db --database="$db_name" > db.sql -elif [ $database -eq 2 ]; then - # Backup PostgreSQL database - ynh_print_info --message="Backup of the PostgreSQL database..." - ynh_psql_dump_db --database="$db_name" > db.sql -fi - -#================================================= -# SPECIFIC BACKUP #================================================= # BACKUP LOGROTATE #================================================= @@ -90,6 +70,20 @@ ynh_backup --src_path="/etc/cron.d/$app" ynh_backup --src_path="/etc/fail2ban/jail.d/$app.conf" ynh_backup --src_path="/etc/fail2ban/filter.d/$app.conf" +#================================================= +# BACKUP OF THE DATABASE +#================================================= + +if [ $database -eq 1 ]; then + # Backup MySQL database + ynh_print_info --message="Backup of the MySQL database..." + ynh_mysql_dump_db --database="$db_name" > db.sql +elif [ $database -eq 2 ]; then + # Backup PostgreSQL database + ynh_print_info --message="Backup of the PostgreSQL database..." + ynh_psql_dump_db --database="$db_name" > db.sql +fi + #================================================= # END OF SCRIPT #================================================= diff --git a/scripts/install b/scripts/install index dc3e0a8..6b64bb6 100755 --- a/scripts/install +++ b/scripts/install @@ -13,10 +13,6 @@ source /usr/share/yunohost/helpers # MANAGE SCRIPT FAILURE #================================================= -ynh_clean_setup () { - ### Remove this function if there's nothing to clean before calling the remove script. - true -} # Exit if an error occurs during the execution of the script ynh_abort_if_errors @@ -50,11 +46,11 @@ ynh_webpath_register --app=$app --domain=$domain --path_url=$path_url #================================================= 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 -ynh_app_setting_set --app=$app --key=email --value=$email -ynh_app_setting_set --app=$app --key=upload --value=$upload +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 +ynh_app_setting_set --app=$app --key=email --value=$email +ynh_app_setting_set --app=$app --key=upload --value=$upload ynh_app_setting_set --app=$app --key=database --value=$database ynh_app_setting_set --app=$app --key=random_string --value=$random_string @@ -122,7 +118,6 @@ pushd "$final_path" ln -s ../extend/addon/zaddons/$base $base done - popd diff --git a/scripts/upgrade b/scripts/upgrade index 9987b40..76d3da1 100755 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -77,7 +77,7 @@ ynh_setup_source --dest_dir="$final_path" # cp -a "$tmpdir/.htconfig.php" "${final_path}" # cp -a "$tmpdir/php.log" "${final_path}" # ynh_secure_remove "$tmpdir" -# chmod -R 777 $final_path/store +# chmod -R 775 $final_path/store # mkdir $final_path/addon # ynh_setup_source --dest_dir="$final_path/addon" --source_id="app_addons" @@ -115,7 +115,7 @@ if [ `cd $final_path && git rev-parse --is-inside-work-tree` ]; then fi; done popd - chmod -R 777 $final_path/store + chmod -R 775 $final_path/store else # Create a temporary directory @@ -137,7 +137,7 @@ else cp -a "$tmpdir/.htconfig.php" "${final_path}" cp -a "$tmpdir/php.log" "${final_path}" ynh_secure_remove --file="$tmpdir" - chmod -R 777 $final_path/store + chmod -R 775 $final_path/store mkdir $final_path/addon ynh_setup_source --dest_dir="$final_path/addon" --source_id="app_addons" fi From 925d29b47819552a12d80208ce5e13f1429a7020 Mon Sep 17 00:00:00 2001 From: ericgaspar Date: Sun, 12 Sep 2021 16:33:56 +0200 Subject: [PATCH 09/23] Fix --- scripts/install | 2 +- scripts/restore | 4 ---- scripts/upgrade | 4 ++-- 3 files changed, 3 insertions(+), 7 deletions(-) diff --git a/scripts/install b/scripts/install index 6b64bb6..95eff85 100755 --- a/scripts/install +++ b/scripts/install @@ -126,7 +126,7 @@ ynh_script_progression --message="Creating smarty3 folder for personal data..." mkdir -p "${final_path}/store" mkdir -p "${final_path}/cache/smarty3" -chmod -R 775 $final_path/store $final_path/cache +chmod -R 777 $final_path/store $final_path/cache # Copy the template install/htconfig.sample.php to .htconfig.php ynh_script_progression --message="Moving .htconfig.php to root of Osada ..." diff --git a/scripts/restore b/scripts/restore index cb2f890..901001d 100755 --- a/scripts/restore +++ b/scripts/restore @@ -14,10 +14,6 @@ source /usr/share/yunohost/helpers # MANAGE SCRIPT FAILURE #================================================= -ynh_clean_setup () { - #### Remove this function if there's nothing to clean before calling the remove script. - true -} # Exit if an error occurs during the execution of the script ynh_abort_if_errors diff --git a/scripts/upgrade b/scripts/upgrade index 76d3da1..18874e2 100755 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -115,7 +115,7 @@ if [ `cd $final_path && git rev-parse --is-inside-work-tree` ]; then fi; done popd - chmod -R 775 $final_path/store + chmod -R 777 $final_path/store else # Create a temporary directory @@ -137,7 +137,7 @@ else cp -a "$tmpdir/.htconfig.php" "${final_path}" cp -a "$tmpdir/php.log" "${final_path}" ynh_secure_remove --file="$tmpdir" - chmod -R 775 $final_path/store + chmod -R 777 $final_path/store mkdir $final_path/addon ynh_setup_source --dest_dir="$final_path/addon" --source_id="app_addons" fi From f044b99ce90b7ffaffdd34f490f3aafd7c90bd75 Mon Sep 17 00:00:00 2001 From: ericgaspar Date: Thu, 23 Sep 2021 23:35:49 +0200 Subject: [PATCH 10/23] Update manifest.json --- manifest.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/manifest.json b/manifest.json index 49809cc..36364b3 100755 --- a/manifest.json +++ b/manifest.json @@ -1,7 +1,7 @@ { - "packaging_format": 1, + "name": "Osada", "id": "osada", - "name": "Osada", + "packaging_format": 1, "description": { "en": "Decentralized publication platform and social network", "fr": "Plateforme de publication décentralisée et un réseau social" From 21e3c331ae17e4e513362e8e0cf69fee50e49029 Mon Sep 17 00:00:00 2001 From: ericgaspar Date: Wed, 3 Nov 2021 08:33:53 +0100 Subject: [PATCH 11/23] Update manifest.json --- manifest.json | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/manifest.json b/manifest.json index 36364b3..2638e17 100755 --- a/manifest.json +++ b/manifest.json @@ -27,19 +27,11 @@ "install" : [ { "name": "domain", - "type": "domain", - "ask": { - "en": "Choose a domain for your Osada. Osada must run in the root of this domain. It means no other app can be accessed/run from this domain. We advise to use a dedicated subdomain such as osada.domain.tld", - "fr": "Indiquez un domain pour Osada. Osada doit être installé à la racine du domaine. Cela implique qu'aucune autre app ne pourra être installée ou accessible sur ce domain. Nous conseillons un sous-domaine dédié par exemple osada.domain.tld." - } + "type": "domain" }, { "name": "admin", - "type": "user", - "ask": { - "en": "Choose the Osada administrator (must be an existing YunoHost user)", - "fr": "Choisissez l'administrateur de Osada (doit être un utilisateur YunoHost existant)" - } + "type": "user" }, { "name": "database", From 67e67702bb097554bc5a95a4f54a55dc1b6da63b Mon Sep 17 00:00:00 2001 From: ericgaspar Date: Wed, 3 Nov 2021 08:34:47 +0100 Subject: [PATCH 12/23] Update backup --- scripts/backup | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/backup b/scripts/backup index e026662..8e6122b 100755 --- a/scripts/backup +++ b/scripts/backup @@ -19,7 +19,7 @@ ynh_abort_if_errors #================================================= # LOAD SETTINGS #================================================= -ynh_script_progression --message="Loading installation settings..." +ynh_print_info --message="Loading installation settings..." app=$YNH_APP_INSTANCE_NAME final_path=$(ynh_app_setting_get --app=$app --key=final_path) From fcbc9c3f33099808eeaa3d4e32e2d412bb72b804 Mon Sep 17 00:00:00 2001 From: ericgaspar Date: Wed, 3 Nov 2021 22:51:21 +0100 Subject: [PATCH 13/23] Add README --- doc/DESCRIPTION.md | 2 ++ doc/DISCLAIMER.md | 18 ++++++++++++++++++ doc/screenshots/comment_on_posts.gif | Bin 0 -> 117294 bytes manifest.json | 9 +++++++-- 4 files changed, 27 insertions(+), 2 deletions(-) create mode 100644 doc/DESCRIPTION.md create mode 100644 doc/DISCLAIMER.md create mode 100644 doc/screenshots/comment_on_posts.gif diff --git a/doc/DESCRIPTION.md b/doc/DESCRIPTION.md new file mode 100644 index 0000000..2e572f0 --- /dev/null +++ b/doc/DESCRIPTION.md @@ -0,0 +1,2 @@ +## Overview +[Osada](http://zotlabs.com/osada/) uses **Zot6 protocol** which is next version of **zot5 protocol**. Osada has native support for the **ActivityPub protocol** (W3C standard) as well as the more advanced features. It can inter-operate with other social networking applications and projects in either of these spaces, including **Mastodon, Pleroma, Pixelfed, PeerTube, Funkwhale, Zap, Friendica, Hubzilla,** and many more. \ No newline at end of file diff --git a/doc/DISCLAIMER.md b/doc/DISCLAIMER.md new file mode 100644 index 0000000..244b4c9 --- /dev/null +++ b/doc/DISCLAIMER.md @@ -0,0 +1,18 @@ +## This app claims following features: +- [X] LDAP integration +- [X] Multi-instance +- [X] Adeed php.log in the root folder for debugging PHP, with logrotate applied on it (can be accesssed by **admin->logs** and entering the **php.log**). +- [X] Fail2Ban +- [X] Option to choose between **Mysql** and **PostgreSQL** for the Osada + +## Ldap Admin user rights, logs and failed database updates + +- **For admin rights**: When installation is complete, you will need to visit your new hub's page and login with the **admin account username** which was entered at the time of installation process. You should then be able to create your first channel and have the **admin rights** for the hub. + +- **For normal YunoHost users**: Normal LDAP users can login through LDAP authentication and create there channels. + +- **Failing to get admin rights**: If the admin cannot access the admin settings at `https://osada.example.com/admin` then you have to **manually add 4096** to the **account_roles** under **accounts** for that user in the **database through phpMyAdmin**. + +- **For logs**: Go to **admin->logs** and enter the file name **php.log**. + +- **Failed Database after Upgrade:** Some times databse upgrade fails after version upgrade. You can go to hub eg. `https://osada.example.com/admin/dbsync/` and check the numbers of failled update. These updates will have to be ran manually by **phpMyAdmin**. diff --git a/doc/screenshots/comment_on_posts.gif b/doc/screenshots/comment_on_posts.gif new file mode 100644 index 0000000000000000000000000000000000000000..08b64c25e302d2e50f61904cc3ddcbf831c5b032 GIT binary patch literal 117294 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 z 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 z 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 literal 0 HcmV?d00001 diff --git a/manifest.json b/manifest.json index 2638e17..80f2ceb 100755 --- a/manifest.json +++ b/manifest.json @@ -6,9 +6,14 @@ "en": "Decentralized publication platform and social network", "fr": "Plateforme de publication décentralisée et un réseau social" }, - "url": "http://zotlabs.com/osada/", - "license": "MIT", "version": "21.05.21~ynh1", + "url": "http://zotlabs.com/osada/", + "upstream": { + "license": "MIT", + "website": "http://zotlabs.com/osada/", + "code": "https://codeberg.org/zot/osada" + }, + "license": "MIT", "maintainer": { "name": "Anmol Sharma", "email": "" From 336a962449acf5b3e349983a51f8d3cd4028d88f Mon Sep 17 00:00:00 2001 From: Yunohost-Bot <> Date: Wed, 3 Nov 2021 21:51:27 +0000 Subject: [PATCH 14/23] Auto-update README --- README.md | 43 +++++++++++++++++++---------------- README_fr.md | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 88 insertions(+), 19 deletions(-) create mode 100644 README_fr.md diff --git a/README.md b/README.md index 2ac60a5..b373f37 100644 --- a/README.md +++ b/README.md @@ -1,22 +1,32 @@ + + # Osada for YunoHost -[![Integration level](https://dash.yunohost.org/integration/osada.svg)](https://dash.yunohost.org/appci/app/osada) ![](https://ci-apps.yunohost.org/ci/badges/osada.status.svg) ![](https://ci-apps.yunohost.org/ci/badges/osada.maintain.svg) - - +[![Integration level](https://dash.yunohost.org/integration/osada.svg)](https://dash.yunohost.org/appci/app/osada) ![](https://ci-apps.yunohost.org/ci/badges/osada.status.svg) ![](https://ci-apps.yunohost.org/ci/badges/osada.maintain.svg) [![Install Osada with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=osada) -> *This package allow you to install Osada quickly and simply on a YunoHost server. -If you don't have YunoHost, please see [here](https://yunohost.org/#/install) to know how to install and enjoy it.* +*[Lire ce readme en français.](./README_fr.md)* +> *This package allows you to install Osada 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.* + +## Overview ## Overview [Osada](http://zotlabs.com/osada/) uses **Zot6 protocol** which is next version of **zot5 protocol**. Osada has native support for the **ActivityPub protocol** (W3C standard) as well as the more advanced features. It can inter-operate with other social networking applications and projects in either of these spaces, including **Mastodon, Pleroma, Pixelfed, PeerTube, Funkwhale, Zap, Friendica, Hubzilla,** and many more. -**Shipped version:** 21.05.21 +**Shipped version:** 21.05.21~ynh1 + + ## Screenshots -![](http://zotlabs.com/osada/img/comment_on_posts.gif) +![](./doc/screenshots/comment_on_posts.gif) + +## Disclaimers / important information ## This app claims following features: - [X] LDAP integration @@ -37,19 +47,12 @@ If you don't have YunoHost, please see [here](https://yunohost.org/#/install) to - **Failed Database after Upgrade:** Some times databse upgrade fails after version upgrade. You can go to hub eg. `https://osada.example.com/admin/dbsync/` and check the numbers of failled update. These updates will have to be ran manually by **phpMyAdmin**. -#### Supported architectures +## Documentation and resources -* x86-64 - [![Build Status](https://ci-apps.yunohost.org/ci/logs/osada%20%28Official%29.svg)](https://ci-apps.yunohost.org/ci/apps/osada/) -* ARMv8-A - [![Build Status](https://ci-apps-arm.yunohost.org/ci/logs/osada%20%28Official%29.svg)](https://ci-apps-arm.yunohost.org/ci/apps/osada/) - -### Interesting links - -- [YunoHost project](https://yunohost.org) -- [Osada website](http://zotlabs.com/osada/) -- [Osada code on Codeberg](https://codeberg.org/zot/osada) -- [Osada addons on Codeberg](https://codeberg.org/zot/osada-addons) - ---- +* Official app website: http://zotlabs.com/osada/ +* Upstream app code repository: https://codeberg.org/zot/osada +* YunoHost documentation for this app: https://yunohost.org/app_osada +* Report a bug: https://github.com/YunoHost-Apps/osada_ynh/issues ## Developer info @@ -61,3 +64,5 @@ sudo yunohost app install https://github.com/YunoHost-Apps/osada_ynh/tree/testin or sudo yunohost app upgrade osada -u https://github.com/YunoHost-Apps/osada_ynh/tree/testing --debug ``` + +**More info regarding app packaging:** https://yunohost.org/packaging_apps \ No newline at end of file diff --git a/README_fr.md b/README_fr.md new file mode 100644 index 0000000..c0606f1 --- /dev/null +++ b/README_fr.md @@ -0,0 +1,64 @@ +# Osada pour YunoHost + +[![Niveau d'intégration](https://dash.yunohost.org/integration/osada.svg)](https://dash.yunohost.org/appci/app/osada) ![](https://ci-apps.yunohost.org/ci/badges/osada.status.svg) ![](https://ci-apps.yunohost.org/ci/badges/osada.maintain.svg) +[![Installer Osada avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=osada) + +*[Read this readme in english.](./README.md)* +*[Lire ce readme en français.](./README_fr.md)* + +> *Ce package vous permet d'installer Osada 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.* + +## Vue d'ensemble + +## Overview +[Osada](http://zotlabs.com/osada/) uses **Zot6 protocol** which is next version of **zot5 protocol**. Osada has native support for the **ActivityPub protocol** (W3C standard) as well as the more advanced features. It can inter-operate with other social networking applications and projects in either of these spaces, including **Mastodon, Pleroma, Pixelfed, PeerTube, Funkwhale, Zap, Friendica, Hubzilla,** and many more. + +**Version incluse :** 21.05.21~ynh1 + + + +## Captures d'écran + +![](./doc/screenshots/comment_on_posts.gif) + +## Avertissements / informations importantes + +## This app claims following features: +- [X] LDAP integration +- [X] Multi-instance +- [X] Adeed php.log in the root folder for debugging PHP, with logrotate applied on it (can be accesssed by **admin->logs** and entering the **php.log**). +- [X] Fail2Ban +- [X] Option to choose between **Mysql** and **PostgreSQL** for the Osada + +## Ldap Admin user rights, logs and failed database updates + +- **For admin rights**: When installation is complete, you will need to visit your new hub's page and login with the **admin account username** which was entered at the time of installation process. You should then be able to create your first channel and have the **admin rights** for the hub. + +- **For normal YunoHost users**: Normal LDAP users can login through LDAP authentication and create there channels. + +- **Failing to get admin rights**: If the admin cannot access the admin settings at `https://osada.example.com/admin` then you have to **manually add 4096** to the **account_roles** under **accounts** for that user in the **database through phpMyAdmin**. + +- **For logs**: Go to **admin->logs** and enter the file name **php.log**. + +- **Failed Database after Upgrade:** Some times databse upgrade fails after version upgrade. You can go to hub eg. `https://osada.example.com/admin/dbsync/` and check the numbers of failled update. These updates will have to be ran manually by **phpMyAdmin**. + +## Documentations et ressources + +* Site officiel de l'app : http://zotlabs.com/osada/ +* Dépôt de code officiel de l'app : https://codeberg.org/zot/osada +* Documentation YunoHost pour cette app : https://yunohost.org/app_osada +* Signaler un bug : https://github.com/YunoHost-Apps/osada_ynh/issues + +## Informations pour les développeurs + +Merci de faire vos pull request sur la [branche testing](https://github.com/YunoHost-Apps/osada_ynh/tree/testing). + +Pour essayer la branche testing, procédez comme suit. +``` +sudo yunohost app install https://github.com/YunoHost-Apps/osada_ynh/tree/testing --debug +ou +sudo yunohost app upgrade osada -u https://github.com/YunoHost-Apps/osada_ynh/tree/testing --debug +``` + +**Plus d'infos sur le packaging d'applications :** https://yunohost.org/packaging_apps \ No newline at end of file From 744198483a863a7d60d390e8f5d7045275591328 Mon Sep 17 00:00:00 2001 From: ericgaspar Date: Wed, 3 Nov 2021 22:52:58 +0100 Subject: [PATCH 15/23] set rights --- scripts/install | 2 +- scripts/upgrade | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/scripts/install b/scripts/install index 95eff85..6b64bb6 100755 --- a/scripts/install +++ b/scripts/install @@ -126,7 +126,7 @@ ynh_script_progression --message="Creating smarty3 folder for personal data..." mkdir -p "${final_path}/store" mkdir -p "${final_path}/cache/smarty3" -chmod -R 777 $final_path/store $final_path/cache +chmod -R 775 $final_path/store $final_path/cache # Copy the template install/htconfig.sample.php to .htconfig.php ynh_script_progression --message="Moving .htconfig.php to root of Osada ..." diff --git a/scripts/upgrade b/scripts/upgrade index 18874e2..76d3da1 100755 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -115,7 +115,7 @@ if [ `cd $final_path && git rev-parse --is-inside-work-tree` ]; then fi; done popd - chmod -R 777 $final_path/store + chmod -R 775 $final_path/store else # Create a temporary directory @@ -137,7 +137,7 @@ else cp -a "$tmpdir/.htconfig.php" "${final_path}" cp -a "$tmpdir/php.log" "${final_path}" ynh_secure_remove --file="$tmpdir" - chmod -R 777 $final_path/store + chmod -R 775 $final_path/store mkdir $final_path/addon ynh_setup_source --dest_dir="$final_path/addon" --source_id="app_addons" fi From ec90c07d5e505e334a6c7bbc20c6bfbf8e770c69 Mon Sep 17 00:00:00 2001 From: ericgaspar Date: Sat, 6 Nov 2021 11:06:49 +0100 Subject: [PATCH 16/23] Cleaning up --- check_process | 8 ++++++-- scripts/upgrade | 21 +++++++-------------- 2 files changed, 13 insertions(+), 16 deletions(-) diff --git a/check_process b/check_process index 1f698ae..aa00f58 100755 --- a/check_process +++ b/check_process @@ -11,10 +11,14 @@ setup_private=0 setup_public=1 upgrade=1 - #upgrade=1 from_commit= + upgrade=1 from_commit=81e4171acaa44520d0f527e6af445f4f33f2bca0 backup_restore=1 multi_instance=1 change_url=0 ;;; Options Email= -Notification= \ No newline at end of file +Notification=none +;;; Upgrade options + ; commit=81e4171acaa44520d0f527e6af445f4f33f2bca0 + name=Merge pull request #9 + manifest_arg=domain=DOMAIN&path=PATH&admin=USER&language=fr&is_public=1&password=pass&port=666& diff --git a/scripts/upgrade b/scripts/upgrade index 83d0293..5144837 100755 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -40,16 +40,6 @@ ynh_clean_setup () { # Exit if an error occurs during the execution of the script ynh_abort_if_errors -#================================================= -# Migrate legacy permissions to new system -#================================================= -if ynh_legacy_permissions_exists -then - ynh_legacy_permissions_delete_all - - ynh_app_setting_delete --app=$app --key=is_public -fi - #================================================= # STANDARD UPGRADE STEPS #================================================= @@ -69,6 +59,13 @@ if [ -z "$db_name" ]; then ynh_app_setting_set --app=$app --key=db_name --value=$db_name fi +if ynh_legacy_permissions_exists +then + ynh_legacy_permissions_delete_all + + ynh_app_setting_delete --app=$app --key=is_public +fi + #================================================= # CREATE DEDICATED USER #================================================= @@ -210,10 +207,6 @@ chmod 644 "/etc/cron.d/$app" ynh_script_progression --message="Upgrading dependencies..." if [ $database -eq 1 ]; then - #================================================= - # CHECK VERSION FOR SPECIFIC MYSQL UPDATE - #================================================= - # Check version and if this version was a fresh install push mysql query db_name=$(ynh_app_setting_get --app=$app --key=db_name) db_pwd=$(ynh_app_setting_get --app=$app --key=mysqlpwd) From 565e91d20d227515dac55e6a27ab2f3c68e52c3d Mon Sep 17 00:00:00 2001 From: ericgaspar Date: Sat, 6 Nov 2021 22:13:14 +0100 Subject: [PATCH 17/23] Fix --- conf/app.src | 6 +-- conf/app_addons.src | 6 +-- conf/htconfig.sample.php | 103 +++++++++++++++++++++++++++++++++++++++ scripts/install | 70 ++++++++++---------------- 4 files changed, 133 insertions(+), 52 deletions(-) create mode 100644 conf/htconfig.sample.php diff --git a/conf/app.src b/conf/app.src index b8c853e..ca6dad1 100755 --- a/conf/app.src +++ b/conf/app.src @@ -1,6 +1,4 @@ -SOURCE_URL=https://codeberg.org/zot/osada/archive/0c22781a2271170d0557881ac58a202148351c64.tar.gz -SOURCE_SUM=0cdd761aac0f1a382f6593868bd66d9919333fda4edeb1f2904d13a01febbeed +SOURCE_URL=https://codeberg.org/zot/osada/archive/88b1be4b340262a946b8e2548617cea3641b0a71.tar.gz +SOURCE_SUM=42f4c004e8d0dd78303aa0118b206be86b67ed9b6ba156c69b1e1e2d109de74b SOURCE_SUM_PRG=sha256sum SOURCE_FORMAT=tar.gz -SOURCE_IN_SUBDIR= -SOURCE_FILENAME= diff --git a/conf/app_addons.src b/conf/app_addons.src index ae6a797..89ce920 100755 --- a/conf/app_addons.src +++ b/conf/app_addons.src @@ -1,6 +1,4 @@ -SOURCE_URL=https://codeberg.org/zot/osada-addons/archive/0518974958ef5dbc81829a523753d4d4605bb0b4.tar.gz -SOURCE_SUM=103591cb295be106d163302a036f5942ba3802db853906defa2186ff599a0a5b +SOURCE_URL=https://codeberg.org/zot/osada-addons/archive/34788e835b87535404aee56d0aece885707565e9.tar.gz +SOURCE_SUM=2b0e268472c3c3c1ce14557fa86a7abd1d533554b541a056cd960291160f1328 SOURCE_SUM_PRG=sha256sum SOURCE_FORMAT=tar.gz -SOURCE_IN_SUBDIR= -SOURCE_FILENAME= diff --git a/conf/htconfig.sample.php b/conf/htconfig.sample.php new file mode 100644 index 0000000..69d2d4b --- /dev/null +++ b/conf/htconfig.sample.php @@ -0,0 +1,103 @@ +> $final_path/.htconfig.php - -ynh_store_file_checksum --file="$config" - #================================================= # NGINX CONFIGURATION #================================================= @@ -197,14 +187,6 @@ ynh_script_progression --message="Configuring NGINX web server..." # Create a dedicated NGINX config ynh_add_nginx_config -#================================================= -# PHP-FPM CONFIGURATION -#================================================= -ynh_script_progression --message="Configuring PHP-FPM..." - -# Create a dedicated PHP-FPM config -ynh_add_fpm_config --package="$extra_php_dependencies" - #================================================= # SET CRON JOB #================================================= From 6a676b5c374c519143ec501e5664ae0abe9ab3b3 Mon Sep 17 00:00:00 2001 From: ericgaspar Date: Sat, 6 Nov 2021 23:30:21 +0100 Subject: [PATCH 18/23] Update install --- scripts/install | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/scripts/install b/scripts/install index b06b4cd..a8d9196 100755 --- a/scripts/install +++ b/scripts/install @@ -144,6 +144,13 @@ ynh_script_progression --message="Configuring PHP-FPM..." ynh_add_fpm_config --package="$extra_php_dependencies" phpversion=$(ynh_app_setting_get --app=$app --key=phpversion) +#================================================= +# CREATE A DATABASE VAR +#================================================= + +db_name=$(ynh_sanitize_dbid --db_name=$app) +db_user=$db_name + #================================================= # MODIFY A CONFIG FILE #================================================= @@ -160,8 +167,7 @@ chown $app:$app "$final_path/.htconfig.php" if [ $database -eq 1 ]; then ynh_script_progression --message="Creating a MySQL database..." - db_name=$(ynh_sanitize_dbid --db_name=$app) - db_user=$db_name + ynh_app_setting_set --app=$app --key=db_name --value=$db_name ynh_mysql_setup_db --db_user=$db_user --db_name=$db_name ynh_mysql_connect_as --user="$db_name" --password="$db_pwd" --database="$db_name" < $final_path/install/schema_mysql.sql @@ -169,8 +175,7 @@ elif [ $database -eq 2 ]; then # Create postgresql database ynh_script_progression --message="Creating a postgresql database..." ynh_replace_string --match_string="db_type = 0;" --replace_string="db_type = 1;" --target_file="$final_path/.htconfig.php" - db_name=$(ynh_sanitize_dbid --db_name=$app) - db_user=$app + ynh_psql_test_if_first_run ynh_psql_setup_db --db_user=$db_user --db_name=$db_name ynh_app_setting_set --app=$app --key=db_name --value=$db_name From 5773ec4d6176edc670e6f80be19bc7fd653510d4 Mon Sep 17 00:00:00 2001 From: ericgaspar Date: Sat, 6 Nov 2021 23:31:22 +0100 Subject: [PATCH 19/23] Update install --- scripts/install | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/scripts/install b/scripts/install index a8d9196..a1232fd 100755 --- a/scripts/install +++ b/scripts/install @@ -150,6 +150,7 @@ phpversion=$(ynh_app_setting_get --app=$app --key=phpversion) db_name=$(ynh_sanitize_dbid --db_name=$app) db_user=$db_name +ynh_app_setting_set --app=$app --key=db_name --value=$db_name #================================================= # MODIFY A CONFIG FILE @@ -167,15 +168,12 @@ chown $app:$app "$final_path/.htconfig.php" if [ $database -eq 1 ]; then ynh_script_progression --message="Creating a MySQL database..." - - ynh_app_setting_set --app=$app --key=db_name --value=$db_name ynh_mysql_setup_db --db_user=$db_user --db_name=$db_name ynh_mysql_connect_as --user="$db_name" --password="$db_pwd" --database="$db_name" < $final_path/install/schema_mysql.sql elif [ $database -eq 2 ]; then # Create postgresql database ynh_script_progression --message="Creating a postgresql database..." ynh_replace_string --match_string="db_type = 0;" --replace_string="db_type = 1;" --target_file="$final_path/.htconfig.php" - ynh_psql_test_if_first_run ynh_psql_setup_db --db_user=$db_user --db_name=$db_name ynh_app_setting_set --app=$app --key=db_name --value=$db_name From af7016128b2ef8f58f526bc719dee4f22f83a1b7 Mon Sep 17 00:00:00 2001 From: ericgaspar Date: Sat, 6 Nov 2021 23:33:48 +0100 Subject: [PATCH 20/23] Fix --- scripts/backup | 1 + scripts/install | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/backup b/scripts/backup index 8e6122b..bcb1aeb 100755 --- a/scripts/backup +++ b/scripts/backup @@ -20,6 +20,7 @@ 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) diff --git a/scripts/install b/scripts/install index a1232fd..a175f5f 100755 --- a/scripts/install +++ b/scripts/install @@ -176,7 +176,6 @@ elif [ $database -eq 2 ]; then ynh_replace_string --match_string="db_type = 0;" --replace_string="db_type = 1;" --target_file="$final_path/.htconfig.php" ynh_psql_test_if_first_run ynh_psql_setup_db --db_user=$db_user --db_name=$db_name - ynh_app_setting_set --app=$app --key=db_name --value=$db_name ynh_psql_connect_as --user="$db_name" --password="$db_pwd" --database="$db_name" < $final_path/install/schema_postgres.sql else ynh_die --message="Some problem occured in creating the database, contact maintainer" From 26323e8913d1b9005619881ff54578c95374d71d Mon Sep 17 00:00:00 2001 From: ericgaspar Date: Sun, 7 Nov 2021 08:52:14 +0100 Subject: [PATCH 21/23] Update install --- scripts/install | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/scripts/install b/scripts/install index a175f5f..ea3ab9f 100755 --- a/scripts/install +++ b/scripts/install @@ -152,16 +152,6 @@ db_name=$(ynh_sanitize_dbid --db_name=$app) db_user=$db_name ynh_app_setting_set --app=$app --key=db_name --value=$db_name -#================================================= -# MODIFY A CONFIG FILE -#================================================= -ynh_script_progression --message="Adding a configuration file..." --weight=1 - -ynh_add_config --template="../conf/htconfig.sample.php" --destination="$final_path/.htconfig.php" - -chmod 600 "$final_path/.htconfig.php" -chown $app:$app "$final_path/.htconfig.php" - #================================================= # CREATE A DATABASE #================================================= @@ -181,6 +171,16 @@ else ynh_die --message="Some problem occured in creating the database, contact maintainer" fi +#================================================= +# MODIFY A CONFIG FILE +#================================================= +ynh_script_progression --message="Adding a configuration file..." --weight=1 + +ynh_add_config --template="../conf/htconfig.sample.php" --destination="$final_path/.htconfig.php" + +chmod 600 "$final_path/.htconfig.php" +chown $app:$app "$final_path/.htconfig.php" + #================================================= # NGINX CONFIGURATION #================================================= From 327cf1b70f7e99d934a0fdfa63bf37e9bef23789 Mon Sep 17 00:00:00 2001 From: ericgaspar Date: Fri, 12 Nov 2021 19:24:06 +0100 Subject: [PATCH 22/23] Update manifest.json --- manifest.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manifest.json b/manifest.json index 80f2ceb..0e91e1d 100755 --- a/manifest.json +++ b/manifest.json @@ -6,7 +6,7 @@ "en": "Decentralized publication platform and social network", "fr": "Plateforme de publication décentralisée et un réseau social" }, - "version": "21.05.21~ynh1", + "version": "21.05.21~ynh2", "url": "http://zotlabs.com/osada/", "upstream": { "license": "MIT", From 008de88802a95462f20fedb5b4073ddcfd8714bf Mon Sep 17 00:00:00 2001 From: Yunohost-Bot <> Date: Fri, 12 Nov 2021 18:24:13 +0000 Subject: [PATCH 23/23] 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 b373f37..fe003b6 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 ## Overview [Osada](http://zotlabs.com/osada/) uses **Zot6 protocol** which is next version of **zot5 protocol**. Osada has native support for the **ActivityPub protocol** (W3C standard) as well as the more advanced features. It can inter-operate with other social networking applications and projects in either of these spaces, including **Mastodon, Pleroma, Pixelfed, PeerTube, Funkwhale, Zap, Friendica, Hubzilla,** and many more. -**Shipped version:** 21.05.21~ynh1 +**Shipped version:** 21.05.21~ynh2 diff --git a/README_fr.md b/README_fr.md index c0606f1..411cf20 100644 --- a/README_fr.md +++ b/README_fr.md @@ -14,7 +14,7 @@ Si vous n'avez pas YunoHost, regardez [ici](https://yunohost.org/#/install) pour ## Overview [Osada](http://zotlabs.com/osada/) uses **Zot6 protocol** which is next version of **zot5 protocol**. Osada has native support for the **ActivityPub protocol** (W3C standard) as well as the more advanced features. It can inter-operate with other social networking applications and projects in either of these spaces, including **Mastodon, Pleroma, Pixelfed, PeerTube, Funkwhale, Zap, Friendica, Hubzilla,** and many more. -**Version incluse :** 21.05.21~ynh1 +**Version incluse :** 21.05.21~ynh2