diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000..7cbe275 Binary files /dev/null and b/.DS_Store differ diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md new file mode 100644 index 0000000..2729a6b --- /dev/null +++ b/.github/ISSUE_TEMPLATE.md @@ -0,0 +1,55 @@ +--- +name: Bug report +about: When creating a bug report, please use the following template to provide all the relevant information and help debugging efficiently. + +--- + +**How to post a meaningful bug report** +1. *Read this whole template first.* +2. *Determine if you are on the right place:* + - *If you were performing an action on the app from the webadmin or the CLI (install, update, backup, restore, change_url...), you are on the right place!* + - *Otherwise, the issue may be due to the app itself. Refer to its documentation or repository for help.* + - *When in doubt, post here and we will figure it out together.* +3. *Delete the italic comments as you write over them below, and remove this guide.* +--- + +### Describe the bug + +*A clear and concise description of what the bug is.* + +### Context + +- Hardware: *VPS bought online / Old laptop or computer / Raspberry Pi at home / Internet Cube with VPN / Other ARM board / ...* +- YunoHost version: x.x.x +- I have access to my server: *Through SSH | through the webadmin | direct access via keyboard / screen | ...* +- Are you in a special context or did you perform some particular tweaking on your YunoHost instance?: *no / yes* + - If yes, please explain: +- Using, or trying to install package version/branch: +- If upgrading, current package version: *can be found in the admin, or with `yunohost app info $app_id`* + +### Steps to reproduce + +- *If you performed a command from the CLI, the command itself is enough. For example:* + ```sh + sudo yunohost app install the_app + ``` +- *If you used the webadmin, please perform the equivalent command from the CLI first.* +- *If the error occurs in your browser, explain what you did:* + 1. *Go to '...'* + 2. *Click on '...'* + 3. *Scroll down to '...'* + 4. *See error* + +### Expected behavior + +*A clear and concise description of what you expected to happen. You can remove this section if the command above is enough to understand your intent.* + +### Logs + +*When an operation fails, YunoHost provides a simple way to share the logs.* +- *In the webadmin, the error message contains a link to the relevant log page. On that page, you will be able to 'Share with Yunopaste'. If you missed it, the logs of previous operations are also available under Tools > Logs.* +- *In command line, the command to share the logs is displayed at the end of the operation and looks like `yunohost log display [log name] --share`. If you missed it, you can find the log ID of a previous operation using `yunohost log list`.* + +*After sharing the log, please copypaste directly the link provided by YunoHost (to help readability, no need to copypaste the entire content of the log here, just the link is enough...)* + +*If applicable and useful, add screenshots to help explain your problem.* diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..ef70e18 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,16 @@ +## Problem + +- *Description of why you made this PR* + +## Solution + +- *And how do you fix that problem* + +## PR Status + +- [ ] Code finished and ready to be reviewed/tested +- [ ] The fix/enhancement were manually tested (if applicable) + +## Automatic tests + +Automatic tests can be triggered on https://ci-apps-dev.yunohost.org/ *after creating the PR*, by commenting "!testme", "!gogogadgetoci" or "By the power of systemd, I invoke The Great App CI to test this Pull Request!". (N.B. : for this to work you need to be a member of the Yunohost-Apps organization) diff --git a/README.md b/README.md index 3af19b7..054d0d2 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,55 @@ -Galette for Yunohost -==================== + -Galette is a membership management web application towards non profit organizations. [Official website](http://galette.eu/) +# Galette for YunoHost -This package provides a quick and easy way to install galette (i.e. automatic MySQL base creation and configuration). -Note that the Yunohost users won't be recognized in Galette. +[![Integration level](https://dash.yunohost.org/integration/galette.svg)](https://dash.yunohost.org/appci/app/galette) ![](https://ci-apps.yunohost.org/ci/badges/galette.status.svg) ![](https://ci-apps.yunohost.org/ci/badges/galette.maintain.svg) +[![Install Galette with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=galette) +*[Lire ce readme en français.](./README_fr.md)* + +> *This package allows you to install Galette 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 + +Membership management web application for non profit organizations + +**Shipped version:** 0.9.4.2~ynh1 + +**Demo:** https://demo.galette.eu/login + +## Screenshots + +![](./doc/screenshots/edit_member.png) + +## Disclaimers / important information + +## Configuration + +1. The app will require to complete the registration process after the instllation is complete by visiting the domain on which Galette is installed. +1. The Postgresql database credentials will be sent to the admin mail. Fill these details while doing the registration process. + +## Documentation and resources + +* Official app website: https://www.galette.eu +* Official user documentation: https://yunohost.org/apps +* Official admin documentation: https://doc.galette.eu/fr/master/ +* Upstream app code repository: https://github.com/galette/galette +* YunoHost documentation for this app: https://yunohost.org/app_galette +* Report a bug: https://github.com/YunoHost-Apps/galette_ynh/issues + +## Developer info + +Please send your pull request to the [testing branch](https://github.com/YunoHost-Apps/galette_ynh/tree/testing). + +To try the testing branch, please proceed like that. +``` +sudo yunohost app install https://github.com/YunoHost-Apps/galette_ynh/tree/testing --debug +or +sudo yunohost app upgrade galette -u https://github.com/YunoHost-Apps/galette_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..79af070 --- /dev/null +++ b/README_fr.md @@ -0,0 +1,51 @@ +# Galette pour YunoHost + +[![Niveau d'intégration](https://dash.yunohost.org/integration/galette.svg)](https://dash.yunohost.org/appci/app/galette) ![](https://ci-apps.yunohost.org/ci/badges/galette.status.svg) ![](https://ci-apps.yunohost.org/ci/badges/galette.maintain.svg) +[![Installer Galette avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=galette) + +*[Read this readme in english.](./README.md)* +*[Lire ce readme en français.](./README_fr.md)* + +> *Ce package vous permet d'installer Galette 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 + +Outil de gestion d'adhérents et de cotisation en ligne pour associations + +**Version incluse :** 0.9.4.2~ynh1 + +**Démo :** https://demo.galette.eu/login + +## Captures d'écran + +![](./doc/screenshots/edit_member.png) + +## Avertissements / informations importantes + +## Configuration + +1. Une fois l'installation terminée, l'application devra terminer le processus d'enregistrement en **visitant le domaine** sur lequel Galette est installé. +1. Les informations d'identification de la base de données Postgresql seront envoyées à **l'email admin**. Remplissez ces détails lors du processus d'inscription. + +## Documentations et ressources + +* Site officiel de l'app : https://www.galette.eu +* Documentation officielle utilisateur : https://yunohost.org/apps +* Documentation officielle de l'admin : https://doc.galette.eu/fr/master/ +* Dépôt de code officiel de l'app : https://github.com/galette/galette +* Documentation YunoHost pour cette app : https://yunohost.org/app_galette +* Signaler un bug : https://github.com/YunoHost-Apps/galette_ynh/issues + +## Informations pour les développeurs + +Merci de faire vos pull request sur la [branche testing](https://github.com/YunoHost-Apps/galette_ynh/tree/testing). + +Pour essayer la branche testing, procédez comme suit. +``` +sudo yunohost app install https://github.com/YunoHost-Apps/galette_ynh/tree/testing --debug +ou +sudo yunohost app upgrade galette -u https://github.com/YunoHost-Apps/galette_ynh/tree/testing --debug +``` + +**Plus d'infos sur le packaging d'applications :** https://yunohost.org/packaging_apps \ No newline at end of file diff --git a/check_process b/check_process index 382d484..dad0844 100644 --- a/check_process +++ b/check_process @@ -1,13 +1,9 @@ -# See here for more informations -# https://github.com/YunoHost/package_check#syntax-check_process-file - ;; Test complet ; Manifest - domain="domain.tld" (DOMAIN) - path="/path" (PATH) - admin="john" (USER) - is_public=1 (PUBLIC|public=Yes|private=No) - adminPass="miaw!" + domain="domain.tld" + path="/path" + is_public=1 + password="strong-password" ; Checks pkg_linter=1 setup_sub_dir=1 @@ -16,24 +12,14 @@ setup_private=1 setup_public=1 upgrade=1 - backup_restore=0 - multi_instance=0 - incorrect_path=1 - port_already_use=0 + #upgrade=1 from_commit= + backup_restore=1 + multi_instance=1 change_url=0 -;;; Levels - Level 1=auto - Level 2=auto - Level 3=auto -# Level 4: - Level 4=0 -# Level 5: - Level 5=auto - Level 6=auto - Level 7=auto - Level 8=0 - Level 9=0 - Level 10=0 ;;; Options Email=jean-baptiste@holcroft.fr Notification=all +;;; Upgrade options + ; commit= + name= +manifest_arg=domain=DOMAIN&path=PATH&admin=USER&is_public=1 diff --git a/conf/app.src b/conf/app.src new file mode 100644 index 0000000..5ca6c2e --- /dev/null +++ b/conf/app.src @@ -0,0 +1,6 @@ +SOURCE_URL=https://download.tuxfamily.org/galette/galette-0.9.4.2.tar.bz2 +SOURCE_SUM=171bda8250cf0996d40a38e032d93881d67b059be98ed5af20ac00dbdf8630e3 +SOURCE_SUM_PRG=sha256sum +SOURCE_FORMAT=tar.gz +SOURCE_IN_SUBDIR=true +SOURCE_FILENAME= diff --git a/conf/config.inc.php.dist b/conf/config.inc.php.dist new file mode 100644 index 0000000..b41aacc --- /dev/null +++ b/conf/config.inc.php.dist @@ -0,0 +1,25 @@ +}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 +php_admin_value[date.timezone] = __TIMEZONE__ diff --git a/doc/.DS_Store b/doc/.DS_Store new file mode 100644 index 0000000..f659def Binary files /dev/null and b/doc/.DS_Store differ diff --git a/doc/DISCLAIMER.md b/doc/DISCLAIMER.md new file mode 100644 index 0000000..bc45156 --- /dev/null +++ b/doc/DISCLAIMER.md @@ -0,0 +1,4 @@ +## Configuration + +1. The app will require to complete the registration process after the instllation is complete by visiting the domain on which Galette is installed. +1. The Postgresql database credentials will be sent to the admin mail. Fill these details while doing the registration process. diff --git a/doc/DISCLAIMER_fr.md b/doc/DISCLAIMER_fr.md new file mode 100644 index 0000000..4d95474 --- /dev/null +++ b/doc/DISCLAIMER_fr.md @@ -0,0 +1,4 @@ +## Configuration + +1. Une fois l'installation terminée, l'application devra terminer le processus d'enregistrement en **visitant le domaine** sur lequel Galette est installé. +1. Les informations d'identification de la base de données Postgresql seront envoyées à **l'email admin**. Remplissez ces détails lors du processus d'inscription. diff --git a/doc/screenshots/edit_member.png b/doc/screenshots/edit_member.png new file mode 100644 index 0000000..05b4f05 Binary files /dev/null and b/doc/screenshots/edit_member.png differ diff --git a/manifest.json b/manifest.json index 938a53e..ec863ef 100644 --- a/manifest.json +++ b/manifest.json @@ -1,55 +1,55 @@ { "name": "Galette", "id": "galette", - "description": { + "packaging_format": 1, + "description": { "en": "Membership management web application for non profit organizations", "fr": "Outil de gestion d'adhérents et de cotisation en ligne pour associations" }, - "licence": "free", - "maintainer": { - "name": "Jean-Baptiste Holcroft", - "email": "jean-baptiste@holcroft.fr" + "version": "0.9.4.2~ynh1", + "url": "https://www.galette.eu", + "upstream": { + "license": "GPL-3.0-or-later", + "website": "https://www.galette.eu", + "demo": "https://demo.galette.eu/login", + "admindoc": "https://doc.galette.eu/fr/master/", + "userdoc": "https://yunohost.org/apps", + "code": "https://github.com/galette/galette" }, - "multi_instance": "false", + "license": "GPL-3.0-or-later", + "maintainer": { + "name": "", + "email": "" + }, + "requirements": { + "yunohost": ">= 4.2.4" + }, + "multi_instance": true, + "services": [ + "nginx", + "php7.3-fpm" + ], "arguments": { - "install" : [ + "install": [ { "name": "domain", - "ask": { - "en": "Choose a domain for galette" - }, + "type": "domain", "example": "example.com" }, { "name": "path", - "ask": { - "en": "Choose a path for galette" - }, + "type": "path", "example": "/galette", "default": "/galette" }, - { - "name": "admin", - "ask": { - "en": "Admin login" - }, - "example": "galette_admin", - "default": "galette_admin" - }, - { - "name": "adminPass", - "ask": { - "en": "Admin password" - }, - "example": "" - }, { "name": "is_public", - "ask": { - "en": "Is it a public application ?" - }, - "choices": ["Yes", "No"], - "default": "Yes" + "type": "boolean", + "help": { + "en": "If enabled, Galette will be accessible by people who do not have an account. This can be changed later via the webadmin.", + "fr": "Si cette case est cochée, Galette sera accessible aux personnes n’ayant pas de compte. Vous pourrez changer ceci plus tard via la webadmin." + }, + "default": true } ] } diff --git a/scripts/_common.sh b/scripts/_common.sh new file mode 100644 index 0000000..cbc1622 --- /dev/null +++ b/scripts/_common.sh @@ -0,0 +1,66 @@ +#!/bin/bash + +#================================================= +# COMMON VARIABLES +#================================================= + +# dependencies used by the app +pkg_dependencies="postgresql" + +# dependencies used by the app +YNH_PHP_VERSION="7.3" + +extra_php_dependencies="php${YNH_PHP_VERSION}-tidy php${YNH_PHP_VERSION}-intl php${YNH_PHP_VERSION}-mbstring php${YNH_PHP_VERSION}-pgsql php${YNH_PHP_VERSION}-xml php${YNH_PHP_VERSION}-gd php${YNH_PHP_VERSION}-curl" + +#================================================= +# EXPERIMENTAL HELPERS +#================================================= + +# Send an email to inform the administrator +# +# usage: ynh_send_readme_to_admin app_message [recipients] +# | arg: app_message - The message to send to the administrator. +# | arg: recipients - The recipients of this email. Use spaces to separate multiples recipients. - default: root +# example: "root admin@domain" +# If you give the name of a YunoHost user, ynh_send_readme_to_admin will find its email adress for you +# example: "root admin@domain user1 user2" +ynh_send_readme_to_admin() { + local app_message="${1:-...No specific information...}" + local recipients="${2:-root}" + + # Retrieve the email of users + find_mails () { + local list_mails="$1" + local mail + local recipients=" " + # Read each mail in argument + for mail in $list_mails + do + # Keep root or a real email address as it is + if [ "$mail" = "root" ] || echo "$mail" | grep --quiet "@" + then + recipients="$recipients $mail" + else + # But replace an user name without a domain after by its email + if mail=$(ynh_user_get_info "$mail" "mail" 2> /dev/null) + then + recipients="$recipients $mail" + fi + fi + done + echo "$recipients" + } + recipients=$(find_mails "$recipients") + + local mail_subject="☁️🆈🅽🅷☁️: \`$app\` was just installed!" + + local mail_message="This is an automated message from your beloved YunoHost server. +Specific information for the application $app. +$app_message +--- +Automatic diagnosis data from YunoHost +$(yunohost tools diagnosis | grep -B 100 "services:" | sed '/services:/d')" + + # Send the email to the recipients + echo "$mail_message" | mail -a "Content-Type: text/plain; charset=UTF-8" -s "$mail_subject" "$recipients" +} diff --git a/scripts/backup b/scripts/backup new file mode 100644 index 0000000..be2ba02 --- /dev/null +++ b/scripts/backup @@ -0,0 +1,72 @@ +#!/bin/bash + +#================================================= +# GENERIC START +#================================================= +# IMPORT GENERIC HELPERS +#================================================= + +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 +#================================================= + +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) + +#================================================= +# DECLARE DATA AND CONF FILES TO BACKUP +#================================================= +ynh_print_info --message="Declaring files to be backed up..." + +#================================================= +# BACKUP THE APP MAIN DIR +#================================================= + +ynh_backup --src_path="$final_path" + +#================================================= +# BACKUP THE NGINX CONFIGURATION +#================================================= + +ynh_backup --src_path="/etc/nginx/conf.d/$domain.d/$app.conf" + +#================================================= +# BACKUP THE PHP-FPM CONFIGURATION +#================================================= + +ynh_backup --src_path="/etc/php/$phpversion/fpm/pool.d/$app.conf" + +#================================================= +# BACKUP THE POSTGRESQL DATABASE +#================================================= +ynh_print_info --message="Backing up the PostgreSQL database..." + +ynh_psql_dump_db --database="$db_name" > db.sql + +#================================================= +# SPECIFIC BACKUP +#================================================= +# BACKUP LOGROTATE +#================================================= + +ynh_backup --src_path="/etc/logrotate.d/$app" + +#================================================= +# END OF SCRIPT +#================================================= + +ynh_print_info --message="Backup script completed for $app. (YunoHost will then actually copy those files to the archive)." diff --git a/scripts/initialConf.py b/scripts/initialConf.py deleted file mode 100755 index 6745403..0000000 --- a/scripts/initialConf.py +++ /dev/null @@ -1,56 +0,0 @@ -#!/usr/bin/python -import re -import sys -from mechanize import Browser - -path = sys.argv[1] -password = sys.argv[2] -admin = sys.argv[3] -adminPass = sys.argv[4] - -br = Browser() - -# Ignore robots.txt -br.set_handle_robots( False ) - -# Set user agent as Firefox -br.addheaders = [('User-agent', 'Firefox')] - -# Retrieve the instlation page -br.open( "http://"+path+"/install/installer.php" ) - -# Page 1 - requirement checks -br.select_form(nr=0) -br.submit() - -# Page 2 - installation type (default is new installation) -br.select_form(nr=0) -br.submit() - -# Page 3 - database configuration -br.select_form(nr=0) -br.form["install_dbuser"] = "galette" -br.form["install_dbpass"] = password -br.form["install_dbname"] = "galette" -br.submit() - -# Page 4 - confirmation that database correctly configured -br.select_form(nr=0) -br.submit() - -# Page 5 - database / table creations -br.select_form(nr=0) -br.submit() - -# Page 6 - admin user creation -br.select_form(nr=0) -br.form["install_adminlogin"] = admin -br.form["install_adminpass"] = adminPass -br.form["install_adminpass_verif"] = adminPass -br.submit() - -# Page 7 - confirmation -br.select_form(nr=0) -br.submit() - -exit() diff --git a/scripts/install b/scripts/install index 8d59bd2..f700a8f 100755 --- a/scripts/install +++ b/scripts/install @@ -1,117 +1,179 @@ #!/bin/bash -#################################################### -# Retrieve arguments / set global variables # -#################################################### +#================================================= +# GENERIC START +#================================================= +# IMPORT GENERIC HELPERS +#================================================= -app=galette -version=0.8.2 +source _common.sh +source /usr/share/yunohost/helpers -domain=$1 -path=$2 -admin=$3 -adminPass=$4 -is_public=$5 +#================================================= +# MANAGE SCRIPT FAILURE +#================================================= -#################################################### -# Check domain / path availability # -#################################################### +# Exit if an error occurs during the execution of the script +ynh_abort_if_errors -sudo yunohost app checkurl $domain$path -a $app +#================================================= +# RETRIEVE ARGUMENTS FROM THE MANIFEST +#================================================= -if [[ ! $? -eq 0 ]]; then - echo "Error : domain/path url isnt available" - exit 1 -fi +domain=$YNH_APP_ARG_DOMAIN +path_url=$YNH_APP_ARG_PATH +is_public=$YNH_APP_ARG_IS_PUBLIC +timezone="$(cat /etc/timezone)" -#################################################### -# Check that admin user is an existing account # -#################################################### +app=$YNH_APP_INSTANCE_NAME -sudo yunohost user list --json | grep -q "\"username\": \"$admin\"" -if [[ ! $? -eq 0 ]]; then - echo "Error : the chosen admin user does not exist" - exit 1 -fi - -sudo yunohost app setting $app admin -v $admin - -sudo yunohost app setting $app is_public -v "$is_public" - -#################################################### -# Copy / install source files # -#################################################### +#================================================= +# CHECK IF THE APP CAN BE INSTALLED WITH THESE ARGS +#================================================= +ynh_script_progression --message="Validating installation parameters..." --weight=1 final_path=/var/www/$app +test ! -e "$final_path" || ynh_die "This path already contains a folder" -# Get and move sources +# Register (book) web path +ynh_webpath_register --app=$app --domain=$domain --path_url=$path_url -tar xjvf ../sources/galette-$version.tar.bz2 > /dev/null -sudo mv galette-$version/galette $final_path -rm -r galette-$version +#================================================= +# STORE SETTINGS FROM MANIFEST +#================================================= +ynh_script_progression --message="Storing installation settings..." --weight=1 -# Set permissions +ynh_app_setting_set --app=$app --key=domain --value=$domain +ynh_app_setting_set --app=$app --key=path --value=$path_url + +#================================================= +# INSTALL DEPENDENCIES +#================================================= +ynh_script_progression --message="Installing dependencies..." --weight=20 + +ynh_exec_warn_less ynh_install_app_dependencies $pkg_dependencies + +#================================================= +# CREATE A POSTGRESQL DATABASE +#================================================= +ynh_script_progression --message="Creating a PostgreSQL database..." --weight=2 + +db_name=$(ynh_sanitize_dbid --db_name=$app) +ynh_app_setting_set --app=$app --key=db_name --value=$db_name +ynh_psql_test_if_first_run +ynh_psql_setup_db --db_user=$db_name --db_name=$db_name + +#================================================= +# CREATE DEDICATED USER +#================================================= +ynh_script_progression --message="Configuring system user..." --weight=1 + +# Create a system user +ynh_system_user_create --username=$app --home_dir="$final_path" + +#================================================= +# DOWNLOAD, CHECK AND UNPACK SOURCE +#================================================= +ynh_script_progression --message="Setting up source files..." --weight=1 + +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" + +chmod 750 $final_path +chmod -R o-rwx $final_path +chown -R $app:www-data $final_path + +#================================================= +# NGINX CONFIGURATION +#================================================= +ynh_script_progression --message="Configuring NGINX web server..." --weight=1 + +# Create a dedicated NGINX config +ynh_add_nginx_config + +#================================================= +# PHP-FPM CONFIGURATION +#================================================= +ynh_script_progression --message="Configuring PHP-FPM..." --weight=2 + +ynh_add_fpm_config --package="$extra_php_dependencies" +phpversion=$(ynh_app_setting_get --app=$app --key=phpversion) + +#================================================= +# CONFIGURE GALETTE +#================================================= +ynh_script_progression --message="Configuring Galette..." --weight=1 + +ynh_add_config --template="../conf/config.inc.php.dist" --destination="$final_path/galette/config/config.inc.php" + +#================================================= +# GENERIC FINALIZATION +#================================================= +# SECURE FILES AND DIRECTORIES +#================================================= + +chown $app $final_path/galette/config +chmod g+rwx $final_path/galette/config -sudo chown -R root:www-data $final_path -sudo chmod -R o-rwx $final_path -sudo chmod u+rx $final_path/config -sudo chmod g+rwx $final_path/config for folder in attachments cache exports files imports logs photos templates_c tempimages do - sudo chmod u+rx $final_path/data/$folder - sudo chmod g+rwx $final_path/data/$folder + chown $app $final_path/galette/data/$folder + chmod g+rwx $final_path/galette/data/$folder done -#################################################### -# Create a mysql database # -#################################################### +#================================================= +# SETUP LOGROTATE +#================================================= +ynh_script_progression --message="Configuring log rotation..." --weight=1 -# Generate random password +# Use logrotate to manage application logfile(s) +ynh_use_logrotate -db_user=galette -db_pwd=$(dd if=/dev/urandom bs=1 count=200 2> /dev/null | tr -c -d '[A-Za-z0-9]' | sed -n 's/\(.\{24\}\).*/\1/p') +#================================================= +# SETUP SSOWAT +#================================================= +ynh_script_progression --message="Configuring permissions..." --weight=1 -# Initialize database and store mysql password for upgrade - -sudo yunohost app initdb $db_user -p $db_pwd -sudo yunohost app setting $app mysqlpassword -v $db_pwd - -#################################################### -# Nginx configuration # -#################################################### - -sed -i "s@YNH_WWW_PATH@$path@g" ../conf/nginx.conf -sed -i "s@YNH_WWW_ALIAS@$final_path/@g" ../conf/nginx.conf -sudo cp ../conf/nginx.conf /etc/nginx/conf.d/$domain.d/$app.conf - -#################################################### -# SSOWat configuration # -#################################################### - -if [ "$is_public" = "Yes" ]; +# Make app public if necessary or protect it +if [ $is_public -eq 1 ] then - # unprotected_uris allows SSO credentials to be passed anyway. - sudo yunohost app setting $app unprotected_uris -v "/" + ynh_permission_update --permission="main" --add="visitors" fi -#################################################### -# Restart services # -#################################################### +#================================================= +# RELOAD NGINX +#================================================= +ynh_script_progression --message="Reloading NGINX web server..." --weight=2 -sudo service nginx reload -sudo yunohost app ssowatconf +ynh_systemd_action --service_name=nginx --action=reload -#################################################### -# Call galette php installer and fill the form # -#################################################### +#================================================= +# SEND A README FOR THE ADMIN +#================================================= -# Install mechanize to have a browser in a python script -sudo pip install mechanize +message="Galette need you to finish the installation manually. -# Then call python script to fill galette php installer with the right info -sudo python initialConf.py $domain$path $db_pwd $admin $adminPass +Please open "https://$domain/$path_url/installer.php" and finish the install process. -# Delete the install folder as advised by galette php installer -# sudo rm -rf $final_path/install +Database information you'll need: +Type: pgsql +Host: localhost +Port: 5432 +User: "$db_name" +Password: "$db_pwd" +Name: "$db_name" +Important! Once done, please remember to run as root or with sudo: +Restrict the rights of the config file \`chmod -R 500 "$final_path/galette/config"\` +\`Remove the install file "$final_path/galette/install"\` +If you facing an issue or want to improve this app, please open a new issue in this project: https://github.com/YunoHost-Apps/galette_ynh" + +ynh_send_readme_to_admin "$message" + +#================================================= +# END OF SCRIPT +#================================================= + +ynh_script_progression --message="Installation of $app completed" --last diff --git a/scripts/remove b/scripts/remove index da5f5bf..08bd945 100755 --- a/scripts/remove +++ b/scripts/remove @@ -1,16 +1,86 @@ #!/bin/bash -app=galette -db_user=galette -db_name=galette +#================================================= +# GENERIC START +#================================================= +# IMPORT GENERIC HELPERS +#================================================= -root_pwd=$(sudo cat /etc/yunohost/mysql) -domain=$(sudo yunohost app setting galette domain) +source _common.sh +source /usr/share/yunohost/helpers -mysql -u root -p$root_pwd -e "DROP DATABASE $db_name ; DROP USER $db_user@localhost ;" -sudo rm -rf /var/www/$app -sudo rm -f /etc/nginx/conf.d/$domain.d/$app.conf +#================================================= +# LOAD SETTINGS +#================================================= +ynh_script_progression --message="Loading installation settings..." --weight=3 -# Restart services -sudo service nginx reload -sudo yunohost app ssowatconf +app=$YNH_APP_INSTANCE_NAME + +domain=$(ynh_app_setting_get --app=$app --key=domain) +port=$(ynh_app_setting_get --app=$app --key=port) +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) + +#================================================= +# REMOVE THE POSTGRESQL DATABASE +#================================================= +ynh_script_progression --message="Removing the PostgreSQL database..." --weight=2 + +# Remove a database if it exists, along with the associated user +ynh_psql_remove_db --db_user=$db_user --db_name=$db_name + +#================================================= +# REMOVE DEPENDENCIES +#================================================= +ynh_script_progression --message="Removing dependencies..." --weight=1 + +# Remove metapackage and its dependencies +ynh_remove_app_dependencies + +#================================================= +# REMOVE APP MAIN DIR +#================================================= +ynh_script_progression --message="Removing app main directory..." --weight=4 + +# Remove the app directory securely +ynh_secure_remove --file="$final_path" + +#================================================= +# REMOVE NGINX CONFIGURATION +#================================================= +ynh_script_progression --message="Removing NGINX web server configuration..." --weight=1 + +# Remove the dedicated NGINX config +ynh_remove_nginx_config + +#================================================= +# REMOVE PHP-FPM CONFIGURATION +#================================================= +ynh_script_progression --message="Removing PHP-FPM configuration..." --weight=3 + +# Remove the dedicated PHP-FPM config +ynh_remove_fpm_config + +#================================================= +# REMOVE LOGROTATE CONFIGURATION +#================================================= + +# Remove the app-specific logrotate config +ynh_remove_logrotate + +#================================================= +# GENERIC FINALIZATION +#================================================= +# REMOVE DEDICATED USER +#================================================= +ynh_script_progression --message="Removing the dedicated system user..." --weight=1 + +# Delete a system user +ynh_system_user_delete --username=$app + +#================================================= +# END OF SCRIPT +#================================================= + +ynh_script_progression --message="Removal of $app completed" --last diff --git a/scripts/restore b/scripts/restore new file mode 100644 index 0000000..512ee60 --- /dev/null +++ b/scripts/restore @@ -0,0 +1,132 @@ +#!/bin/bash + +#================================================= +# GENERIC START +#================================================= +# IMPORT GENERIC HELPERS +#================================================= + +#Keep this path for calling _common.sh inside the execution's context of backup and restore scripts +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..." --weight=1 + +app=$YNH_APP_INSTANCE_NAME + +domain=$(ynh_app_setting_get --app=$app --key=domain) +path_url=$(ynh_app_setting_get --app=$app --key=path) +final_path=$(ynh_app_setting_get --app=$app --key=final_path) +db_name=$(ynh_app_setting_get --app=$app --key=db_name) +db_user=$db_name +db_pwd=$(ynh_app_setting_get --app=$app --key=psqlpwd) +phpversion=$(ynh_app_setting_get --app=$app --key=phpversion) +timezone="$(cat /etc/timezone)" + +#================================================= +# CHECK IF THE APP CAN BE RESTORED +#================================================= +ynh_script_progression --message="Validating restoration parameters..." --weight=2 + +ynh_webpath_available $domain $path_url \ + || ynh_die "Path not available: ${domain}${path_url}" +test ! -d $final_path \ + || ynh_die "There is already a directory: $final_path " + +#================================================= +# STANDARD RESTORATION STEPS +#================================================= +# RESTORE THE NGINX CONFIGURATION +#================================================= +ynh_script_progression --message="Restoring the NGINX configuration..." --weight=1 + +ynh_restore_file --origin_path="/etc/nginx/conf.d/$domain.d/$app.conf" + +#================================================= +# RECREATE THE DEDICATED USER +#================================================= +ynh_script_progression --message="Recreating the dedicated system user..." --weight=1 + +# Create the dedicated user (if not existing) +ynh_system_user_create --username=$app --home_dir="$final_path" + +#================================================= +# RESTORE THE APP MAIN DIR +#================================================= +ynh_script_progression --message="Restoring the app main directory..." --weight=2 + +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 PHP-FPM CONFIGURATION +#================================================= +ynh_script_progression --message="Restoring the PHP-FPM configuration..." --weight=1 + +ynh_restore_file --origin_path="/etc/php/$phpversion/fpm/pool.d/$app.conf" +ynh_add_fpm_config --package="$extra_php_dependencies" + +#================================================= +# REINSTALL DEPENDENCIES +#================================================= +ynh_script_progression --message="Reinstalling dependencies..." --weight=6 + +# Define and install dependencies +ynh_exec_warn_less ynh_install_app_dependencies $pkg_dependencies + +#================================================= +# RESTORE THE POSTGRESQL DATABASE +#================================================= +ynh_script_progression --message="Restoring the PostgreSQL database..." --weight=6 + +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 + +#================================================= +# RESTORE USER RIGHTS +#================================================= + +chown "$app" "$final_path/galette/config" +chmod 750 "$final_path/galette/config" + +for folder in attachments cache exports files imports logs photos templates_c tempimages +do + chown "$app" "$final_path/galette/data/$folder" + chmod 775 "$final_path/galette/data/$folder" +done + +#================================================= +# RESTORE THE LOGROTATE CONFIGURATION +#================================================= + +ynh_restore_file --origin_path="/etc/logrotate.d/$app" + +#================================================= +# GENERIC FINALIZATION +#================================================= +# RELOAD NGINX AND PHP-FPM +#================================================= +ynh_script_progression --message="Reloading NGINX web server and PHP-FPM..." --weight=2 + +ynh_systemd_action --service_name=php$phpversion-fpm --action=reload +ynh_systemd_action --service_name=nginx --action=reload + +#================================================= +# END OF SCRIPT +#================================================= + +ynh_script_progression --message="Restoration completed for $app" --last diff --git a/scripts/upgrade b/scripts/upgrade index 3b2c6fe..705f109 100755 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -1,9 +1,174 @@ #!/bin/bash -# -# -# No upgrade script is available at the moment. -# -# If you really need to upgrade, please check the official documentation : -# http://galette.eu/documentation/fr/installation/update.html -# -# + +#================================================= +# GENERIC START +#================================================= +# IMPORT GENERIC HELPERS +#================================================= + +source _common.sh +source /usr/share/yunohost/helpers + +#================================================= +# LOAD SETTINGS +#================================================= +ynh_script_progression --message="Loading installation settings..." --weight=1 + +app=$YNH_APP_INSTANCE_NAME + +domain=$(ynh_app_setting_get --app=$app --key=domain) +path_url=$(ynh_app_setting_get --app=$app --key=path) +final_path=$(ynh_app_setting_get --app=$app --key=final_path) +db_name=$(ynh_app_setting_get --app=$app --key=db_name) +db_user=$db_name +db_pwd=$(ynh_app_setting_get --app=$app --key=psqlpwd) +phpversion=$(ynh_app_setting_get --app=$app --key=phpversion) +timezone="$(cat /etc/timezone)" + +#================================================= +# CHECK VERSION +#================================================= + +upgrade_type=$(ynh_check_app_version_changed) + +#================================================= +# BACKUP BEFORE UPGRADE THEN ACTIVE TRAP +#================================================= +ynh_script_progression --message="Backing up the app before upgrading (may take a while)..." --weight=1 + +# Backup the current version of the app +ynh_backup_before_upgrade +ynh_clean_setup () { + # Restore it if the upgrade fails + ynh_restore_upgradebackup +} +# Exit if an error occurs during the execution of the script +ynh_abort_if_errors + +#================================================= +# ENSURE DOWNWARD COMPATIBILITY +#================================================= +ynh_script_progression --message="Ensuring downward compatibility..." --weight=2 + +# If db_name doesn't exist, create it +if [ -z "$db_name" ]; then + db_name=$(ynh_sanitize_dbid "$app") + ynh_app_setting_set --app=$app --key=db_name --value=$db_name +fi + +# If db_name doesn't exist, create it +if [ -z "$db_pwd" ]; then + db_pwd=$(ynh_app_setting_get --app=$app --key=psqlpwd) + ynh_app_setting_set --app=$app --key=psqlpwd --value=$db_pwd +fi + +# If final_path doesn't exist, create it +if [ -z "$final_path" ]; then + final_path="/var/www/$app" + ynh_app_setting_set --app=$app --key=final_path --value=$final_path +fi + +# Cleaning legacy permissions +if ynh_legacy_permissions_exists; then + ynh_legacy_permissions_delete_all + + ynh_app_setting_delete --app=$app --key=is_public +fi + +#================================================= +# CREATE DEDICATED USER +#================================================= +ynh_script_progression --message="Making sure dedicated system user exists..." --weight=1 + +# Create a dedicated user (if not existing) +ynh_system_user_create --username=$app --home_dir="$final_path" + +#================================================= +# STANDARD UPGRADE STEPS +#================================================= +# DOWNLOAD, CHECK AND UNPACK SOURCE +#================================================= + +if [ "$upgrade_type" == "UPGRADE_APP" ] +then + # Download, check integrity, uncompress and patch the source from app.src + mv "$final_path" "$final_path.old" + + ynh_setup_source "$final_path" + #ynh_secure_remove "$final_path"/tests + + # when running automatic tests, there is no config.inc.php + if [ -e "$final_path.old/galette/config/config.inc.php" ]; then + cp "$final_path.old/galette/config/config.inc.php" "$final_path/galette/config/config.inc.php" + cp -r "$final_path.old/galette/data" "$final_path/galette/data" + fi + + # delete temp directory + ynh_secure_remove "$final_path.old" +fi + +chmod 750 $final_path +chmod -R o-rwx $final_path +chown -R $app:www-data $final_path + +#================================================= +# NGINX CONFIGURATION +#================================================= +ynh_script_progression --message="Upgrading NGINX web server configuration..." --weight=2 + +# Create a dedicated NGINX config +ynh_add_nginx_config + +#================================================= +# UPGRADE DEPENDENCIES +#================================================= +ynh_script_progression --message="Upgrading dependencies..." --weight=1 + +ynh_install_app_dependencies $pkg_dependencies + +#================================================= +# PHP-FPM CONFIGURATION +#================================================= +ynh_script_progression --message="Upgrading PHP-FPM configuration..." --weight=2 + +# Create a dedicated PHP-FPM config +ynh_add_fpm_config --package="$extra_php_dependencies" + +#================================================= +# SPECIFIC UPGRADE +#================================================= +# SETUP LOGROTATE +#================================================= + +# Use logrotate to manage app-specific logfile(s) +ynh_use_logrotate --non-append + +#================================================= +# GENERIC FINALIZATION +#================================================= +# SECURE FILES AND DIRECTORIES +#================================================= + +chown "$app" "$final_path/galette/config" +chmod 750 "$final_path/galette/config" + +for folder in attachments cache exports files imports logs photos templates_c tempimages +do + chown "$app" "$final_path/galette/data/$folder" + chmod 775 "$final_path/galette/data/$folder" +done + +#================================================= +# GENERIC FINALIZATION +#================================================= +# RELOAD NGINX +#================================================= +ynh_script_progression --message="Reloading NGINX web server..." --weight=2 + +ynh_systemd_action --service_name=nginx --action=reload + +#================================================= +# END OF SCRIPT +#================================================= + +ynh_script_progression --message="Upgrade of $app completed" --last diff --git a/sources/galette-0.8.2.tar.bz2 b/sources/galette-0.8.2.tar.bz2 deleted file mode 100644 index 74fac12..0000000 Binary files a/sources/galette-0.8.2.tar.bz2 and /dev/null differ