diff --git a/README.md b/README.md index a24818d..3b63854 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,7 @@ If you don't have YunoHost, please consult [the guide](https://yunohost.org/#/in ## Overview -[Zap](https://zotlabs.com/zap/) is an an ethical alternative to Fediverse that provides powerful features for creating interconnected websites featuring a decentralized identity, communications, and permissions framework built using common webserver technology. +Zap is an an ethical alternative to Fediverse that provides powerful features for creating interconnected websites featuring a decentralized identity, communications, and permissions framework built using common webserver technology. Compatible with **Mastodon**, **Pleroma**, **Pixelfed**, **Friendica**, **Hubzilla**, **Funkwhale**, **Peertube**, **Plume**, **WriteFreely** and many, many more. @@ -32,34 +32,13 @@ Compatible with **Mastodon**, **Pleroma**, **Pixelfed**, **Friendica**, **Hubzil **Shipped version:** 21.11.28~ynh2 -## Disclaimers / important information - -## Installation - -Before installing, read the [Zap installation instructions](https://codeberg.org/zot/zap/src/branch/release/install/INSTALL.txt) for important information about: - -### Register a new domain and add it to YunoHost - -- Zap requires a dedicated domain, so obtain one and add it using the YunoHost admin panel. **Domains -> Add domain**. As Zap uses the full domain and is installed on the root, you can create a subdomain such as Zap.domain.tld. Don't forget to update your DNS if you manage them manually. - -## 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://zap.example.com/admin` or you want to grant admin rights to any other user(s) on the hub, 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://zap.example.com/admin/dbsync/` and check the numbers of failled update. These updates will have to be ran manually by **phpMYAdmin**. - ## :red_circle: Antifeatures - **Upstream not maintained**: This software is not maintained anymore. Expect it to break down over time, be exposed to unfixed security breaches, etc. ## Documentation and resources +* Official app website: * Upstream app code repository: * YunoHost Store: * Report a bug: diff --git a/README_fr.md b/README_fr.md index ddabc41..1b956c9 100644 --- a/README_fr.md +++ b/README_fr.md @@ -16,50 +16,28 @@ Si vous n’avez pas YunoHost, regardez [ici](https://yunohost.org/#/install) po ## Vue d’ensemble -[Zap](https://zotlabs.com/zap/) is an an ethical alternative to Fediverse that provides powerful features for creating interconnected websites featuring a decentralized identity, communications, and permissions framework built using common webserver technology. +Zap est une alternative éthique à Fediverse qui fournit des fonctionnalités puissantes pour créer des sites Web interconnectés dotés d'un cadre décentralisé d'identité, de communications et d'autorisations construit à l'aide d'une technologie de serveur Web commune. -Compatible with **Mastodon**, **Pleroma**, **Pixelfed**, **Friendica**, **Hubzilla**, **Funkwhale**, **Peertube**, **Plume**, **WriteFreely** and many, many more. +Compatible avec **Mastodon**, **Pleroma**, **Pixelfed**, **Friendica**, **Hubzilla**, **Funkwhale**, **Peertube**, **Plume**, **WriteFreely** et bien d'autres encore. -## Unique Features of ZAP - -- **Groups** : public, private, and moderated. -- **Events** : Calendar and attendance; automatic birthday notifications for friends using this feature. -- **Cloud**storage : Built-in network file storage integrated with social networking access. -- **Editor** : Supports both markdown and bbcode. Use either or both - if you want. -- **Share**: Drag-and-drop a number of different things such as files, photos, webpages, maps, phone numbers to share- them. -- **Lists**: Sometimes referred to as circles or aspects, this lets you define your own groups of related friends and- communicate with them as a private group. -- **Extend** : Change or upgrade your software functionality as desired by installing additional features from addons and- the free app collection. +## Caractéristiques uniques de ZAP +- **Groupes** : publics, privés et modérés. +- **Événements** : Calendrier et participation ; notifications d'anniversaire automatiques pour les amis utilisant cette fonctionnalité. +- Stockage **Cloud** : stockage de fichiers réseau intégré intégré à l'accès aux réseaux sociaux. +- **Éditeur** : Prend en charge à la fois le markdown et le bbcode. Utilisez l'un ou les deux, si vous le souhaitez. +- **Partager** : faites glisser et déposez un certain nombre d'éléments différents tels que des fichiers, des photos, des pages Web, des cartes, des numéros de téléphone pour les partager. +- **Listes** : parfois appelées cercles ou aspects, cela vous permet de définir vos propres groupes d'amis liés et de communiquer avec eux en tant que groupe privé. +- **Extend** : modifiez ou mettez à niveau les fonctionnalités de votre logiciel comme vous le souhaitez en installant des fonctionnalités supplémentaires à partir des modules complémentaires et de la collection d'applications gratuites. **Version incluse :** 21.11.28~ynh2 -## Avertissements / informations importantes - -## Installation - -Before installing, read the [Zap installation instructions](https://codeberg.org/zot/zap/src/branch/release/install/INSTALL.txt) for important information about: - -### Register a new domain and add it to YunoHost - -- Zap requires a dedicated domain, so obtain one and add it using the YunoHost admin panel. **Domains -> Add domain**. As Zap uses the full domain and is installed on the root, you can create a subdomain such as Zap.domain.tld. Don't forget to update your DNS if you manage them manually. - -## 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://zap.example.com/admin` or you want to grant admin rights to any other user(s) on the hub, 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://zap.example.com/admin/dbsync/` and check the numbers of failled update. These updates will have to be ran manually by **phpMYAdmin**. - ## :red_circle: Fonctions indésirables - **Upstream not maintained**: This software is not maintained anymore. Expect it to break down over time, be exposed to unfixed security breaches, etc. ## Documentations et ressources +* Site officiel de l’app : * Dépôt de code officiel de l’app : * YunoHost Store: * Signaler un bug : diff --git a/check_process b/check_process deleted file mode 100644 index b89514a..0000000 --- a/check_process +++ /dev/null @@ -1,20 +0,0 @@ -;; Test complet - ; Manifest - domain="domain.tld" - admin="john" - upload="256M" - database="1" - ; Checks - pkg_linter=1 - setup_sub_dir=0 - setup_root=1 - setup_nourl=0 - setup_private=0 - setup_public=1 - upgrade=1 - backup_restore=1 - multi_instance=1 - change_url=0 -;;; Options -Email= -Notification= diff --git a/conf/app.src b/conf/app.src deleted file mode 100644 index c396194..0000000 --- a/conf/app.src +++ /dev/null @@ -1,3 +0,0 @@ -SOURCE_URL=https://codeberg.org/zot-archive/zap/archive/078714b9dde991d02f8cce1183ce357d96405558.tar.gz -SOURCE_SUM=b188872d60ef30d50686a079da03cc4cdee451729a84bcf748649bbe8b8568e6 -SOURCE_FORMAT=tar.gz diff --git a/conf/app_addons.src b/conf/app_addons.src deleted file mode 100644 index 4a47767..0000000 --- a/conf/app_addons.src +++ /dev/null @@ -1,6 +0,0 @@ -SOURCE_URL=https://codeberg.org/zot-archive/zap-addons/archive/b2ddcc67735fb413f14efcc9c49780469b8b61cf.tar.gz -SOURCE_SUM=05595b3baa9d08001a8f01c7d069ebfb1b325621dd75e84ebc1257769e0f2f4a -SOURCE_SUM_PRG=sha256sum -SOURCE_FORMAT=tar.gz -SOURCE_IN_SUBDIR= -SOURCE_FILENAME= diff --git a/conf/extra_php-fpm.conf b/conf/extra_php-fpm.conf new file mode 100644 index 0000000..700c37c --- /dev/null +++ b/conf/extra_php-fpm.conf @@ -0,0 +1,4 @@ +; Additional php.ini defines, specific to this pool of workers. + +php_admin_value[upload_max_filesize] = 50M +php_admin_value[post_max_size] = 50M diff --git a/conf/htconfig.php b/conf/htconfig.php new file mode 100644 index 0000000..e737876 --- /dev/null +++ b/conf/htconfig.php @@ -0,0 +1,104 @@ +}t tag -; e.g. for a ISO8601 formatted timestring, use: %{%Y-%m-%dT%H:%M:%S%z}t -; %T: time the log has been written (the request has finished) -; it can accept a strftime(3) format: -; %d/%b/%Y:%H:%M:%S %z (default) -; The strftime(3) format must be encapsuled in a %{}t tag -; e.g. for a ISO8601 formatted timestring, use: %{%Y-%m-%dT%H:%M:%S%z}t -; %u: remote user -; -; Default: "%R - %u %t \"%m %r\" %s" -;access.format = "%R - %u %t \"%m %r%Q%q\" %s %f %{mili}d %{kilo}M %C%%" - -; The log file for slow requests -; Default Value: not set -; Note: slowlog is mandatory if request_slowlog_timeout is set -;slowlog = log/$pool.log.slow - -; The timeout for serving a single request after which a PHP backtrace will be -; dumped to the 'slowlog' file. A value of '0s' means 'off'. -; Available units: s(econds)(default), m(inutes), h(ours), or d(ays) -; Default Value: 0 -;request_slowlog_timeout = 0 - -; The timeout for serving a single request after which the worker process will -; be killed. This option should be used when the 'max_execution_time' ini option -; does not stop script execution for some reason. A value of '0' means 'off'. -; Available units: s(econds)(default), m(inutes), h(ours), or d(ays) -; Default Value: 0 -request_terminate_timeout = 1d - -; Set open file descriptor rlimit. -; Default Value: system defined value -;rlimit_files = 1024 - -; Set max core size rlimit. -; Possible Values: 'unlimited' or an integer greater or equal to 0 -; Default Value: system defined value -;rlimit_core = 0 - -; Chroot to this directory at the start. This value must be defined as an -; absolute path. When this value is not set, chroot is not used. -; Note: you can prefix with '$prefix' to chroot to the pool prefix or one -; of its subdirectories. If the pool prefix is not set, the global prefix -; will be used instead. -; Note: chrooting is a great security feature and should be used whenever -; possible. However, all PHP paths will be relative to the chroot -; (error_log, sessions.save_path, ...). -; Default Value: not set -;chroot = - -; Chdir to this directory at the start. -; Note: relative path can be used. -; Default Value: current directory or / when chroot -chdir = __FINALPATH__ - -; Redirect worker stdout and stderr into main error log. If not set, stdout and -; stderr will be redirected to /dev/null according to FastCGI specs. -; Note: on highloaded environement, this can cause some delay in the page -; process time (several ms). -; Default Value: no -;catch_workers_output = yes - -; Clear environment in FPM workers -; Prevents arbitrary environment variables from reaching FPM worker processes -; by clearing the environment in workers before env vars specified in this -; pool configuration are added. -; Setting to "no" will make all environment variables available to PHP code -; via getenv(), $_ENV and $_SERVER. -; Default Value: yes -;clear_env = no - -; Limits the extensions of the main script FPM will allow to parse. This can -; prevent configuration mistakes on the web server side. You should only limit -; FPM to .php extensions to prevent malicious users to use other extensions to -; execute php code. -; Note: set an empty value to allow all extensions. -; Default Value: .php -;security.limit_extensions = .php .php3 .php4 .php5 .php7 - -; Pass environment variables like LD_LIBRARY_PATH. All $VARIABLEs are taken from -; the current environment. -; Default Value: clean env -;env[HOSTNAME] = $HOSTNAME -;env[PATH] = /usr/local/bin:/usr/bin:/bin -;env[TMP] = /tmp -;env[TMPDIR] = /tmp -;env[TEMP] = /tmp - -; Additional php.ini defines, specific to this pool of workers. These settings -; overwrite the values previously defined in the php.ini. The directives are the -; same as the PHP SAPI: -; php_value/php_flag - you can set classic ini defines which can -; be overwritten from PHP call 'ini_set'. -; php_admin_value/php_admin_flag - these directives won't be overwritten by -; PHP call 'ini_set' -; For php_*flag, valid values are on, off, 1, 0, true, false, yes or no. - -; Defining 'extension' will load the corresponding shared extension from -; extension_dir. Defining 'disable_functions' or 'disable_classes' will not -; overwrite previously defined php.ini values, but will append the new value -; instead. - -; Note: path INI options can be relative and will be expanded with the prefix -; (pool, global or /usr) - -; Default Value: nothing is defined by default except the values in php.ini and -; specified at startup with the -d argument -;php_admin_value[sendmail_path] = /usr/sbin/sendmail -t -i -f www@my.domain.com -;php_flag[display_errors] = off -;php_admin_value[error_log] = /var/log/fpm-php.www.log -;php_admin_flag[log_errors] = on -;php_admin_value[memory_limit] = 32M - -; Common values to change to increase file upload limit -; php_admin_value[upload_max_filesize] = 50M -; php_admin_value[post_max_size] = 50M -; php_admin_flag[mail.add_x_header] = Off - -; Other common parameters -; php_admin_value[max_execution_time] = 600 -; php_admin_value[max_input_time] = 300 -; php_admin_value[memory_limit] = 256M -; php_admin_flag[short_open_tag] = On diff --git a/conf/poller-cron b/conf/poller-cron index f991757..b4c0026 100644 --- a/conf/poller-cron +++ b/conf/poller-cron @@ -1,2 +1,2 @@ # Run poller periodically to update Hubzilla -*/10 * * * * __APP__ cd __FINALPATH__; /usr/bin/php__PHPVERSION__ Zotlabs/Daemon/Master.php Cron > /dev/null 2>&1 \ No newline at end of file +*/10 * * * * __APP__ cd __INSTALL_DIR__; /usr/bin/php__PHPVERSION__ Zotlabs/Daemon/Master.php Cron > /dev/null 2>&1 \ No newline at end of file diff --git a/doc/DISCLAIMER.md b/doc/ADMIN.md similarity index 100% rename from doc/DISCLAIMER.md rename to doc/ADMIN.md diff --git a/doc/DESCRIPTION.md b/doc/DESCRIPTION.md index e561e61..a0d6963 100644 --- a/doc/DESCRIPTION.md +++ b/doc/DESCRIPTION.md @@ -1,4 +1,4 @@ -[Zap](https://zotlabs.com/zap/) is an an ethical alternative to Fediverse that provides powerful features for creating interconnected websites featuring a decentralized identity, communications, and permissions framework built using common webserver technology. +Zap is an an ethical alternative to Fediverse that provides powerful features for creating interconnected websites featuring a decentralized identity, communications, and permissions framework built using common webserver technology. Compatible with **Mastodon**, **Pleroma**, **Pixelfed**, **Friendica**, **Hubzilla**, **Funkwhale**, **Peertube**, **Plume**, **WriteFreely** and many, many more. diff --git a/doc/DESCRIPTION_fr.md b/doc/DESCRIPTION_fr.md new file mode 100644 index 0000000..4bdda53 --- /dev/null +++ b/doc/DESCRIPTION_fr.md @@ -0,0 +1,13 @@ +Zap est une alternative éthique à Fediverse qui fournit des fonctionnalités puissantes pour créer des sites Web interconnectés dotés d'un cadre décentralisé d'identité, de communications et d'autorisations construit à l'aide d'une technologie de serveur Web commune. + +Compatible avec **Mastodon**, **Pleroma**, **Pixelfed**, **Friendica**, **Hubzilla**, **Funkwhale**, **Peertube**, **Plume**, **WriteFreely** et bien d'autres encore. + +## Caractéristiques uniques de ZAP + +- **Groupes** : publics, privés et modérés. +- **Événements** : Calendrier et participation ; notifications d'anniversaire automatiques pour les amis utilisant cette fonctionnalité. +- Stockage **Cloud** : stockage de fichiers réseau intégré intégré à l'accès aux réseaux sociaux. +- **Éditeur** : Prend en charge à la fois le markdown et le bbcode. Utilisez l'un ou les deux, si vous le souhaitez. +- **Partager** : faites glisser et déposez un certain nombre d'éléments différents tels que des fichiers, des photos, des pages Web, des cartes, des numéros de téléphone pour les partager. +- **Listes** : parfois appelées cercles ou aspects, cela vous permet de définir vos propres groupes d'amis liés et de communiquer avec eux en tant que groupe privé. +- **Extend** : modifiez ou mettez à niveau les fonctionnalités de votre logiciel comme vous le souhaitez en installant des fonctionnalités supplémentaires à partir des modules complémentaires et de la collection d'applications gratuites. \ No newline at end of file diff --git a/manifest.json b/manifest.json deleted file mode 100644 index 0ab605a..0000000 --- a/manifest.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "name": "Zap", - "id": "zap", - "packaging_format": 1, - "description": { - "en": "Ethical fediverse server alternative", - "fr": "serveur fedverse éthique" - }, - "version": "21.11.28~ynh2", - "url": "https://codeberg.org/zot-archive/zap", - "upstream": { - "license": "MIT", - "code": "https://codeberg.org/zot-archive/zap" - }, - "license": "MIT", - "maintainer": { - "name": "" - }, - "requirements": { - "yunohost": ">= 11.1.21" - }, - "multi_instance": true, - "services": [ - "nginx", - "php7.4-fpm", - "mysql", - "postgresql" - ], - "arguments": { - "install" : [ - { - "name": "domain", - "type": "domain", - "help": { - "en": "ZAP 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 zap.domain.tld", - "fr": "ZAP 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 zap.domain.tld." - } - }, - { - "name": "admin", - "type": "user" - }, - { - "name": "database", - "type": "select", - "ask": { - "en": "Choose the database to be used for the Zap [mysql:1,postgresql:2]", - "fr": "Choisissez la database de l'Zap [mysql:1,postgresql:2]" - }, - "choices": ["1", "2"], - "default": "1" - } - ] - } -} diff --git a/manifest.toml b/manifest.toml new file mode 100644 index 0000000..03a100b --- /dev/null +++ b/manifest.toml @@ -0,0 +1,64 @@ +packaging_format = 2 + +id = "zap" +name = "Zap" +description.en = "Ethical fediverse server alternative" +description.fr = "serveur fedverse éthique" + +version = "21.11.28~ynh2" + +maintainers = [] + +[upstream] +license = "MIT" +code = "https://codeberg.org/zot-archive/zap" +website = "https://codeberg.org/zot-archive/zap" + +[integration] +yunohost = ">= 11.2" +architectures = "all" +multi_instance = true + +ldap = false + +sso = false + +disk = "50M" +ram.build = "50M" +ram.runtime = "50M" + +[install] + [install.domain] + type = "domain" + + [install.init_main_permission] + type = "group" + default = "visitors" + + [install.admin] + type = "user" + +[resources] + [resources.sources] + [resources.sources.main] + url = "https://codeberg.org/zot-archive/zap/archive/078714b9dde991d02f8cce1183ce357d96405558.tar.gz" + sha256 = "b188872d60ef30d50686a079da03cc4cdee451729a84bcf748649bbe8b8568e6" + + [resources.sources.app_addons] + url = "https://codeberg.org/zot-archive/zap-addons/archive/b2ddcc67735fb413f14efcc9c49780469b8b61cf.tar.gz" + sha256 = "05595b3baa9d08001a8f01c7d069ebfb1b325621dd75e84ebc1257769e0f2f4a" + in_subdir = false + + + [resources.system_user] + + [resources.install_dir] + + [resources.permissions] + main.url = "/" + + [resources.apt] + packages = "postgresql, postgresql-contrib, php7.4-pgsql, php7.4-mbstring, php7.4-cli, php7.4-imagick, php7.4-xml, php7.4-zip, php7.4-json, php7.4-gd" + + [resources.database] + type = "postgresql" \ No newline at end of file diff --git a/scripts/_common.sh b/scripts/_common.sh index c630efa..be9f593 100644 --- a/scripts/_common.sh +++ b/scripts/_common.sh @@ -4,11 +4,6 @@ # COMMON VARIABLES #================================================= -# dependencies used by the app -YNH_PHP_VERSION="7.4" - -pkg_dependencies="postgresql postgresql-contrib php${YNH_PHP_VERSION}-mbstring php${YNH_PHP_VERSION}-cli php${YNH_PHP_VERSION}-imagick php${YNH_PHP_VERSION}-xml php${YNH_PHP_VERSION}-zip php${YNH_PHP_VERSION}-pgsql php${YNH_PHP_VERSION}-mysql php${YNH_PHP_VERSION}-json php${YNH_PHP_VERSION}-gd" - #================================================= # EXPERIMENTAL HELPERS #================================================= diff --git a/scripts/backup b/scripts/backup index d39ad02..0738c13 100755 --- a/scripts/backup +++ b/scripts/backup @@ -9,29 +9,6 @@ source ../settings/scripts/_common.sh source /usr/share/yunohost/helpers -#================================================= -# MANAGE SCRIPT FAILURE -#================================================= - -ynh_clean_setup () { - true -} -# Exit if an error occurs during the execution of the script -ynh_abort_if_errors - -#================================================= -# LOAD SETTINGS -#================================================= -ynh_print_info --message="Loading installation settings..." - -app=$YNH_APP_INSTANCE_NAME - -final_path=$(ynh_app_setting_get --app=$app --key=final_path) -domain=$(ynh_app_setting_get --app=$app --key=domain) -db_name=$(ynh_app_setting_get --app=$app --key=db_name) -phpversion=$(ynh_app_setting_get --app=$app --key=phpversion) -database=$(ynh_app_setting_get --app=$app --key=database) - #================================================= # DECLARE DATA AND CONF FILES TO BACKUP #================================================= @@ -41,7 +18,7 @@ ynh_print_info --message="Declaring files to be backed up..." # BACKUP THE APP MAIN DIR #================================================= -ynh_backup --src_path="$final_path" +ynh_backup --src_path="$install_dir" #================================================= # BACKUP THE NGINX CONFIGURATION @@ -55,19 +32,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 - ynh_print_info --message="Backup of the MySQL database..." - ynh_mysql_dump_db --database="$db_name" > db.sql -elif [ $database -eq 2 ]; then - # Removing postgresSQL database - ynh_print_info --message="Backup of the postgreSQL database..." - ynh_psql_dump_db --database="$db_name" > db.sql -fi - #================================================= # BACKUP LOGROTATE #================================================= @@ -87,6 +51,13 @@ 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 +#================================================= +ynh_print_info --message="Backup of the PostgreSQL database..." + +ynh_psql_dump_db --database="$db_name" > db.sql + #================================================= # END OF SCRIPT #================================================= diff --git a/scripts/install b/scripts/install index 68b0f3c..4096d21 100755 --- a/scripts/install +++ b/scripts/install @@ -9,91 +9,37 @@ source _common.sh source /usr/share/yunohost/helpers -#================================================= -# MANAGE SCRIPT FAILURE -#================================================= - -# Exit if an error occurs during the execution of the script -ynh_abort_if_errors - #================================================= # RETRIEVE ARGUMENTS FROM THE MANIFEST #================================================= -domain=$YNH_APP_ARG_DOMAIN -path_url="/" -admin=$YNH_APP_ARG_ADMIN email=$(ynh_user_get_info --username=$admin --key=mail) -upload="256M" -database="1" random_string=$(ynh_string_random --length=48) -database=`expr $YNH_APP_ARG_DATABASE` - -app=$YNH_APP_INSTANCE_NAME - -#================================================= -# CHECK IF THE APP CAN BE INSTALLED WITH THESE ARGS -#================================================= -ynh_script_progression --message="Validating installation parameters..." - -final_path=/var/www/$app -test ! -e "$final_path" || ynh_die --message="This path already contains a folder" - -# Register (book) web path -ynh_webpath_register --app=$app --domain=$domain --path_url=$path_url +timezone=$(cat /etc/timezone) #================================================= # STORE SETTINGS FROM MANIFEST #================================================= ynh_print_info "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=database --value=$database ynh_app_setting_set --app=$app --key=random_string --value=$random_string -#================================================= -# STANDARD MODIFICATIONS -#================================================= -# INSTALL DEPENDENCIES -#================================================= -ynh_print_info "Installing dependencies..." - -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 #================================================= - -# 1 - Zap ynh_script_progression --message="Setting up Zap 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 -git clone https://codeberg.org/zot-archive/zap.git "$final_path" --quiet - -# 2 - Zap Addons +ynh_setup_source --dest_dir="$install_dir" # Make addon Directory and unpack the addons to this directory ynh_script_progression --message="Setting up Zap addons source files..." -pushd "$final_path" +pushd "$install_dir" mkdir -p extend/addon/zaddons mkdir addon - git clone https://codeberg.org/zot-archive/zap-addons.git $final_path/extend/addon/zaddons --quiet + + ynh_setup_source --dest_dir="$install_dir/extend/addon/zaddons" --source_id="app_addons" + filelist=(`ls extend/addon/zaddons`) cd addon for a in "${filelist[@]}" ; do @@ -115,80 +61,31 @@ pushd "$final_path" ln -s ../extend/addon/zaddons/$base $base done - popd - - # 3 - Some extra folders 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 +mkdir -p "${install_dir}/store" +mkdir -p "${install_dir}/cache/smarty3" +chmod -R 775 $install_dir/store $install_dir/cache -# Copy the template install/htconfig.sample.php to .htconfig.php -config="$final_path/.htconfig.php" -ynh_script_progression --message="Moving .htconfig.php to root of Zap ..." -cp $final_path/install/htconfig.sample.php $config -config="$final_path/.htconfig.php" # Create php.log inside for logs -ynh_print_info "Create php.log for the debuging..." -touch "$final_path/php.log" +touch "$install_dir/php.log" -chmod 750 "$final_path" -chmod -R o-rwx "$final_path" -chown -R $app:www-data "$final_path" +chmod 750 "$install_dir" +chmod -R o-rwx "$install_dir" +chown -R $app:www-data "$install_dir" #================================================= -# CREATE A DATABASE +# ADD A CONFIGURATION #================================================= +ynh_script_progression --message="Adding a configuration file..." --weight=1 -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_script_progression --message="Importing database..." - 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="$config" - 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 - ynh_script_progression --message="Importing database..." - 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" -fi +ynh_add_config --template="htconfig.php" --destination="$install_dir/.htconfig.php" -#================================================= -# MODIFY A CONFIG FILE -#================================================= - -phpversion=$(ynh_app_setting_get --app=$app --key=phpversion) -ynh_replace_string --match_string="your.mysqlhost.com" --replace_string="localhost" --target_file="$config" -ynh_replace_string --match_string= "mysqlpassword" --replace_string="$db_pwd" --target_file="$config" -ynh_replace_string --match_string="mysqlusername" --replace_string="$db_name" --target_file="$config" -ynh_replace_string --match_string= "mysqldatabasename" --replace_string="$db_name" --target_file="$config" -ynh_replace_string --match_string= "mysite.example" --replace_string="$domain" --target_file="$config" -ynh_replace_string --match_string= "if the auto install failed, put a unique random string here" --replace_string="$random_string" --target_file="$config" -sed -i "s/\['admin_email'\] = '';/\['admin_email'\] = '$email';/g" "$config" -ynh_replace_string --match_string= "//error_reporting(E_ERROR | E_WARNING | E_PARSE );" --replace_string="error_reporting(E_ERROR | E_WARNING | E_PARSE );" --target_file="$config" -ynh_replace_string --match_string= "//ini_set('error_log','php.out');" --replace_string="ini_set('error_log','php.log');" --target_file="$config" -ynh_replace_string --match_string= "//ini_set('log_errors','1');" --replace_string="ini_set('log_errors','1');" --target_file="$config" -ynh_replace_string --match_string= "//ini_set('display_errors', '0');" --replace_string="ini_set('display_errors', '0');" --target_file="$config" -sed -i "s/\['php_path'\] = 'php';/\['php_path'\] = 'php$phpversion';/g" "$config" - -# addon LDAP config -ynh_script_progression --message="Push Ldap configuration to .htconfig.php..." - -cat ../conf/ldap_conf.php >> $final_path/.htconfig.php +chmod 400 "$install_dir/.htconfig.php" +chown $app:$app "$install_dir/.htconfig.php" #================================================= # NGINX CONFIGURATION @@ -198,51 +95,17 @@ 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 -#================================================= -# CRON JOB CONFIGURATION -#================================================= -ynh_script_progression --message="Setting up cron job..." - -ynh_add_config --template="../conf/poller-cron" --destination="/etc/cron.d/$app" +ynh_add_config --template="poller-cron" --destination="/etc/cron.d/$app" chown root: "/etc/cron.d/$app" chmod 644 "/etc/cron.d/$app" -#================================================= -# SETUP LOGROTATE -#================================================= -ynh_script_progression --message="Configuring log rotation..." - # Use logrotate to manage application logfile(s) -ynh_use_logrotate "$final_path/php.log" +ynh_use_logrotate "$install_dir/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 -#================================================= -ynh_script_progression --message="Configuring permissions..." - -ynh_permission_update --permission="main" --add="visitors" - -#================================================= -# RELOAD NGINX -#================================================= -ynh_script_progression --message="Reloading NGINX web server..." - -ynh_systemd_action --service_name=nginx --action=reload +ynh_add_fail2ban_config --logpath="$install_dir/php.log" --failregex="^.*auth\.php.*failed login attempt.*from IP .*$" --max_retry="5" #================================================= # END OF SCRIPT diff --git a/scripts/remove b/scripts/remove index 8655412..472e3e5 100755 --- a/scripts/remove +++ b/scripts/remove @@ -10,95 +10,26 @@ source _common.sh source /usr/share/yunohost/helpers #================================================= -# LOAD SETTINGS +# REMOVE SYSTEM CONFIGURATIONS #================================================= -ynh_script_progression --message="Loading installation settings..." - -app=$YNH_APP_INSTANCE_NAME - -domain=$(ynh_app_setting_get --app=$app --key=domain) -db_name=$(ynh_app_setting_get --app=$app --key=db_name) -db_user="$db_name" -final_path=$(ynh_app_setting_get --app=$app --key=final_path) -database=$(ynh_app_setting_get --app=$app --key=database) - +# REMOVE SYSTEMD SERVICE #================================================= -# REMOVE THE DATABASE -#================================================= - -if [ $database -eq 1 ]; then - ynh_script_progression --message="Removing MySQL database..." - ynh_mysql_remove_db --db_user=$db_user --db_name=$db_name -elif [ $database -eq 2 ]; then - # Removing postgresql database - ynh_script_progression --message="Removing postgreSQL database..." - ynh_psql_remove_db --db_user=$db_user --db_name=$db_name -fi - -#================================================= -# REMOVE DEPENDENCIES -#================================================= -ynh_script_progression --message="Removing dependencies" - -# Remove metapackage and its dependencies -ynh_remove_app_dependencies - -#================================================= -# REMOVE APP MAIN DIR -#================================================= -ynh_script_progression --message="Removing app main directory..." - -# Remove the app directory securely -ynh_secure_remove --file="$final_path" - -#================================================= -# REMOVE NGINX CONFIGURATION -#================================================= -ynh_script_progression --message="Removing NGINX web server configuration..." +ynh_script_progression --message="Removing system configurations related to $app..." --weight=1 # Remove the dedicated NGINX config ynh_remove_nginx_config -#================================================= -# REMOVE PHP-FPM CONFIGURATION -#================================================= -ynh_script_progression --message="Removing PHP-FPM configuration..." - -# Remove the dedicated php-fpm config +# Remove the dedicated PHP-FPM config ynh_remove_fpm_config -#================================================= -# REMOVE LOGROTATE CONFIGURATION -#================================================= -ynh_script_progression --message="Removing logrotate configuration..." - # Remove the app-specific logrotate config ynh_remove_logrotate -#================================================= -# REMOVE THE CRON FILE -#================================================= - # Remove a cron file ynh_secure_remove --file="/etc/cron.d/$app" -#================================================= -# REMOVE FAIL2BAN CONFIGURATION -#================================================= -ynh_script_progression --message="Removing Fail2Ban configuration..." - ynh_remove_fail2ban_config -#================================================= -# GENERIC FINALIZATION -#================================================= -# REMOVE DEDICATED USER -#================================================= -ynh_script_progression --message="Removing the dedicated system user..." - -# Delete a system user -ynh_system_user_delete --username=$app - #================================================= # END OF SCRIPT #================================================= diff --git a/scripts/restore b/scripts/restore index 2c9b96b..a4ea548 100755 --- a/scripts/restore +++ b/scripts/restore @@ -10,84 +10,22 @@ source ../settings/scripts/_common.sh source /usr/share/yunohost/helpers -#================================================= -# MANAGE SCRIPT FAILURE -#================================================= - -# Exit if an error occurs during the execution of the script -ynh_abort_if_errors - -#================================================= -# LOAD SETTINGS -#================================================= -ynh_script_progression --message="Loading settings..." - -app=$YNH_APP_INSTANCE_NAME - -domain=$(ynh_app_setting_get --app=$app --key=domain) -path_url=$(ynh_app_setting_get --app=$app --key=path) -admin=$(ynh_app_setting_get --app=$app --key=admin) -final_path=$(ynh_app_setting_get --app=$app --key=final_path) -db_name=$(ynh_app_setting_get --app=$app --key=db_name) -database=$(ynh_app_setting_get --app=$app --key=database) -db_user=$db_name -phpversion=$(ynh_app_setting_get --app=$app --key=phpversion) - -#================================================= -# CHECK IF THE APP CAN BE RESTORED -#================================================= -ynh_script_progression --message="Validating restoration parameters..." - -test ! -d $final_path || ynh_die --message="There is already a directory: $final_path " - -#================================================= -# STANDARD RESTORATION STEPS -#================================================= -# RESTORE THE NGINX CONFIGURATION -#================================================= - -ynh_restore_file --origin_path="/etc/nginx/conf.d/$domain.d/$app.conf" - -#================================================= -# RECREATE THE DEDICATED USER -#================================================= -ynh_print_info "Recreating the dedicated system user..." - -# Create the dedicated user (if not existing) -ynh_system_user_create --username=$app --home_dir="$final_path" - #================================================= # RESTORE THE APP MAIN DIR #================================================= ynh_script_progression --message="Restoring the app main directory..." -ynh_restore_file --origin_path="$final_path" +ynh_restore_file --origin_path="$install_dir" -chmod 750 "$final_path" -chmod -R o-rwx "$final_path" -chown -R $app:www-data "$final_path" +chmod -R o-rwx "$install_dir" +chown -R $app:www-data "$install_dir" #================================================= -# RESTORE THE MYSQL DATABASE +# RESTORE THE SQL DATABASE #================================================= -ynh_script_progression --message="Restoring the MySQL database..." +ynh_script_progression --message="Restoring the PostgreSQL database..." -if [ $database -eq 1 ]; then - ynh_script_progression --message="Restoring MySQL database..." - db_pwd=$(ynh_app_setting_get --app=$app --key=mysqlpwd) - ynh_mysql_setup_db --db_user=$db_name --db_name=$db_name --db_pwd=$db_pwd - ynh_mysql_connect_as --user=$db_name --password=$db_pwd --database=$db_name < ./db.sql -elif [ $database -eq 2 ]; then - # Removing postgresql database - ynh_script_progression --message="Reinstalling dependencies..." - # Define and install dependencies - ynh_install_app_dependencies $pkg_dependencies - ynh_script_progression --message="Restoring the PostgreSQL database..." - db_pwd=$(ynh_app_setting_get --app=$app --key=psqlpwd) - ynh_psql_test_if_first_run - ynh_psql_setup_db --db_user=$db_user --db_name=$db_name --db_pwd=$db_pwd - ynh_psql_execute_file_as_root --file="./db.sql" --database="$db_name" -fi +ynh_psql_connect_as --user=$db_user --password=$db_pwd --database=$db_name < ./db.sql #================================================= # RESTORE THE PHP-FPM CONFIGURATION @@ -96,23 +34,12 @@ ynh_script_progression --message="Restoring PHP-FPM configuration..." ynh_restore_file --origin_path="/etc/php/$phpversion/fpm/pool.d/$app.conf" -#================================================= -# RESTORE THE CRON FILE -#================================================= +ynh_restore_file --origin_path="/etc/nginx/conf.d/$domain.d/$app.conf" ynh_restore_file --origin_path="/etc/cron.d/$app" -#================================================= -# RESTORE THE LOGROTATE CONFIGURATION -#================================================= - ynh_restore_file --origin_path="/etc/logrotate.d/$app" -#================================================= -# RESTORE FAIL2BAN CONFIGURATION -#================================================= -ynh_script_progression --message="Restoring the Fail2Ban configuration..." - 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 diff --git a/scripts/upgrade b/scripts/upgrade index 3e42f49..1e11536 100755 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -14,66 +14,8 @@ source /usr/share/yunohost/helpers #================================================= ynh_script_progression --message="Loading installation settings..." -app=$YNH_APP_INSTANCE_NAME - -domain=$(ynh_app_setting_get --app=$app --key=domain) -path_url=$(ynh_app_setting_get --app=$app --key=path) -final_path=$(ynh_app_setting_get --app=$app --key=final_path) -upload=$(ynh_app_setting_get --app=$app --key=upload) -version=$(grep STD_VERSION $final_path/boot.php | cut -c 38- | rev | cut -c 5- | rev) +version=$(grep STD_VERSION $install_dir/boot.php | cut -c 38- | rev | cut -c 5- | rev) 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) - -#================================================= -# 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 -#================================================= -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 -ynh_clean_setup () { - # restore it if the upgrade fails - ynh_restore_upgradebackup -} -# Exit if an error occurs during the execution of the script -ynh_abort_if_errors - -#================================================= -# Migrate legacy permissions to new system -#================================================= -ynh_script_progression --message="Ensuring downward compatibility..." - -# 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 ynh_legacy_permissions_exists -then - ynh_legacy_permissions_delete_all - - ynh_app_setting_delete --app=$app --key=is_public -fi - -#================================================= -# CREATE DEDICATED USER -#================================================= -ynh_script_progression --message="Making sure dedicated system user exists..." - -# Create a dedicated user (if not existing) -ynh_system_user_create --username=$app --home_dir="$final_path" #================================================= # DOWNLOAD, CHECK AND UNPACK SOURCE @@ -81,10 +23,10 @@ ynh_system_user_create --username=$app --home_dir="$final_path" 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" +# ynh_setup_source --dest_dir="$install_dir" -if [ `cd $final_path && git rev-parse --is-inside-work-tree` ]; then - pushd "$final_path" +if [ `cd $install_dir && git rev-parse --is-inside-work-tree` ]; then + pushd "$install_dir" git pull --quiet cd extend/addon/zaddons git pull --quiet @@ -117,36 +59,36 @@ if [ `cd $final_path && git rev-parse --is-inside-work-tree` ]; then fi; done popd - chmod -R 775 $final_path/store + chmod -R 775 $install_dir/store else # 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" - cp -a "$final_path/cache" "$tmpdir/cache" + cp -a "$install_dir/.htconfig.php" "$tmpdir/.htconfig.php" + cp -a "$install_dir/store" "$tmpdir/store" + cp -a "$install_dir/php.log" "$tmpdir/php.log" + cp -a "$install_dir/cache" "$tmpdir/cache" # Remove the app directory securely - ynh_secure_remove "$final_path" + ynh_secure_remove "$install_dir" # Download, check integrity, uncompress and patch the source from app.src - ynh_setup_source --dest_dir="$final_path" + ynh_setup_source --dest_dir="$install_dir" - cp -a "$tmpdir/cache" "${final_path}" - cp -a "$tmpdir/store" "${final_path}" - cp -a "$tmpdir/.htconfig.php" "${final_path}" - cp -a "$tmpdir/php.log" "${final_path}" + cp -a "$tmpdir/cache" "${install_dir}" + cp -a "$tmpdir/store" "${install_dir}" + cp -a "$tmpdir/.htconfig.php" "${install_dir}" + cp -a "$tmpdir/php.log" "${install_dir}" ynh_secure_remove --file="$tmpdir" - chmod -R 775 $final_path/store - mkdir $final_path/addon - ynh_setup_source --dest_dir="$final_path/addon" --source_id="app_addons" + chmod -R 775 $install_dir/store + mkdir $install_dir/addon + ynh_setup_source --dest_dir="$install_dir/addon" --source_id="app_addons" fi -chmod 750 "$final_path" -chmod -R o-rwx "$final_path" -chown -R $app:www-data "$final_path" +chmod 750 "$install_dir" +chmod -R o-rwx "$install_dir" +chown -R $app:www-data "$install_dir" #================================================= # NGINX CONFIGURATION @@ -156,59 +98,17 @@ ynh_script_progression --message="Upgrading NGINX web server configuration..." # Create a dedicated nginx config ynh_add_nginx_config -#================================================= -# PHP-FPM CONFIGURATION -#================================================= -ynh_script_progression --message="Upgrading PHP-FPM configuration..." - # Create a dedicated php-fpm config 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/.htconfig.php" -# Recalculate and store the checksum of the file for the next upgrade. -ynh_store_file_checksum --file="$final_path/.htconfig.php" - -#================================================= -# SETUP LOGROTATE -#================================================= -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" - -#================================================= -# UPGRADE CRON -#================================================= -ynh_script_progression --message="Setting up cron job..." - -ynh_add_config --template="../conf/poller-cron" --destination="/etc/cron.d/$app" +ynh_add_config --template="poller-cron" --destination="/etc/cron.d/$app" chown root: "/etc/cron.d/$app" chmod 644 "/etc/cron.d/$app" -#================================================= -# UPGRADE DEPENDENCIES -#================================================= -ynh_script_progression --message="Upgrading dependencies..." - -if [ $database -eq 2 ]; then - ynh_install_app_dependencies $pkg_dependencies -fi - -#================================================= -# RELOAD NGINX -#================================================= -ynh_script_progression --message="Reloading NGINX web server..." - -ynh_systemd_action --service_name=nginx --action=reload +ynh_add_fail2ban_config --logpath="$install_dir/php.log" --failregex="^.*auth\.php.*failed login attempt.*from IP .*$" --max_retry="5" #================================================= # END OF SCRIPT diff --git a/tests.toml b/tests.toml new file mode 100644 index 0000000..b55cdd8 --- /dev/null +++ b/tests.toml @@ -0,0 +1,9 @@ +test_format = 1.0 + +[default] + + # ------------ + # Tests to run + # ------------ + + exclude = ["change_url"] \ No newline at end of file