From 1d1e3d85b6c5c22add9009481519d26a20d2d058 Mon Sep 17 00:00:00 2001 From: tituspijean Date: Fri, 17 Apr 2020 14:44:38 +0200 Subject: [PATCH 01/35] Set file permissions after creating the log (#53) Should fix #49 --- scripts/install | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/scripts/install b/scripts/install index c72e186..152db6d 100644 --- a/scripts/install +++ b/scripts/install @@ -129,15 +129,6 @@ ynh_print_info "Configuring php-fpm..." # Create a dedicated php-fpm config ynh_add_fpm_config -# set proper permissions -ynh_print_info "Set permissions..." -find $final_path -type f | xargs chmod 644 -find $final_path -type d | xargs chmod 755 - -# Set right permissions for curl install -ynh_print_info "Set rights..." -chown -R $app: $final_path - #================================================= # SETUP LOGROTATE #================================================= @@ -156,6 +147,17 @@ ynh_print_info "Configuring log rotation..." touch "$final_path/data/log.txt" ynh_use_logrotate "$final_path/data/log.txt" +#================================================= +# SECURE FILES AND DIRECTORIES +#================================================= +# set proper permissions +ynh_print_info "Set permissions..." +find $final_path -type f | xargs chmod 644 +find $final_path -type d | xargs chmod 755 + +# Set right permissions for curl install +ynh_print_info "Set rights..." +chown -R $app: $final_path #================================================= # SETUP FAIL2BAN From fa25f18b901c2547c763569ecced2b5ef2b2f6d5 Mon Sep 17 00:00:00 2001 From: anmol26s <5068843+anmol26s@users.noreply.github.com> Date: Sun, 1 Nov 2020 20:30:22 +0530 Subject: [PATCH 02/35] Updated to V0.12.0 and Nginx fix (#57) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Set file permissions after creating the log (#53) (#54) Should fix #49 Authored-by: tituspijean * Updated to version v0.12.0 * Fix images * Fixed path in nginx Co-authored-by: lapineige Co-authored-by: anmol Co-authored-by: Éric Gaspar <46165813+ericgaspar@users.noreply.github.com> --- README.md | 45 ++-- check_process | 19 +- conf/app.src | 5 +- conf/datastore.php | 1 - conf/gen_hash.php | 7 - conf/ipbans.php | 10 - conf/lastupdatecheck.txt | 1 - conf/log.txt | 0 conf/nginx.conf | 25 ++- conf/php-fpm.conf | 430 --------------------------------------- conf/updates.txt | 1 - issue_template.md | 55 +++++ manifest.json | 2 +- pull_request_template.md | 18 ++ scripts/_common.sh | 95 ++------- scripts/backup | 39 ++-- scripts/change_url | 43 ++-- scripts/install | 57 +++--- scripts/remove | 30 +-- scripts/restore | 56 +++-- scripts/upgrade | 78 ++++--- 21 files changed, 309 insertions(+), 708 deletions(-) delete mode 100644 conf/datastore.php delete mode 100644 conf/gen_hash.php delete mode 100644 conf/ipbans.php delete mode 100644 conf/lastupdatecheck.txt delete mode 100644 conf/log.txt delete mode 100644 conf/php-fpm.conf delete mode 100644 conf/updates.txt create mode 100644 issue_template.md create mode 100644 pull_request_template.md diff --git a/README.md b/README.md index 67cb2e7..d6acdce 100644 --- a/README.md +++ b/README.md @@ -1,19 +1,27 @@ -# Shaarli app for Yunohost ---- +# Shaarli for Yunohost -This app intends to provide Yunohost's users with Shaarli (https://github.com/shaarli/Shaarli), a simple but advanced bookmarking service. +[![Integration level](https://dash.yunohost.org/integration/shaarli.svg)](https://dash.yunohost.org/appci/app/shaarli) ![](https://ci-apps.yunohost.org/ci/badges/shaarli.status.svg) ![](https://ci-apps.yunohost.org/ci/badges/shaarli.maintain.svg) -[![Integration level](https://dash.yunohost.org/integration/shaarli.svg)](https://dash.yunohost.org/appci/app/shaarli) -[![Install REPLACEBYYOURAPP with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=shaarli) - -![UI](https://framapic.org/ui93xwvieFC5/bdLqopk0JqVv) -It is based on the community version of Shaarli (from @sebsauvage original software). -You can get a demo [here](https://shaarli.readthedocs.io/en/master/#demo). +[![Install Shaarli with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=shaarli) -Current version: **0.10.4** +> *This package allows you to install Shaarli 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.* -Maintainer: @Lapineige +## Overview +This app intends to provide Yunohost's users with Shaarli (https://github.com/shaarli/shaarli), personal, minimalist, super-fast, database free, bookmarking service. + +**Shipped version:** 0.12.0 + +## Screenshots + +![](https://i.imgur.com/zGF4d6L.jpg) + +![](https://i.imgur.com/27wYsbC.png) + +## Demo + +* [Official demo](https://demo.shaarli.org/) ## This app claims following features @@ -23,15 +31,15 @@ Maintainer: @Lapineige - [X] Change url - [X] Integrate fail2ban for the app -## Installation information +## Configuration During the installation app will prompt you to install itself as public or private, if you choose public then anyone (not just Yunohost users) would be able to access your Shaarli instance. After the installation is complete, go to the domain where the Shaarli is installed and create your account. After the creation of the account the registration will be locked. ## TODO/Limitations - -- [ ] Integrate the LDAP/SSOWAT authentication (currently the authentication is done by Shaarli) + +- [ ] Integrate the LDAP/SSOWAT authentication ## Changelog @@ -42,9 +50,10 @@ For Shaarli changelog, see: https://github.com/shaarli/Shaarli/blob/master/CHANG https://github.com/YunoHost-Apps/shaarli_ynh/issues +**More info on the documentation page:** +https://yunohost.org/packaging_apps + #### Supported architectures -* x86-64b - [![Build Status](https://ci-apps.yunohost.org/ci/logs/shaarli%20%28Community%29.svg)](https://ci-apps.yunohost.org/ci/apps/shaarli/) -* ARMv8-A - [![Build Status](https://ci-apps-arm.yunohost.org/ci/logs/shaarli%20%28Community%29.svg)](https://ci-apps-arm.yunohost.org/ci/apps/shaarli/) -* Jessie x86-64b - [![Build Status](https://ci-stretch.nohost.me/ci/logs/shaarli%20%28Community%29.svg)](https://ci-stretch.nohost.me/ci/apps/shaarli/) - +* x86-64 - [![Build Status](https://ci-apps.yunohost.org/ci/logs/shaarli%20%28Apps%29.svg)](https://ci-apps.yunohost.org/ci/apps/shaarli/) +* ARMv8-A - [![Build Status](https://ci-apps-arm.yunohost.org/ci/logs/shaarli%20%28Apps%29.svg)](https://ci-apps-arm.yunohost.org/ci/apps/shaarli/) diff --git a/check_process b/check_process index 4d3c64a..692ab48 100644 --- a/check_process +++ b/check_process @@ -16,26 +16,15 @@ setup_private=1 setup_public=1 upgrade=1 + upgrade=1 from_commit=c492793c6855ce2d8d2af8656725a9ef8ed27923 backup_restore=1 multi_instance=1 - incorrect_path=1 port_already_use=0 change_url=1 ;;; Levels - Level 1=auto - Level 2=auto - Level 3=auto -# Level 4: -# Not implimented by upstream - Level 4=0 -# Level 5: + # If the level 5 (Package linter) is forced to 1. Please add justifications here. Level 5=auto - Level 6=auto - Level 7=auto - Level 8=0 - Level 9=0 - Level 10=0 ;;; Options -Email=anmol@datamol.org -Notification=change +Email= +Notification=none diff --git a/conf/app.src b/conf/app.src index 1d962c1..6c37cec 100644 --- a/conf/app.src +++ b/conf/app.src @@ -1,6 +1,7 @@ -SOURCE_URL=https://github.com/shaarli/Shaarli/releases/download/v0.10.4/shaarli-v0.10.4-full.tar.gz -SOURCE_SUM=8ea0dbba0f6265ec1419b529c9d49730ec4c4fffc1d87875438c756a470fa402 +SOURCE_URL=https://github.com/shaarli/Shaarli/releases/download/v0.12.0/shaarli-v0.12.0-full.tar.gz +SOURCE_SUM=f8d6e5d31d4657dfd0085b037804023a58d9e22152dea82b1ddb11fd1b1debd6 SOURCE_SUM_PRG=sha256sum SOURCE_FORMAT=tar.gz SOURCE_IN_SUBDIR=true SOURCE_FILENAME= +SOURCE_EXTRACT=true diff --git a/conf/datastore.php b/conf/datastore.php deleted file mode 100644 index fa93c7f..0000000 --- a/conf/datastore.php +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/conf/gen_hash.php b/conf/gen_hash.php deleted file mode 100644 index e69dae1..0000000 --- a/conf/gen_hash.php +++ /dev/null @@ -1,7 +0,0 @@ - - diff --git a/conf/ipbans.php b/conf/ipbans.php deleted file mode 100644 index 9dadae2..0000000 --- a/conf/ipbans.php +++ /dev/null @@ -1,10 +0,0 @@ - - array ( - ), - 'BANS' => - array ( - ), -); -?> \ No newline at end of file diff --git a/conf/lastupdatecheck.txt b/conf/lastupdatecheck.txt deleted file mode 100644 index 2c2927f..0000000 --- a/conf/lastupdatecheck.txt +++ /dev/null @@ -1 +0,0 @@ -0.7.0 */ \ No newline at end of file diff --git a/conf/log.txt b/conf/log.txt deleted file mode 100644 index e69de29..0000000 diff --git a/conf/nginx.conf b/conf/nginx.conf index efea5c1..b457260 100644 --- a/conf/nginx.conf +++ b/conf/nginx.conf @@ -1,27 +1,36 @@ #sub_path_only rewrite ^__PATH__$ __PATH__/ permanent; location __PATH__/ { - + # Path to source alias __FINALPATH__/ ; - + + # Force usage of https if ($scheme = http) { rewrite ^ https://$server_name$request_uri? permanent; } - - # Example PHP configuration (remove if not used) +### Example PHP configuration (remove it if not used) index index.php; - try_files $uri $uri/ index.php; + if (!-f $request_filename) { + rewrite ^ __PATH__/index.php last; + } + +# Common parameter to increase upload size limit in conjunction with dedicated php-fpm file client_max_body_size 50M; + try_files $uri $uri/ index.php$is_args$args; + location ~ [^/]\.php(/|$) { fastcgi_split_path_info ^(.+?\.php)(/.*)$; - fastcgi_pass unix:/var/run/php/php7.0-fpm-__NAME__.sock; + fastcgi_pass unix:/var/run/php/php__PHPVERSION__-fpm-__NAME__.sock; + fastcgi_index index.php; include fastcgi_params; - fastcgi_param REMOTE_USER $remote_user; - fastcgi_param PATH_INFO $fastcgi_path_info; + fastcgi_param REMOTE_USER $remote_user; + fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param SCRIPT_FILENAME $request_filename; } +### End of PHP configuration part + # Include SSOWAT user panel. include conf.d/yunohost_panel.conf.inc; } diff --git a/conf/php-fpm.conf b/conf/php-fpm.conf deleted file mode 100644 index ab5dca9..0000000 --- a/conf/php-fpm.conf +++ /dev/null @@ -1,430 +0,0 @@ -; Start a new pool named 'www'. -; the variable $pool can be used in any directive and will be replaced by the -; pool name ('www' here) -[__NAMETOCHANGE__] - -; Per pool prefix -; It only applies on the following directives: -; - 'access.log' -; - 'slowlog' -; - 'listen' (unixsocket) -; - 'chroot' -; - 'chdir' -; - 'php_values' -; - 'php_admin_values' -; When not set, the global prefix (or /usr) applies instead. -; Note: This directive can also be relative to the global prefix. -; Default Value: none -;prefix = /path/to/pools/$pool - -; Unix user/group of processes -; Note: The user is mandatory. If the group is not set, the default user's group -; will be used. -user = __USER__ -group = __USER__ - -; The address on which to accept FastCGI requests. -; Valid syntaxes are: -; 'ip.add.re.ss:port' - to listen on a TCP socket to a specific IPv4 address on -; a specific port; -; '[ip:6:addr:ess]:port' - to listen on a TCP socket to a specific IPv6 address on -; a specific port; -; 'port' - to listen on a TCP socket to all addresses -; (IPv6 and IPv4-mapped) on a specific port; -; '/path/to/unix/socket' - to listen on a unix socket. -; Note: This value is mandatory. -listen = /var/run/php/php7.0-fpm-__NAMETOCHANGE__.sock - -; Set listen(2) backlog. -; Default Value: 511 (-1 on FreeBSD and OpenBSD) -;listen.backlog = 511 - -; Set permissions for unix socket, if one is used. In Linux, read/write -; permissions must be set in order to allow connections from a web server. Many -; BSD-derived systems allow connections regardless of permissions. -; Default Values: user and group are set as the running user -; mode is set to 0660 -listen.owner = www-data -listen.group = www-data -;listen.mode = 0660 -; When POSIX Access Control Lists are supported you can set them using -; these options, value is a comma separated list of user/group names. -; When set, listen.owner and listen.group are ignored -;listen.acl_users = -;listen.acl_groups = - -; List of addresses (IPv4/IPv6) of FastCGI clients which are allowed to connect. -; Equivalent to the FCGI_WEB_SERVER_ADDRS environment variable in the original -; PHP FCGI (5.2.2+). Makes sense only with a tcp listening socket. Each address -; must be separated by a comma. If this value is left blank, connections will be -; accepted from any ip address. -; Default Value: any -;listen.allowed_clients = 127.0.0.1 - -; Specify the nice(2) priority to apply to the pool processes (only if set) -; The value can vary from -19 (highest priority) to 20 (lower priority) -; Note: - It will only work if the FPM master process is launched as root -; - The pool processes will inherit the master process priority -; unless it specified otherwise -; Default Value: no set -; process.priority = -19 - -; Set the process dumpable flag (PR_SET_DUMPABLE prctl) even if the process user -; or group is differrent than the master process user. It allows to create process -; core dump and ptrace the process for the pool user. -; Default Value: no -; process.dumpable = yes - -; Choose how the process manager will control the number of child processes. -; Possible Values: -; static - a fixed number (pm.max_children) of child processes; -; dynamic - the number of child processes are set dynamically based on the -; following directives. With this process management, there will be -; always at least 1 children. -; pm.max_children - the maximum number of children that can -; be alive at the same time. -; pm.start_servers - the number of children created on startup. -; pm.min_spare_servers - the minimum number of children in 'idle' -; state (waiting to process). If the number -; of 'idle' processes is less than this -; number then some children will be created. -; pm.max_spare_servers - the maximum number of children in 'idle' -; state (waiting to process). If the number -; of 'idle' processes is greater than this -; number then some children will be killed. -; ondemand - no children are created at startup. Children will be forked when -; new requests will connect. The following parameter are used: -; pm.max_children - the maximum number of children that -; can be alive at the same time. -; pm.process_idle_timeout - The number of seconds after which -; an idle process will be killed. -; Note: This value is mandatory. -pm = dynamic - -; The number of child processes to be created when pm is set to 'static' and the -; maximum number of child processes when pm is set to 'dynamic' or 'ondemand'. -; This value sets the limit on the number of simultaneous requests that will be -; served. Equivalent to the ApacheMaxClients directive with mpm_prefork. -; Equivalent to the PHP_FCGI_CHILDREN environment variable in the original PHP -; CGI. The below defaults are based on a server without much resources. Don't -; forget to tweak pm.* to fit your needs. -; Note: Used when pm is set to 'static', 'dynamic' or 'ondemand' -; Note: This value is mandatory. -pm.max_children = 5 - -; The number of child processes created on startup. -; Note: Used only when pm is set to 'dynamic' -; Default Value: min_spare_servers + (max_spare_servers - min_spare_servers) / 2 -pm.start_servers = 2 - -; The desired minimum number of idle server processes. -; Note: Used only when pm is set to 'dynamic' -; Note: Mandatory when pm is set to 'dynamic' -pm.min_spare_servers = 1 - -; The desired maximum number of idle server processes. -; Note: Used only when pm is set to 'dynamic' -; Note: Mandatory when pm is set to 'dynamic' -pm.max_spare_servers = 3 - -; The number of seconds after which an idle process will be killed. -; Note: Used only when pm is set to 'ondemand' -; Default Value: 10s -;pm.process_idle_timeout = 10s; - -; The number of requests each child process should execute before respawning. -; This can be useful to work around memory leaks in 3rd party libraries. For -; endless request processing specify '0'. Equivalent to PHP_FCGI_MAX_REQUESTS. -; Default Value: 0 -;pm.max_requests = 500 - -; The URI to view the FPM status page. If this value is not set, no URI will be -; recognized as a status page. It shows the following informations: -; pool - the name of the pool; -; process manager - static, dynamic or ondemand; -; start time - the date and time FPM has started; -; start since - number of seconds since FPM has started; -; accepted conn - the number of request accepted by the pool; -; listen queue - the number of request in the queue of pending -; connections (see backlog in listen(2)); -; max listen queue - the maximum number of requests in the queue -; of pending connections since FPM has started; -; listen queue len - the size of the socket queue of pending connections; -; idle processes - the number of idle processes; -; active processes - the number of active processes; -; total processes - the number of idle + active processes; -; max active processes - the maximum number of active processes since FPM -; has started; -; max children reached - number of times, the process limit has been reached, -; when pm tries to start more children (works only for -; pm 'dynamic' and 'ondemand'); -; Value are updated in real time. -; Example output: -; pool: www -; process manager: static -; start time: 01/Jul/2011:17:53:49 +0200 -; start since: 62636 -; accepted conn: 190460 -; listen queue: 0 -; max listen queue: 1 -; listen queue len: 42 -; idle processes: 4 -; active processes: 11 -; total processes: 15 -; max active processes: 12 -; max children reached: 0 -; -; By default the status page output is formatted as text/plain. Passing either -; 'html', 'xml' or 'json' in the query string will return the corresponding -; output syntax. Example: -; http://www.foo.bar/status -; http://www.foo.bar/status?json -; http://www.foo.bar/status?html -; http://www.foo.bar/status?xml -; -; By default the status page only outputs short status. Passing 'full' in the -; query string will also return status for each pool process. -; Example: -; http://www.foo.bar/status?full -; http://www.foo.bar/status?json&full -; http://www.foo.bar/status?html&full -; http://www.foo.bar/status?xml&full -; The Full status returns for each process: -; pid - the PID of the process; -; state - the state of the process (Idle, Running, ...); -; start time - the date and time the process has started; -; start since - the number of seconds since the process has started; -; requests - the number of requests the process has served; -; request duration - the duration in µs of the requests; -; request method - the request method (GET, POST, ...); -; request URI - the request URI with the query string; -; content length - the content length of the request (only with POST); -; user - the user (PHP_AUTH_USER) (or '-' if not set); -; script - the main script called (or '-' if not set); -; last request cpu - the %cpu the last request consumed -; it's always 0 if the process is not in Idle state -; because CPU calculation is done when the request -; processing has terminated; -; last request memory - the max amount of memory the last request consumed -; it's always 0 if the process is not in Idle state -; because memory calculation is done when the request -; processing has terminated; -; If the process is in Idle state, then informations are related to the -; last request the process has served. Otherwise informations are related to -; the current request being served. -; Example output: -; ************************ -; pid: 31330 -; state: Running -; start time: 01/Jul/2011:17:53:49 +0200 -; start since: 63087 -; requests: 12808 -; request duration: 1250261 -; request method: GET -; request URI: /test_mem.php?N=10000 -; content length: 0 -; user: - -; script: /home/fat/web/docs/php/test_mem.php -; last request cpu: 0.00 -; last request memory: 0 -; -; Note: There is a real-time FPM status monitoring sample web page available -; It's available in: /usr/share/php/7.0/fpm/status.html -; -; Note: The value must start with a leading slash (/). The value can be -; anything, but it may not be a good idea to use the .php extension or it -; may conflict with a real PHP file. -; Default Value: not set -;pm.status_path = /status - -; The ping URI to call the monitoring page of FPM. If this value is not set, no -; URI will be recognized as a ping page. This could be used to test from outside -; that FPM is alive and responding, or to -; - create a graph of FPM availability (rrd or such); -; - remove a server from a group if it is not responding (load balancing); -; - trigger alerts for the operating team (24/7). -; Note: The value must start with a leading slash (/). The value can be -; anything, but it may not be a good idea to use the .php extension or it -; may conflict with a real PHP file. -; Default Value: not set -;ping.path = /ping - -; This directive may be used to customize the response of a ping request. The -; response is formatted as text/plain with a 200 response code. -; Default Value: pong -;ping.response = pong - -; The access log file -; Default: not set -;access.log = log/$pool.access.log - -; The access log format. -; The following syntax is allowed -; %%: the '%' character -; %C: %CPU used by the request -; it can accept the following format: -; - %{user}C for user CPU only -; - %{system}C for system CPU only -; - %{total}C for user + system CPU (default) -; %d: time taken to serve the request -; it can accept the following format: -; - %{seconds}d (default) -; - %{miliseconds}d -; - %{mili}d -; - %{microseconds}d -; - %{micro}d -; %e: an environment variable (same as $_ENV or $_SERVER) -; it must be associated with embraces to specify the name of the env -; variable. Some exemples: -; - server specifics like: %{REQUEST_METHOD}e or %{SERVER_PROTOCOL}e -; - HTTP headers like: %{HTTP_HOST}e or %{HTTP_USER_AGENT}e -; %f: script filename -; %l: content-length of the request (for POST request only) -; %m: request method -; %M: peak of memory allocated by PHP -; it can accept the following format: -; - %{bytes}M (default) -; - %{kilobytes}M -; - %{kilo}M -; - %{megabytes}M -; - %{mega}M -; %n: pool name -; %o: output header -; it must be associated with embraces to specify the name of the header: -; - %{Content-Type}o -; - %{X-Powered-By}o -; - %{Transfert-Encoding}o -; - .... -; %p: PID of the child that serviced the request -; %P: PID of the parent of the child that serviced the request -; %q: the query string -; %Q: the '?' character if query string exists -; %r: the request URI (without the query string, see %q and %Q) -; %R: remote IP address -; %s: status (response code) -; %t: server time the request was received -; 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 -; %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/updates.txt b/conf/updates.txt deleted file mode 100644 index fdf0452..0000000 --- a/conf/updates.txt +++ /dev/null @@ -1 +0,0 @@ -updateMethodMergeDeprecatedConfigFile;updateMethodRenameDashTags;updateMethodConfigToJson;updateMethodEscapeUnescapedConfig;updateMethodDatastoreIds \ No newline at end of file diff --git a/issue_template.md b/issue_template.md new file mode 100644 index 0000000..d93e361 --- /dev/null +++ b/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. *Make sure 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.* + - *In doubt, ask here and we will figure it out together.* +3. *Delete these 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 REPLACEBYYOURAPP + ``` +- *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/manifest.json b/manifest.json index ae85bff..2c8dca0 100644 --- a/manifest.json +++ b/manifest.json @@ -16,7 +16,7 @@ }, "url": "https://github.com/shaarli/Shaarli", "license": "MIT", - "version": "0.10.4~ynh3", + "version": "0.12.0~ynh1", "multi_instance": true, "services": [ "nginx", diff --git a/pull_request_template.md b/pull_request_template.md new file mode 100644 index 0000000..658cf1d --- /dev/null +++ b/pull_request_template.md @@ -0,0 +1,18 @@ +## Problem +- *Description of why you made this PR* + +## Solution +- *And how do you fix that problem* + +## PR Status +- [ ] Code finished. +- [ ] Tested with Package_check. +- [ ] Fix or enhancement tested. +- [ ] Upgrade from last version tested. +- [ ] Can be reviewed and tested. + +## Package_check results +--- +*If you have access to [App Continuous Integration for packagers](https://yunohost.org/#/packaging_apps_ci) you can provide a link to the package_check results like below, replacing '-NUM-' in this link by the PR number and USERNAME by your username on the ci-apps-dev. Or you provide a screenshot or a pastebin of the results* + +[![Build Status](https://ci-apps-dev.yunohost.org/jenkins/job/shaarli_ynh%20PR-NUM-%20(USERNAME)/badge/icon)](https://ci-apps-dev.yunohost.org/jenkins/job/shaarli_ynh%20PR-NUM-%20(USERNAME)/) diff --git a/scripts/_common.sh b/scripts/_common.sh index ac58575..b27aadc 100644 --- a/scripts/_common.sh +++ b/scripts/_common.sh @@ -1,95 +1,30 @@ #!/bin/bash -# ============= FUTURE YUNOHOST HELPER ============= -# Delete a file checksum from the app settings -# -# $app should be defined when calling this helper -# -# usage: ynh_remove_file_checksum file -# | arg: file - The file for which the checksum will be deleted -ynh_delete_file_checksum () { - local checksum_setting_name=checksum_${1//[\/ ]/_} # Replace all '/' and ' ' by '_' - ynh_app_setting_delete $app $checksum_setting_name -} - #================================================= # COMMON VARIABLES #================================================= # dependencies used by the app -pkg_dependencies="php-cli php-gettext php-curl php-intl php-gd php-mbstring openssl" +YNH_PHP_VERSION="7.3" +# dependencies used by the app +# dependencies used by the app +pkg_dependencies="" +extra_php_dependencies="php${YNH_PHP_VERSION}-cli php${YNH_PHP_VERSION}-gettext php${YNH_PHP_VERSION}-curl php${YNH_PHP_VERSION}-intl php${YNH_PHP_VERSION}-gd php${YNH_PHP_VERSION}-mbstring openssl" + + +#================================================= +# PERSONAL HELPERS +#================================================= #================================================= # EXPERIMENTAL HELPERS #================================================= -# Create a dedicated fail2ban config (jail and filter conf files) -# -# usage: ynh_add_fail2ban_config log_file filter [max_retry [ports]] -# | arg: log_file - Log file to be checked by fail2ban -# | arg: failregex - Failregex to be looked for by fail2ban -# | arg: max_retry - Maximum number of retries allowed before banning IP address - default: 3 -# | arg: ports - Ports blocked for a banned IP address - default: http,https -ynh_add_fail2ban_config_temp () { - # Process parameters - logpath=$1 - failregex=$2 - max_retry=${3:-3} - ports=${4:-http,https} - - test -n "$logpath" || ynh_die "ynh_add_fail2ban_config expects a logfile path as first argument and received nothing." - test -n "$failregex" || ynh_die "ynh_add_fail2ban_config expects a failure regex as second argument and received nothing." - - finalfail2banjailconf="/etc/fail2ban/jail.d/$app.conf" - finalfail2banfilterconf="/etc/fail2ban/filter.d/$app.conf" - ynh_backup_if_checksum_is_different "$finalfail2banjailconf" 1 - ynh_backup_if_checksum_is_different "$finalfail2banfilterconf" 1 - - tee $finalfail2banjailconf <&2 - echo "WARNING${fail2ban_error#*WARNING}" >&2 - fi -} - -# Remove the dedicated fail2ban config (jail and filter conf files) -# -# usage: ynh_remove_fail2ban_config -ynh_remove_fail2ban_config () { - ynh_secure_remove "/etc/fail2ban/jail.d/$app.conf" - ynh_secure_remove "/etc/fail2ban/filter.d/$app.conf" - systemctl restart fail2ban -} - -ynh_smart_mktemp () { - local min_size="${1:-300}" - # Transform the minimum size from megabytes to kilobytes - min_size=$(( $min_size * 1024 )) - - # Check if there's enough free space in a directory +#================================================= +# FUTURE OFFICIAL HELPERS +#================================================= + # Check if there's enough free space in a directory is_there_enough_space () { local free_space=$(df --output=avail "$1" | sed 1d) test $free_space -ge $min_size @@ -100,7 +35,7 @@ ynh_smart_mktemp () { elif is_there_enough_space /var; then local tmpdir=/var elif is_there_enough_space /; then - local tmpdir=/ + local tmpdir=/ elif is_there_enough_space /home; then local tmpdir=/home else diff --git a/scripts/backup b/scripts/backup index 035e434..a5d2459 100644 --- a/scripts/backup +++ b/scripts/backup @@ -24,54 +24,59 @@ ynh_abort_if_errors #================================================= # LOAD SETTINGS #================================================= -ynh_print_info "Loading installation settings..." +ynh_print_info --message="Loading installation settings..." app=$YNH_APP_INSTANCE_NAME -final_path=$(ynh_app_setting_get $app final_path) -domain=$(ynh_app_setting_get $app domain) + +final_path=$(ynh_app_setting_get --app=$app --key=final_path) +domain=$(ynh_app_setting_get --app=$app --key=domain) +phpversion=$(ynh_app_setting_get --app=$app --key=phpversion) #================================================= -# STANDARD BACKUP STEPS +# DECLARE DATA AND CONF FILES TO BACKUP +#================================================= +ynh_print_info --message="Declaring files to be backed up..." + +### N.B. : the following 'ynh_backup' calls are only a *declaration* of what needs +### to be backuped and not an actual copy of any file. The actual backup that +### creates and fill the archive with the files happens in the core after this +### script is called. Hence ynh_backups calls takes basically 0 seconds to run. + #================================================= # BACKUP THE APP MAIN DIR #================================================= -ynh_print_info "Backing up the main app directory..." - -ynh_backup "$final_path" +ynh_backup --src_path="$final_path" #================================================= # BACKUP THE NGINX CONFIGURATION #================================================= -ynh_print_info "Backing up nginx web server configuration..." -ynh_backup "/etc/nginx/conf.d/$domain.d/$app.conf" +ynh_backup --src_path="/etc/nginx/conf.d/$domain.d/$app.conf" #================================================= # BACKUP THE PHP-FPM CONFIGURATION #================================================= -ynh_print_info "Backing up php-fpm configuration..." -ynh_backup "/etc/php/7.0/fpm/pool.d/$app.conf" +ynh_backup --src_path="/etc/php/$phpversion/fpm/pool.d/$app.conf" #================================================= # SPECIFIC BACKUP #================================================= # BACKUP LOGROTATE #================================================= -ynh_print_info "Backing up logrotate configuration..." -ynh_backup "/etc/logrotate.d/$app" +ynh_backup --src_path="/etc/logrotate.d/$app" #================================================= # BACKUP FAIL2BAN CONFIGURATION #================================================= -ynh_print_info "Backing up Fail2Ban configuration..." -ynh_backup "/etc/fail2ban/jail.d/$app.conf" -ynh_backup "/etc/fail2ban/filter.d/$app.conf" + +ynh_backup --src_path="/etc/fail2ban/jail.d/$app.conf" +ynh_backup --src_path="/etc/fail2ban/filter.d/$app.conf" #================================================= # END OF SCRIPT #================================================= -ynh_print_info "Backup script completed for $app. (YunoHost will then actually copy those files to the archive)." +ynh_print_info --message="Backup script completed for $app. (YunoHost will then actually copy those files to the archive)." diff --git a/scripts/change_url b/scripts/change_url index df3afad..9931551 100644 --- a/scripts/change_url +++ b/scripts/change_url @@ -24,14 +24,32 @@ app=$YNH_APP_INSTANCE_NAME #================================================= # LOAD SETTINGS #================================================= -ynh_print_info "Loading installation settings..." +ynh_script_progression --message="Loading installation settings..." --time --weight=1 # Needed for helper "ynh_add_nginx_config" -final_path=$(ynh_app_setting_get $app final_path) +final_path=$(ynh_app_setting_get --app=$app --key=final_path) # Add settings here as needed by your application -#db_name=$(ynh_app_setting_get "$app" db_name) -#db_pwd=$(ynh_app_setting_get $app db_pwd) +#db_name=$(ynh_app_setting_get --app=$app --key=db_name) +#db_user=$db_name +#db_pwd=$(ynh_app_setting_get --app=$app --key=db_pwd) + +#================================================= +# BACKUP BEFORE UPGRADE THEN ACTIVE TRAP +#================================================= +ynh_script_progression --message="Backing up the app before changing its url (may take a while)..." --time --weight=1 + +# Backup the current version of the app +ynh_backup_before_upgrade +ynh_clean_setup () { + # Remove the new domain config file, the remove script won't do it as it doesn't know yet its location. + ynh_secure_remove --file="/etc/nginx/conf.d/$new_domain.d/$app.conf" + + # restore it if the upgrade fails + ynh_restore_upgradebackup +} +# Exit if an error occurs during the execution of the script +ynh_abort_if_errors #================================================= # CHECK WHICH PARTS SHOULD BE CHANGED @@ -55,7 +73,7 @@ fi #================================================= # MODIFY URL IN NGINX CONF #================================================= -ynh_print_info "Updating nginx web server configuration..." +ynh_script_progression --message="Updating nginx web server configuration..." nginx_conf_path=/etc/nginx/conf.d/$old_domain.d/$app.conf @@ -63,7 +81,7 @@ nginx_conf_path=/etc/nginx/conf.d/$old_domain.d/$app.conf if [ $change_path -eq 1 ] then # Make a backup of the original nginx config file if modified - ynh_backup_if_checksum_is_different "$nginx_conf_path" + ynh_backup_if_checksum_is_different --file="$nginx_conf_path" # Set global variables for nginx helper domain="$old_domain" path_url="$new_path" @@ -75,24 +93,21 @@ fi if [ $change_domain -eq 1 ] then # Delete file checksum for the old conf file location - ynh_delete_file_checksum "$nginx_conf_path" + ynh_delete_file_checksum --file="$nginx_conf_path" mv $nginx_conf_path /etc/nginx/conf.d/$new_domain.d/$app.conf # Store file checksum for the new config file location - ynh_store_file_checksum "/etc/nginx/conf.d/$new_domain.d/$app.conf" + ynh_store_file_checksum --file="/etc/nginx/conf.d/$new_domain.d/$app.conf" fi - -#================================================= -# GENERIC FINALISATION #================================================= # RELOAD NGINX #================================================= -ynh_print_info "Reloading nginx web server..." +ynh_script_progression --message="Reloading nginx web server..." -systemctl reload nginx +ynh_systemd_action --service_name=nginx --action=reload #================================================= # END OF SCRIPT #================================================= -ynh_print_info "Change of URL completed for $app" +ynh_script_progression --message="Change of URL completed for $app" \ No newline at end of file diff --git a/scripts/install b/scripts/install index 152db6d..c130686 100644 --- a/scripts/install +++ b/scripts/install @@ -43,15 +43,15 @@ app=$YNH_APP_INSTANCE_NAME #================================================= # CHECK IF THE APP CAN BE INSTALLED WITH THESE ARGS #================================================= -ynh_print_info "Validating installation parameters..." +ynh_script_progression --message="Validating installation parameters..." ### If the app uses nginx as web server (written in HTML/PHP in most cases), the final path should be "/var/www/$app". ### If the app provides an internal web server (or uses another application server such as uwsgi), the final path should be "/opt/yunohost/$app" final_path=/var/www/$app -test ! -e "$final_path" || ynh_die "This path already contains a folder" +test ! -e "$final_path" || ynh_die --message="This path already contains a folder" # Register (book) web path -ynh_webpath_register $app $domain $path_url +ynh_webpath_register --app=$app --domain=$domain --path_url=$path_url #================================================= @@ -59,15 +59,15 @@ ynh_webpath_register $app $domain $path_url #================================================= ynh_print_info "Storing installation settings..." -ynh_app_setting_set $app domain $domain -ynh_app_setting_set $app path $path_url -ynh_app_setting_set $app is_public $is_public +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=is_public --value=$is_public #================================================= # INSTALL DEPENDENCIES #================================================= -ynh_print_info "Installing dependencies..." +ynh_script_progression --message="Installing dependencies..." ### `ynh_install_app_dependencies` allows you to add any "apt" dependencies to the package. ### Those deb packages will be installed as dependencies of this package. @@ -82,20 +82,19 @@ ynh_install_app_dependencies $pkg_dependencies #================================================= # DOWNLOAD, CHECK AND UNPACK SOURCE #================================================= -ynh_print_info "Setting up source files..." - +ynh_script_progression --message="Setting up source files..." ### `ynh_setup_source` is used to install an app from a zip or tar.gz file, ### downloaded from an upstream source, like a git repository. ### `ynh_setup_source` use the file conf/app.src -ynh_app_setting_set $app final_path $final_path +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 "$final_path" +ynh_setup_source --dest_dir="$final_path" #================================================= # NGINX CONFIGURATION #================================================= -ynh_print_info "Configuring nginx web server..." +ynh_script_progression --message="Configuring nginx web server..." ### `ynh_add_nginx_config` will use the file conf/nginx.conf @@ -105,10 +104,9 @@ ynh_add_nginx_config #================================================= # CREATE DEDICATED USER #================================================= -ynh_print_info "Configuring system user..." - +ynh_script_progression --message="Configuring system user..." # Create a system user -ynh_system_user_create $app +ynh_system_user_create --username=$app #================================================= # PHP-FPM CONFIGURATION @@ -127,12 +125,12 @@ ynh_print_info "Configuring php-fpm..." ### - And the section "PHP-FPM CONFIGURATION" in the upgrade script # Create a dedicated php-fpm config -ynh_add_fpm_config +ynh_add_fpm_config --usage=low --footprint=low --package="$extra_php_dependencies" #================================================= # SETUP LOGROTATE #================================================= -ynh_print_info "Configuring log rotation..." +ynh_script_progression --message="Configuring log rotation..." ### `ynh_use_logrotate` is used to configure a logrotate configuration for the logs of this app. ### Use this helper only if there is effectively a log file for this app. @@ -143,7 +141,6 @@ ynh_print_info "Configuring log rotation..." ### - And the section "SETUP LOGROTATE" in the upgrade script # Use logrotate to manage application logfile(s) -# We gotta create the file explicitly to avoid triggering https://github.com/YunoHost/issues/issues/1390 touch "$final_path/data/log.txt" ynh_use_logrotate "$final_path/data/log.txt" @@ -151,41 +148,45 @@ ynh_use_logrotate "$final_path/data/log.txt" # SECURE FILES AND DIRECTORIES #================================================= # set proper permissions -ynh_print_info "Set permissions..." +ynh_script_progression --message="Set permissions..." + find $final_path -type f | xargs chmod 644 find $final_path -type d | xargs chmod 755 # Set right permissions for curl install -ynh_print_info "Set rights..." +ynh_script_progression --message="Set rights..." + chown -R $app: $final_path #================================================= # SETUP FAIL2BAN #================================================= -ynh_print_info "Add Fail2Ban configuration..." -ynh_add_fail2ban_config_temp "$final_path/data/log.txt" "\s-\s\s-\sLogin failed for user.*$" 5 +ynh_script_progression --message="Configuring fail2ban..." + +# Create a dedicated fail2ban config + +ynh_add_fail2ban_config --logpath="$final_path/data/log.txt" --failregex="\s-\s\s-\sLogin failed for user.*$" #================================================= # SETUP SSOWAT #================================================= -ynh_print_info "Configuring SSOwat..." +ynh_script_progression --message="Configuring SSOwat..." # Make app public if necessary if [ $is_public -eq 1 ] then # unprotected_uris allows SSO credentials to be passed anyway. - ynh_app_setting_set $app unprotected_uris "/" + ynh_app_setting_set --app=$app --key=unprotected_uris --value="/" fi - #================================================= # RELOAD NGINX #================================================= -ynh_print_info "Reloading nginx web server..." +ynh_script_progression --message="Reloading nginx web server..." -systemctl reload nginx +ynh_systemd_action --service_name=nginx --action=reload #================================================= # END OF SCRIPT #================================================= -ynh_print_info "Installation of $app completed" +ynh_script_progression --message="Installation of $app completed" diff --git a/scripts/remove b/scripts/remove index ac2d6da..67beaeb 100644 --- a/scripts/remove +++ b/scripts/remove @@ -12,18 +12,18 @@ source /usr/share/yunohost/helpers #================================================= # LOAD SETTINGS #================================================= -ynh_print_info "Loading installation settings..." +ynh_script_progression --message="Loading installation settings..." app=$YNH_APP_INSTANCE_NAME -domain=$(ynh_app_setting_get $app domain) -final_path=$(ynh_app_setting_get $app final_path) +domain=$(ynh_app_setting_get --app=$app --key=domain) +final_path=$(ynh_app_setting_get --app=$app --key=final_path) #================================================= # REMOVE DEPENDENCIES #================================================= -ynh_print_info "Removing dependencies" +ynh_script_progression --message="Removing dependencies..." # Remove metapackage and its dependencies ynh_remove_app_dependencies @@ -31,15 +31,15 @@ ynh_remove_app_dependencies #================================================= # REMOVE APP MAIN DIR #================================================= -ynh_print_info "Removing app main directory" +ynh_script_progression --message="Removing app main directory..." # Remove the app directory securely -ynh_secure_remove "$final_path" +ynh_secure_remove --file="$final_path" #================================================= # REMOVE NGINX CONFIGURATION #================================================= -ynh_print_info "Removing nginx web server configuration" +ynh_script_progression --message="Removing nginx web server configuration..." # Remove the dedicated nginx config ynh_remove_nginx_config @@ -47,7 +47,7 @@ ynh_remove_nginx_config #================================================= # REMOVE PHP-FPM CONFIGURATION #================================================= -ynh_print_info "Removing php-fpm configuration" +ynh_script_progression --message="Removing php-fpm configuration..." # Remove the dedicated php-fpm config ynh_remove_fpm_config @@ -55,15 +55,17 @@ ynh_remove_fpm_config #================================================= # REMOVE LOGROTATE CONFIGURATION #================================================= -ynh_print_info "Removing logrotate configuration" - +ynh_script_progression --message="Removing logrotate configuration..." # Remove the app-specific logrotate config ynh_remove_logrotate + #================================================= # REMOVE FAIL2BAN CONFIGURATION #================================================= -ynh_print_info "Removing Fail2Ban configuration" +ynh_script_progression --message="Removing fail2ban configuration..." + +# Remove the dedicated fail2ban config ynh_remove_fail2ban_config #================================================= @@ -71,13 +73,13 @@ ynh_remove_fail2ban_config #================================================= # REMOVE DEDICATED USER #================================================= -ynh_print_info "Removing the dedicated system user" +ynh_script_progression --message="Removing the dedicated system user..." # Delete a system user -ynh_system_user_delete $app +ynh_system_user_delete --username=$app #================================================= # END OF SCRIPT #================================================= -ynh_print_info "Removal of $app completed" +ynh_script_progression --message="Removal of $app completed" \ No newline at end of file diff --git a/scripts/restore b/scripts/restore index 14e9d2b..3e346d2 100644 --- a/scripts/restore +++ b/scripts/restore @@ -24,47 +24,49 @@ ynh_abort_if_errors #================================================= # LOAD SETTINGS #================================================= -ynh_print_info "Loading settings..." +ynh_script_progression --message="Loading installation settings..." app=$YNH_APP_INSTANCE_NAME -domain=$(ynh_app_setting_get $app domain) -path_url=$(ynh_app_setting_get $app path) -final_path=$(ynh_app_setting_get $app final_path) +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) +phpversion=$(ynh_app_setting_get --app=$app --key=phpversion) #================================================= # CHECK IF THE APP CAN BE RESTORED #================================================= -ynh_print_info "Validating restoration parameters..." +ynh_script_progression --message="Validating restoration parameters..." --time --weight=1 -ynh_webpath_available $domain $path_url \ - || ynh_die "Path not available: ${domain}${path_url}" +ynh_webpath_available --domain=$domain --path_url=$path_url \ + || ynh_die --message="Path not available: ${domain}${path_url}" test ! -d $final_path \ - || ynh_die "There is already a directory: $final_path " + || ynh_die --message="There is already a directory: $final_path " #================================================= # STANDARD RESTORATION STEPS #================================================= # RESTORE THE NGINX CONFIGURATION #================================================= -ynh_print_info "Restoring Nginx configuration..." -ynh_restore_file "/etc/nginx/conf.d/$domain.d/$app.conf" + +ynh_restore_file --origin_path="/etc/nginx/conf.d/$domain.d/$app.conf" #================================================= # RESTORE THE APP MAIN DIR #================================================= -ynh_print_info "Restoring the app main directory..." +ynh_script_progression --message="Restoring the app main directory..." -ynh_restore_file "$final_path" +ynh_restore_file --origin_path="$final_path" #================================================= # RECREATE THE DEDICATED USER #================================================= -ynh_print_info "Recreating the dedicated system user..." +ynh_script_progression --message="Recreating the dedicated system user..." # Create the dedicated user (if not existing) -ynh_system_user_create $app +ynh_system_user_create --username=$app + #================================================= # RESTORE USER RIGHTS @@ -77,14 +79,14 @@ chown -R $app: $final_path # RESTORE THE PHP-FPM CONFIGURATION #================================================= -ynh_restore_file "/etc/php/7.0/fpm/pool.d/$app.conf" +ynh_restore_file --origin_path="/etc/php/$phpversion/fpm/pool.d/$app.conf" #================================================= # SPECIFIC RESTORATION #================================================= # REINSTALL DEPENDENCIES #================================================= -ynh_print_info "Reinstalling dependencies..." +ynh_script_progression --message="Reinstalling dependencies..." # Define and install dependencies ynh_install_app_dependencies $pkg_dependencies @@ -92,34 +94,30 @@ ynh_install_app_dependencies $pkg_dependencies #================================================= # RESTORE THE LOGROTATE CONFIGURATION #================================================= -ynh_print_info "Restoring logrotate..." -ynh_restore_file "/etc/logrotate.d/$app" + +ynh_restore_file --origin_path="/etc/logrotate.d/$app" #================================================= # RESTORE FAIL2BAN CONFIGURATION #================================================= -ynh_print_info "Restoring Fail2Ban..." +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" -systemctl restart fail2ban +ynh_systemd_action --action=restart --service_name=fail2ban #================================================= # GENERIC FINALIZATION #================================================= # RELOAD NGINX AND PHP-FPM #================================================= -ynh_print_info "Reloading nginx web server and php-fpm..." +ynh_script_progression --message="Reloading nginx web server and php-fpm..." -systemctl reload php7.0-fpm -systemctl reload nginx +ynh_systemd_action --service_name=php$phpversion-fpm --action=reload +ynh_systemd_action --service_name=nginx --action=reload #================================================= # END OF SCRIPT #================================================= -ynh_print_info "Restoration completed for $app" - - - - - +ynh_script_progression --message="Restoration completed for $app" diff --git a/scripts/upgrade b/scripts/upgrade index 7a2397e..56aee13 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -12,39 +12,40 @@ source /usr/share/yunohost/helpers #================================================= # LOAD SETTINGS #================================================= -ynh_print_info "Loading installation settings..." +ynh_script_progression --message="Loading installation settings..." app=$YNH_APP_INSTANCE_NAME -domain=$(ynh_app_setting_get $app domain) -path_url=$(ynh_app_setting_get $app path) -is_public=$(ynh_app_setting_get $app is_public) -final_path=$(ynh_app_setting_get $app final_path) +domain=$(ynh_app_setting_get --app=$app --key=domain) +path_url=$(ynh_app_setting_get --app=$app --key=path) +is_public=$(ynh_app_setting_get --app=$app --key=is_public) +final_path=$(ynh_app_setting_get --app=$app --key=final_path) #================================================= # ENSURE DOWNWARD COMPATIBILITY #================================================= -ynh_print_info "Ensuring downward compatibility..." +ynh_script_progression --message="Ensuring downward compatibility..." # Fix is_public as a boolean value if [ "$is_public" = "Yes" ]; then - ynh_app_setting_set $app is_public 1 + ynh_app_setting_set --app=$app --key=is_public --value=1 is_public=1 elif [ "$is_public" = "No" ]; then - ynh_app_setting_set $app is_public 0 + ynh_app_setting_set --app=$app --key=is_public --value=0 is_public=0 fi # If final_path doesn't exist, create it -if [ -z $final_path ]; then +if [ -z "$final_path" ]; then final_path=/var/www/$app - ynh_app_setting_set $app final_path $final_path + ynh_app_setting_set --app=$app --key=final_path --value=$final_path fi + #================================================= # BACKUP BEFORE UPGRADE THEN ACTIVE TRAP #================================================= -ynh_print_info "Backing up the app before upgrading (may take a while)..." +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 @@ -56,6 +57,7 @@ ynh_clean_setup () { ynh_abort_if_errors + #================================================= # CHECK THE PATH #================================================= @@ -66,12 +68,24 @@ ynh_abort_if_errors # instead of /foo .... # If nobody installed your app before 2.7, then you may # safely remove this line -path_url=$(ynh_normalize_url_path $path_url) +path_url=$(ynh_normalize_url_path --path_url=$path_url) + +#================================================= +# DOWNLOAD, CHECK AND UNPACK SOURCE +#================================================= + +if [ "$upgrade_type" == "UPGRADE_APP" ] +then + ynh_script_progression --message="Upgrading source files..." --time --weight=1 + + # Download, check integrity, uncompress and patch the source from app.src + ynh_setup_source --dest_dir="$final_path" +fi #================================================= # REMOVE APP MAIN DIR #================================================= - + # Create a temporary directory tmpdir="$(ynh_smart_mktemp 600)" # Backup the config file in the temp dir @@ -95,7 +109,7 @@ rm -Rf "$tmpdir" #================================================= # NGINX CONFIGURATION #================================================= -ynh_print_info "Upgrading nginx web server configuration..." +ynh_script_progression --message="Upgrading nginx web server configuration..." # Create a dedicated nginx config ynh_add_nginx_config @@ -103,30 +117,31 @@ ynh_add_nginx_config #================================================= # UPGRADE DEPENDENCIES #================================================= -ynh_print_info "Upgrading dependencies..." +ynh_script_progression --message="Upgrading dependencies..." ynh_install_app_dependencies $pkg_dependencies #================================================= # CREATE DEDICATED USER #================================================= -ynh_print_info "Making sure dedicated system user exists..." +ynh_script_progression --message="Making sure dedicated system user exists..." # Create a dedicated user (if not existing) -ynh_system_user_create $app +ynh_system_user_create --username=$app + #================================================= # PHP-FPM CONFIGURATION #================================================= -ynh_print_info "Upgrading php-fpm configuration..." +ynh_script_progression --message="Upgrading php-fpm configuration..." # Create a dedicated php-fpm config -ynh_add_fpm_config +ynh_add_fpm_config --usage=low --footprint=low --package="$extra_php_dependencies" #================================================= # SETUP LOGROTATE #================================================= -ynh_print_info "Upgrading logrotate configuration..." +ynh_script_progression --message="Upgrading logrotate configuration..." # Use logrotate to manage app-specific logfile(s) # Temporary fix for .txt log file and ynh_use_logrotate @@ -138,37 +153,36 @@ fi ynh_use_logrotate --non-append #================================================= -# SETUP FAIL2BAN +# UPGRADE FAIL2BAN #================================================= -ynh_print_info "Upgrading Fail2Ban configuration..." -ynh_add_fail2ban_config_temp "$final_path/data/log.txt" "\s-\s\s-\sLogin failed for user.*$" 5 +ynh_script_progression --message="Reconfiguring fail2ban..." -# Set right permissions +# Create a dedicated fail2ban config +ynh_add_fail2ban_config --logpath="$final_path/data/log.txt" --failregex="\s-\s\s-\sLogin failed for user.*$" + +# Set right permissions chown -R $app: $final_path #================================================= # SETUP SSOWAT #================================================= -ynh_print_info "Upgrading SSOwat configuration..." +ynh_script_progression --message="Upgrading SSOwat configuration..." # Make app public if necessary if [ $is_public -eq 1 ] then # unprotected_uris allows SSO credentials to be passed anyway - ynh_app_setting_set $app unprotected_uris "/" + ynh_app_setting_set --app=$app --key=unprotected_uris --value="/" fi - #================================================= # RELOAD NGINX #================================================= -ynh_print_info "Reloading nginx web server..." +ynh_script_progression --message="Reloading nginx web server..." -systemctl reload nginx +ynh_systemd_action --service_name=nginx --action=reload #================================================= # END OF SCRIPT #================================================= -ynh_print_info "Upgrade of $app completed" - - +ynh_script_progression --message="Upgrade of $app completed" From 24cb67f5edc959a4c73df2bc4d844c63decfc01b Mon Sep 17 00:00:00 2001 From: ericgaspar Date: Sun, 1 Nov 2020 16:11:39 +0100 Subject: [PATCH 03/35] Update README.md --- README.md | 57 ++++++++++++++++++++++++++++++++++--------------------- 1 file changed, 35 insertions(+), 22 deletions(-) diff --git a/README.md b/README.md index d6acdce..d0bba4f 100644 --- a/README.md +++ b/README.md @@ -1,15 +1,13 @@ -# Shaarli for Yunohost - -[![Integration level](https://dash.yunohost.org/integration/shaarli.svg)](https://dash.yunohost.org/appci/app/shaarli) ![](https://ci-apps.yunohost.org/ci/badges/shaarli.status.svg) ![](https://ci-apps.yunohost.org/ci/badges/shaarli.maintain.svg) +# Shaarli for YunoHost +[![Integration level](https://dash.yunohost.org/integration/shaarli.svg)](https://dash.yunohost.org/appci/app/shaarli) ![](https://ci-apps.yunohost.org/ci/badges/shaarli.status.svg) ![](https://ci-apps.yunohost.org/ci/badges/shaarli.maintain.svg) [![Install Shaarli with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=shaarli) - > *This package allows you to install Shaarli 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 -This app intends to provide Yunohost's users with Shaarli (https://github.com/shaarli/shaarli), personal, minimalist, super-fast, database free, bookmarking service. +[Shaarli](https://github.com/shaarli/Shaarli) intends to provide YunoHost's users with a simple but advanced bookmarking service. **Shipped version:** 0.12.0 @@ -23,37 +21,52 @@ This app intends to provide Yunohost's users with Shaarli (https://github.com/sh * [Official demo](https://demo.shaarli.org/) -## This app claims following features - -- [X] Install / remove scripts -- [X] Backup/restore scripts -- [X] Upgrade Script -- [X] Change url -- [X] Integrate fail2ban for the app - ## Configuration -During the installation app will prompt you to install itself as public or private, if you choose public then anyone (not just Yunohost users) would be able to access your Shaarli instance. +During the installation app will prompt you to install itself as public or private, if you choose public then anyone (not just YunoHost users) would be able to access your Shaarli instance. After the installation is complete, go to the domain where the Shaarli is installed and create your account. After the creation of the account the registration will be locked. +## Documentation + + * Official documentation: https://shaarli.readthedocs.io/en/master/ + * YunoHost documentation: If specific documentation is needed, feel free to contribute. + ## TODO/Limitations - [ ] Integrate the LDAP/SSOWAT authentication - ## Changelog For Shaarli changelog, see: https://github.com/shaarli/Shaarli/blob/master/CHANGELOG.md -## Report a bug - -https://github.com/YunoHost-Apps/shaarli_ynh/issues - -**More info on the documentation page:** -https://yunohost.org/packaging_apps - #### Supported architectures * x86-64 - [![Build Status](https://ci-apps.yunohost.org/ci/logs/shaarli%20%28Apps%29.svg)](https://ci-apps.yunohost.org/ci/apps/shaarli/) * ARMv8-A - [![Build Status](https://ci-apps-arm.yunohost.org/ci/logs/shaarli%20%28Apps%29.svg)](https://ci-apps-arm.yunohost.org/ci/apps/shaarli/) + +## Limitations + +* Any known limitations. + +## Additional information + +## Links + + * Report a bug: https://github.com/YunoHost-Apps/shaarli_ynh/issues + * App website: https://shaarli.readthedocs.io/ + * Upstream app repository: https://github.com/shaarli/Shaarli + * YunoHost website: https://yunohost.org/ + +--- + +## Developer info + +Please send your pull request to the [testing branch](https://github.com/YunoHost-Apps/shaarli_ynh/tree/testing). + +To try the testing branch, please proceed like that. +``` +sudo yunohost app install https://github.com/YunoHost-Apps/shaarli_ynh/tree/testing --debug +or +sudo yunohost app upgrade shaarli -u https://github.com/YunoHost-Apps/shaarli_ynh/tree/testing --debug +``` From 82a0ac54238395e86056cc12f625c1fdf4bb1c98 Mon Sep 17 00:00:00 2001 From: Alexandre Aubin Date: Mon, 9 Nov 2020 16:10:42 +0100 Subject: [PATCH 04/35] rm -r -> ynh_secure_remove (#59) --- scripts/upgrade | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/upgrade b/scripts/upgrade index 56aee13..e8be6f8 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -104,7 +104,7 @@ ynh_print_info "Upgrading source files..." ynh_setup_source "$final_path" cp -a "$tmpdir/data" "${final_path}/" cp -a "$tmpdir/tpl" "${final_path}/" -rm -Rf "$tmpdir" +ynh_secure_remove "$tmpdir" #================================================= # NGINX CONFIGURATION @@ -147,7 +147,7 @@ ynh_script_progression --message="Upgrading logrotate configuration..." # Temporary fix for .txt log file and ynh_use_logrotate if [ -d "$final_path/data/log.txt" ] then - rm -r "$final_path/data/log.txt" + ynh_secure_remove "$final_path/data/log.txt" touch "$final_path/data/log.txt" fi ynh_use_logrotate --non-append From 99f39cfa6f38d0586bfb0a72192080f1bdacdc84 Mon Sep 17 00:00:00 2001 From: lapineige Date: Tue, 10 Nov 2020 20:55:34 +0100 Subject: [PATCH 05/35] Update issue_template.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Éric Gaspar <46165813+ericgaspar@users.noreply.github.com> --- issue_template.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/issue_template.md b/issue_template.md index d93e361..5f91963 100644 --- a/issue_template.md +++ b/issue_template.md @@ -31,7 +31,7 @@ about: When creating a bug report, please use the following template to provide - *If you performed a command from the CLI, the command itself is enough. For example:* ```sh - sudo yunohost app install REPLACEBYYOURAPP + sudo yunohost app install shaarli ``` - *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:* From dd3251ebb979d6ff526ff51f38cdd6853008aeda Mon Sep 17 00:00:00 2001 From: lapineige Date: Tue, 10 Nov 2020 20:56:14 +0100 Subject: [PATCH 06/35] Update openssl dependency MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Éric Gaspar <46165813+ericgaspar@users.noreply.github.com> --- scripts/_common.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/scripts/_common.sh b/scripts/_common.sh index b27aadc..07a6bb1 100644 --- a/scripts/_common.sh +++ b/scripts/_common.sh @@ -6,11 +6,11 @@ # dependencies used by the app YNH_PHP_VERSION="7.3" -# dependencies used by the app -# dependencies used by the app -pkg_dependencies="" -extra_php_dependencies="php${YNH_PHP_VERSION}-cli php${YNH_PHP_VERSION}-gettext php${YNH_PHP_VERSION}-curl php${YNH_PHP_VERSION}-intl php${YNH_PHP_VERSION}-gd php${YNH_PHP_VERSION}-mbstring openssl" +# dependencies used by the app +pkg_dependencies="openssl" + +extra_php_dependencies="php${YNH_PHP_VERSION}-cli php${YNH_PHP_VERSION}-gettext php${YNH_PHP_VERSION}-curl php${YNH_PHP_VERSION}-intl php${YNH_PHP_VERSION}-gd php${YNH_PHP_VERSION}-mbstring" #================================================= From 0999a92d53f3b642eae25361d09fb392ed31dca0 Mon Sep 17 00:00:00 2001 From: ericgaspar Date: Wed, 11 Nov 2020 14:02:45 +0100 Subject: [PATCH 07/35] Update _common.sh - Remove unused script that generates an error - Remove openssl that is part of PHP as default --- scripts/_common.sh | 23 +---------------------- 1 file changed, 1 insertion(+), 22 deletions(-) diff --git a/scripts/_common.sh b/scripts/_common.sh index 07a6bb1..61ca47e 100644 --- a/scripts/_common.sh +++ b/scripts/_common.sh @@ -8,11 +8,10 @@ YNH_PHP_VERSION="7.3" # dependencies used by the app -pkg_dependencies="openssl" +pkg_dependencies="" extra_php_dependencies="php${YNH_PHP_VERSION}-cli php${YNH_PHP_VERSION}-gettext php${YNH_PHP_VERSION}-curl php${YNH_PHP_VERSION}-intl php${YNH_PHP_VERSION}-gd php${YNH_PHP_VERSION}-mbstring" - #================================================= # PERSONAL HELPERS #================================================= @@ -24,23 +23,3 @@ extra_php_dependencies="php${YNH_PHP_VERSION}-cli php${YNH_PHP_VERSION}-gettext #================================================= # FUTURE OFFICIAL HELPERS #================================================= - # Check if there's enough free space in a directory - is_there_enough_space () { - local free_space=$(df --output=avail "$1" | sed 1d) - test $free_space -ge $min_size - } - - if is_there_enough_space /tmp; then - local tmpdir=/tmp - elif is_there_enough_space /var; then - local tmpdir=/var - elif is_there_enough_space /; then - local tmpdir=/ - elif is_there_enough_space /home; then - local tmpdir=/home - else - ynh_die "Insufficient free space to continue..." - fi - - echo "$(mktemp --directory --tmpdir="$tmpdir")" -} From 03225c748a41ecceec8b5f95aa7b4487158a3917 Mon Sep 17 00:00:00 2001 From: ericgaspar Date: Wed, 11 Nov 2020 14:06:42 +0100 Subject: [PATCH 08/35] Cleaning up --- conf/nginx.conf | 6 ++---- manifest.json | 4 ++-- scripts/backup | 7 +------ scripts/change_url | 8 +------- scripts/install | 48 +--------------------------------------------- scripts/remove | 3 +-- scripts/restore | 2 -- scripts/upgrade | 16 ---------------- 8 files changed, 8 insertions(+), 86 deletions(-) diff --git a/conf/nginx.conf b/conf/nginx.conf index b457260..f9ce2b6 100644 --- a/conf/nginx.conf +++ b/conf/nginx.conf @@ -8,13 +8,13 @@ location __PATH__/ { if ($scheme = http) { rewrite ^ https://$server_name$request_uri? permanent; } -### Example PHP configuration (remove it if not used) + index index.php; if (!-f $request_filename) { rewrite ^ __PATH__/index.php last; } -# Common parameter to increase upload size limit in conjunction with dedicated php-fpm file + # Common parameter to increase upload size limit in conjunction with dedicated php-fpm file client_max_body_size 50M; try_files $uri $uri/ index.php$is_args$args; @@ -29,8 +29,6 @@ location __PATH__/ { fastcgi_param SCRIPT_FILENAME $request_filename; } -### End of PHP configuration part - # Include SSOWAT user panel. include conf.d/yunohost_panel.conf.inc; } diff --git a/manifest.json b/manifest.json index 2c8dca0..31e7981 100644 --- a/manifest.json +++ b/manifest.json @@ -47,7 +47,7 @@ "name": "is_public", "type": "boolean", "ask": { - "en": "Is it a public Shaarli site ?", + "en": "Is it a public Shaarli site?", "fr": "Est-ce un site Shaarli public ?" }, "help": { @@ -55,7 +55,7 @@ "fr": "Si configuré en public, Shaarli sera visible par tout le monde, y compris des personnes sans compte sur votre Yunohost. Cependant seules les personnes avec un compte Shaarli pourrons ajouter des marques-pages. Activer la visibilité publique si vous voulez que les gens voient vos marques-pages (publiques)." }, "default": false - } + } ] } } diff --git a/scripts/backup b/scripts/backup index a5d2459..03a7f71 100644 --- a/scripts/backup +++ b/scripts/backup @@ -28,7 +28,6 @@ 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) phpversion=$(ynh_app_setting_get --app=$app --key=phpversion) @@ -38,16 +37,12 @@ phpversion=$(ynh_app_setting_get --app=$app --key=phpversion) #================================================= ynh_print_info --message="Declaring files to be backed up..." -### N.B. : the following 'ynh_backup' calls are only a *declaration* of what needs -### to be backuped and not an actual copy of any file. The actual backup that -### creates and fill the archive with the files happens in the core after this -### script is called. Hence ynh_backups calls takes basically 0 seconds to run. - #================================================= # BACKUP THE APP MAIN DIR #================================================= ynh_backup --src_path="$final_path" + #================================================= # BACKUP THE NGINX CONFIGURATION #================================================= diff --git a/scripts/change_url b/scripts/change_url index 9931551..2fa5a05 100644 --- a/scripts/change_url +++ b/scripts/change_url @@ -29,11 +29,6 @@ ynh_script_progression --message="Loading installation settings..." --time --wei # Needed for helper "ynh_add_nginx_config" final_path=$(ynh_app_setting_get --app=$app --key=final_path) -# Add settings here as needed by your application -#db_name=$(ynh_app_setting_get --app=$app --key=db_name) -#db_user=$db_name -#db_pwd=$(ynh_app_setting_get --app=$app --key=db_pwd) - #================================================= # BACKUP BEFORE UPGRADE THEN ACTIVE TRAP #================================================= @@ -67,7 +62,6 @@ then change_path=1 fi - #================================================= # STANDARD MODIFICATIONS #================================================= @@ -110,4 +104,4 @@ ynh_systemd_action --service_name=nginx --action=reload # END OF SCRIPT #================================================= -ynh_script_progression --message="Change of URL completed for $app" \ No newline at end of file +ynh_script_progression --message="Change of URL completed for $app" diff --git a/scripts/install b/scripts/install index 2142514..5870c7a 100644 --- a/scripts/install +++ b/scripts/install @@ -20,7 +20,6 @@ ynh_clean_setup () { # Exit if an error occurs during the execution of the script ynh_abort_if_errors - #================================================= # RETRIEVE ARGUMENTS FROM THE MANIFEST #================================================= @@ -28,16 +27,6 @@ domain=$YNH_APP_ARG_DOMAIN path_url=$YNH_APP_ARG_PATH is_public=$YNH_APP_ARG_IS_PUBLIC -### If it's a multi-instance app, meaning it can be installed several times independently -### The id of the app as stated in the manifest is available as $YNH_APP_ID -### The instance number is available as $YNH_APP_INSTANCE_NUMBER (equals "1", "2", ...) -### The app instance name is available as $YNH_APP_INSTANCE_NAME -### - the first time the app is installed, YNH_APP_INSTANCE_NAME = ynhexample -### - the second time the app is installed, YNH_APP_INSTANCE_NAME = ynhexample__2 -### - ynhexample__{N} for the subsequent installations, with N=3,4, ... -### The app instance name is probably what interests you most, since this is -### guaranteed to be unique. This is a good unique identifier to define installation path, -### db names, ... app=$YNH_APP_INSTANCE_NAME #================================================= @@ -45,15 +34,12 @@ app=$YNH_APP_INSTANCE_NAME #================================================= ynh_script_progression --message="Validating installation parameters..." -### If the app uses nginx as web server (written in HTML/PHP in most cases), the final path should be "/var/www/$app". -### If the app provides an internal web server (or uses another application server such as uwsgi), the final path should be "/opt/yunohost/$app" 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 - #================================================= # STORE SETTINGS FROM MANIFEST #================================================= @@ -63,29 +49,17 @@ 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=is_public --value=$is_public - #================================================= # INSTALL DEPENDENCIES #================================================= ynh_script_progression --message="Installing dependencies..." -### `ynh_install_app_dependencies` allows you to add any "apt" dependencies to the package. -### Those deb packages will be installed as dependencies of this package. -### If you're not using this helper: -### - Remove the section "REMOVE DEPENDENCIES" in the remove script -### - Remove the variable "pkg_dependencies" in _common.sh -### - As well as the section "REINSTALL DEPENDENCIES" in the restore script -### - And the section "UPGRADE DEPENDENCIES" in the upgrade script - ynh_install_app_dependencies $pkg_dependencies #================================================= # DOWNLOAD, CHECK AND UNPACK SOURCE #================================================= ynh_script_progression --message="Setting up source files..." -### `ynh_setup_source` is used to install an app from a zip or tar.gz file, -### downloaded from an upstream source, like a git repository. -### `ynh_setup_source` use the file conf/app.src ynh_app_setting_set --app=$app --key=final_path --value=$final_path # Download, check integrity, uncompress and patch the source from app.src @@ -96,8 +70,6 @@ ynh_setup_source --dest_dir="$final_path" #================================================= ynh_script_progression --message="Configuring nginx web server..." -### `ynh_add_nginx_config` will use the file conf/nginx.conf - # Create a dedicated nginx config ynh_add_nginx_config @@ -113,17 +85,6 @@ ynh_system_user_create --username=$app #================================================= ynh_print_info "Configuring php-fpm..." -### `ynh_add_fpm_config` is used to set up a PHP config. -### You can remove it if your app doesn't use PHP. -### `ynh_add_fpm_config` will use the files conf/php-fpm.conf and conf/php-fpm.ini -### If you're not using these lines: -### - You can remove these files in conf/. -### - Remove the section "BACKUP THE PHP-FPM CONFIGURATION" in the backup script -### - Remove also the section "REMOVE PHP-FPM CONFIGURATION" in the remove script -### - As well as the section "RESTORE THE PHP-FPM CONFIGURATION" in the restore script -### With the reload at the end of the script. -### - And the section "PHP-FPM CONFIGURATION" in the upgrade script - # Create a dedicated php-fpm config ynh_add_fpm_config --usage=low --footprint=low --package="$extra_php_dependencies" @@ -132,14 +93,6 @@ ynh_add_fpm_config --usage=low --footprint=low --package="$extra_php_dependencie #================================================= ynh_script_progression --message="Configuring log rotation..." -### `ynh_use_logrotate` is used to configure a logrotate configuration for the logs of this app. -### Use this helper only if there is effectively a log file for this app. -### If you're not using this helper: -### - Remove the section "BACKUP LOGROTATE" in the backup script -### - Remove also the section "REMOVE LOGROTATE CONFIGURATION" in the remove script -### - As well as the section "RESTORE THE LOGROTATE CONFIGURATION" in the restore script -### - And the section "SETUP LOGROTATE" in the upgrade script - # Use logrotate to manage application logfile(s) touch "$final_path/data/log.txt" ynh_use_logrotate "$final_path/data/log.txt" @@ -177,6 +130,7 @@ then # unprotected_uris allows SSO credentials to be passed anyway. ynh_app_setting_set --app=$app --key=unprotected_uris --value="/" fi + #================================================= # RELOAD NGINX #================================================= diff --git a/scripts/remove b/scripts/remove index 67beaeb..f0c13e7 100644 --- a/scripts/remove +++ b/scripts/remove @@ -19,7 +19,6 @@ app=$YNH_APP_INSTANCE_NAME domain=$(ynh_app_setting_get --app=$app --key=domain) final_path=$(ynh_app_setting_get --app=$app --key=final_path) - #================================================= # REMOVE DEPENDENCIES #================================================= @@ -82,4 +81,4 @@ ynh_system_user_delete --username=$app # END OF SCRIPT #================================================= -ynh_script_progression --message="Removal of $app completed" \ No newline at end of file +ynh_script_progression --message="Removal of $app completed" diff --git a/scripts/restore b/scripts/restore index 3e346d2..a108913 100644 --- a/scripts/restore +++ b/scripts/restore @@ -33,7 +33,6 @@ path_url=$(ynh_app_setting_get --app=$app --key=path) final_path=$(ynh_app_setting_get --app=$app --key=final_path) phpversion=$(ynh_app_setting_get --app=$app --key=phpversion) - #================================================= # CHECK IF THE APP CAN BE RESTORED #================================================= @@ -67,7 +66,6 @@ ynh_script_progression --message="Recreating the dedicated system user..." # Create the dedicated user (if not existing) ynh_system_user_create --username=$app - #================================================= # RESTORE USER RIGHTS #================================================= diff --git a/scripts/upgrade b/scripts/upgrade index e8be6f8..1daf646 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -41,7 +41,6 @@ if [ -z "$final_path" ]; then ynh_app_setting_set --app=$app --key=final_path --value=$final_path fi - #================================================= # BACKUP BEFORE UPGRADE THEN ACTIVE TRAP #================================================= @@ -56,20 +55,6 @@ ynh_clean_setup () { # Exit if an error occurs during the execution of the script ynh_abort_if_errors - - -#================================================= -# CHECK THE PATH -#================================================= - -# Normalize the URL path syntax -# N.B. : this is for app installations before YunoHost 2.7 -# where this value might be something like /foo/ or foo/ -# instead of /foo .... -# If nobody installed your app before 2.7, then you may -# safely remove this line -path_url=$(ynh_normalize_url_path --path_url=$path_url) - #================================================= # DOWNLOAD, CHECK AND UNPACK SOURCE #================================================= @@ -129,7 +114,6 @@ ynh_script_progression --message="Making sure dedicated system user exists..." # Create a dedicated user (if not existing) ynh_system_user_create --username=$app - #================================================= # PHP-FPM CONFIGURATION #================================================= From ed6392e0449388aa5bee869ae9bd97e2dfb3afae Mon Sep 17 00:00:00 2001 From: ericgaspar Date: Tue, 24 Nov 2020 16:08:48 +0100 Subject: [PATCH 09/35] Fix linter warnings --- scripts/restore | 2 +- scripts/upgrade | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/restore b/scripts/restore index a108913..964d81b 100644 --- a/scripts/restore +++ b/scripts/restore @@ -36,7 +36,7 @@ phpversion=$(ynh_app_setting_get --app=$app --key=phpversion) #================================================= # CHECK IF THE APP CAN BE RESTORED #================================================= -ynh_script_progression --message="Validating restoration parameters..." --time --weight=1 +ynh_script_progression --message="Validating restoration parameters..." ynh_webpath_available --domain=$domain --path_url=$path_url \ || ynh_die --message="Path not available: ${domain}${path_url}" diff --git a/scripts/upgrade b/scripts/upgrade index 1daf646..f2ade2f 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -61,7 +61,7 @@ ynh_abort_if_errors if [ "$upgrade_type" == "UPGRADE_APP" ] then - ynh_script_progression --message="Upgrading source files..." --time --weight=1 + ynh_script_progression --message="Upgrading source files..." # Download, check integrity, uncompress and patch the source from app.src ynh_setup_source --dest_dir="$final_path" From 45640ae3444b7b7c07bd2325b8a65e17c975151e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89ric=20Gaspar?= <46165813+ericgaspar@users.noreply.github.com> Date: Tue, 24 Nov 2020 18:00:33 +0100 Subject: [PATCH 10/35] Small typos (#60) --- issue_template.md | 6 +++--- manifest.json | 2 +- scripts/change_url | 18 +++++++++--------- scripts/install | 14 +++++++------- scripts/remove | 10 +++++----- scripts/restore | 4 ++-- scripts/upgrade | 10 +++++----- 7 files changed, 32 insertions(+), 32 deletions(-) diff --git a/issue_template.md b/issue_template.md index 5f91963..e2fca72 100644 --- a/issue_template.md +++ b/issue_template.md @@ -7,7 +7,7 @@ about: When creating a bug report, please use the following template to provide **How to post a meaningful bug report** 1. *Read this whole template first.* 2. *Make sure 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!* + - *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.* - *In doubt, ask here and we will figure it out together.* 3. *Delete these italic comments as you write over them below, and remove this guide.* @@ -36,8 +36,8 @@ about: When creating a bug report, please use the following template to provide - *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 '....'* + 2. *Click on '...'* + 3. *Scroll down to '...'* 4. *See error* ### Expected behavior diff --git a/manifest.json b/manifest.json index 31e7981..7824063 100644 --- a/manifest.json +++ b/manifest.json @@ -3,7 +3,7 @@ "id": "shaarli", "packaging_format": 1, "requirements": { - "yunohost": ">= 3.6.5" + "yunohost": ">= 3.8.1" }, "description": { "en": "The personal, minimalist, super-fast, no-database delicious clone", diff --git a/scripts/change_url b/scripts/change_url index 2fa5a05..3a9a321 100644 --- a/scripts/change_url +++ b/scripts/change_url @@ -24,7 +24,7 @@ app=$YNH_APP_INSTANCE_NAME #================================================= # LOAD SETTINGS #================================================= -ynh_script_progression --message="Loading installation settings..." --time --weight=1 +ynh_script_progression --message="Loading installation settings..." # Needed for helper "ynh_add_nginx_config" final_path=$(ynh_app_setting_get --app=$app --key=final_path) @@ -32,7 +32,7 @@ final_path=$(ynh_app_setting_get --app=$app --key=final_path) #================================================= # BACKUP BEFORE UPGRADE THEN ACTIVE TRAP #================================================= -ynh_script_progression --message="Backing up the app before changing its url (may take a while)..." --time --weight=1 +ynh_script_progression --message="Backing up the app before changing its URL (may take a while)..." # Backup the current version of the app ynh_backup_before_upgrade @@ -67,23 +67,23 @@ fi #================================================= # MODIFY URL IN NGINX CONF #================================================= -ynh_script_progression --message="Updating nginx web server configuration..." +ynh_script_progression --message="Updating NGINX web server configuration..." nginx_conf_path=/etc/nginx/conf.d/$old_domain.d/$app.conf -# Change the path in the nginx config file +# Change the path in the NGINX config file if [ $change_path -eq 1 ] then - # Make a backup of the original nginx config file if modified + # Make a backup of the original NGINX config file if modified ynh_backup_if_checksum_is_different --file="$nginx_conf_path" - # Set global variables for nginx helper + # Set global variables for NGINX helper domain="$old_domain" path_url="$new_path" - # Create a dedicated nginx config + # Create a dedicated NGINX config ynh_add_nginx_config fi -# Change the domain for nginx +# Change the domain for NGINX if [ $change_domain -eq 1 ] then # Delete file checksum for the old conf file location @@ -96,7 +96,7 @@ fi #================================================= # RELOAD NGINX #================================================= -ynh_script_progression --message="Reloading nginx web server..." +ynh_script_progression --message="Reloading NGINX web server..." ynh_systemd_action --service_name=nginx --action=reload diff --git a/scripts/install b/scripts/install index 5870c7a..df562b6 100644 --- a/scripts/install +++ b/scripts/install @@ -68,9 +68,9 @@ ynh_setup_source --dest_dir="$final_path" #================================================= # NGINX CONFIGURATION #================================================= -ynh_script_progression --message="Configuring nginx web server..." +ynh_script_progression --message="Configuring NGINX web server..." -# Create a dedicated nginx config +# Create a dedicated NGINX config ynh_add_nginx_config #================================================= @@ -83,9 +83,9 @@ ynh_system_user_create --username=$app #================================================= # PHP-FPM CONFIGURATION #================================================= -ynh_print_info "Configuring php-fpm..." +ynh_print_info "Configuring PHP-FPM..." -# Create a dedicated php-fpm config +# Create a dedicated PHP-FPM config ynh_add_fpm_config --usage=low --footprint=low --package="$extra_php_dependencies" #================================================= @@ -113,9 +113,9 @@ chown -R $app: $final_path #================================================= # SETUP FAIL2BAN #================================================= -ynh_script_progression --message="Configuring fail2ban..." +ynh_script_progression --message="Configuring Fail2Ban..." -# Create a dedicated fail2ban config +# Create a dedicated Fail2Ban config ynh_add_fail2ban_config --logpath="$final_path/data/log.txt" --failregex="\s-\s\s-\sLogin failed for user.*$" @@ -134,7 +134,7 @@ fi #================================================= # RELOAD NGINX #================================================= -ynh_script_progression --message="Reloading nginx web server..." +ynh_script_progression --message="Reloading NGINX web server..." ynh_systemd_action --service_name=nginx --action=reload diff --git a/scripts/remove b/scripts/remove index f0c13e7..7e5cbaa 100644 --- a/scripts/remove +++ b/scripts/remove @@ -38,17 +38,17 @@ ynh_secure_remove --file="$final_path" #================================================= # REMOVE NGINX CONFIGURATION #================================================= -ynh_script_progression --message="Removing nginx web server configuration..." +ynh_script_progression --message="Removing NGINX web server configuration..." -# Remove the dedicated nginx config +# Remove the dedicated NGINX config ynh_remove_nginx_config #================================================= # REMOVE PHP-FPM CONFIGURATION #================================================= -ynh_script_progression --message="Removing 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 #================================================= @@ -62,7 +62,7 @@ ynh_remove_logrotate #================================================= # REMOVE FAIL2BAN CONFIGURATION #================================================= -ynh_script_progression --message="Removing fail2ban configuration..." +ynh_script_progression --message="Removing Fail2Ban configuration..." # Remove the dedicated fail2ban config ynh_remove_fail2ban_config diff --git a/scripts/restore b/scripts/restore index 964d81b..6ecd4dd 100644 --- a/scripts/restore +++ b/scripts/restore @@ -98,7 +98,7 @@ ynh_restore_file --origin_path="/etc/logrotate.d/$app" #================================================= # RESTORE FAIL2BAN CONFIGURATION #================================================= -ynh_script_progression --message="Restoring the 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" @@ -109,7 +109,7 @@ ynh_systemd_action --action=restart --service_name=fail2ban #================================================= # RELOAD NGINX AND PHP-FPM #================================================= -ynh_script_progression --message="Reloading nginx web server and php-fpm..." +ynh_script_progression --message="Reloading NGINX web server and PHP-FPM..." ynh_systemd_action --service_name=php$phpversion-fpm --action=reload ynh_systemd_action --service_name=nginx --action=reload diff --git a/scripts/upgrade b/scripts/upgrade index f2ade2f..c745b06 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -94,9 +94,9 @@ ynh_secure_remove "$tmpdir" #================================================= # NGINX CONFIGURATION #================================================= -ynh_script_progression --message="Upgrading nginx web server configuration..." +ynh_script_progression --message="Upgrading NGINX web server configuration..." -# Create a dedicated nginx config +# Create a dedicated NGINX config ynh_add_nginx_config #================================================= @@ -117,7 +117,7 @@ ynh_system_user_create --username=$app #================================================= # PHP-FPM CONFIGURATION #================================================= -ynh_script_progression --message="Upgrading php-fpm configuration..." +ynh_script_progression --message="Upgrading PHP-FPM configuration..." # Create a dedicated php-fpm config ynh_add_fpm_config --usage=low --footprint=low --package="$extra_php_dependencies" @@ -139,7 +139,7 @@ ynh_use_logrotate --non-append #================================================= # UPGRADE FAIL2BAN #================================================= -ynh_script_progression --message="Reconfiguring fail2ban..." +ynh_script_progression --message="Reconfiguring Fail2Ban..." # Create a dedicated fail2ban config ynh_add_fail2ban_config --logpath="$final_path/data/log.txt" --failregex="\s-\s\s-\sLogin failed for user.*$" @@ -161,7 +161,7 @@ fi #================================================= # RELOAD NGINX #================================================= -ynh_script_progression --message="Reloading nginx web server..." +ynh_script_progression --message="Reloading NGINX web server..." ynh_systemd_action --service_name=nginx --action=reload From 837c3942e750d42aec2452d08144f0ef12f4551b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89ric=20Gaspar?= <46165813+ericgaspar@users.noreply.github.com> Date: Tue, 24 Nov 2020 19:35:51 +0100 Subject: [PATCH 11/35] Patch2 (#61) - Fix NGINX 302 redirect - Fix missing upgrade_type in upgrade script - Add ynh_smart_mktemp helper --- conf/nginx.conf | 20 +++++++------------- scripts/_common.sh | 37 +++++++++++++++++++++++++++++++++++++ scripts/upgrade | 6 ++++++ 3 files changed, 50 insertions(+), 13 deletions(-) diff --git a/conf/nginx.conf b/conf/nginx.conf index f9ce2b6..f8ed873 100644 --- a/conf/nginx.conf +++ b/conf/nginx.conf @@ -4,29 +4,23 @@ location __PATH__/ { # Path to source alias __FINALPATH__/ ; - # Force usage of https + # Force usage of https if ($scheme = http) { rewrite ^ https://$server_name$request_uri? permanent; } - index index.php; - if (!-f $request_filename) { - rewrite ^ __PATH__/index.php last; - } + index index.html index.php; - # Common parameter to increase upload size limit in conjunction with dedicated php-fpm file - client_max_body_size 50M; - try_files $uri $uri/ index.php$is_args$args; + try_files $uri $uri/ /index.php?q=$uri&$args; location ~ [^/]\.php(/|$) { fastcgi_split_path_info ^(.+?\.php)(/.*)$; fastcgi_pass unix:/var/run/php/php__PHPVERSION__-fpm-__NAME__.sock; - fastcgi_index index.php; - include fastcgi_params; - fastcgi_param REMOTE_USER $remote_user; - fastcgi_param PATH_INFO $fastcgi_path_info; - fastcgi_param SCRIPT_FILENAME $request_filename; + fastcgi_index index.php; + fastcgi_param REMOTE_USER $remote_user; + fastcgi_param PATH_INFO $fastcgi_path_info; + include fastcgi_params; } # Include SSOWAT user panel. diff --git a/scripts/_common.sh b/scripts/_common.sh index 61ca47e..52200fa 100644 --- a/scripts/_common.sh +++ b/scripts/_common.sh @@ -20,6 +20,43 @@ extra_php_dependencies="php${YNH_PHP_VERSION}-cli php${YNH_PHP_VERSION}-gettext # EXPERIMENTAL HELPERS #================================================= +# Check available space before creating a temp directory. +# +# usage: ynh_smart_mktemp --min_size="Min size" +# +# | arg: -s, --min_size= - Minimal size needed for the temporary directory, in Mb +ynh_smart_mktemp () { + # Declare an array to define the options of this helper. + declare -Ar args_array=( [s]=min_size= ) + local min_size + # Manage arguments with getopts + ynh_handle_getopts_args "$@" + + min_size="${min_size:-300}" + # Transform the minimum size from megabytes to kilobytes + min_size=$(( $min_size * 1024 )) + + # Check if there's enough free space in a directory + is_there_enough_space () { + local free_space=$(df --output=avail "$1" | sed 1d) + test $free_space -ge $min_size + } + + if is_there_enough_space /tmp; then + local tmpdir=/tmp + elif is_there_enough_space /var; then + local tmpdir=/var + elif is_there_enough_space /; then + local tmpdir=/ + elif is_there_enough_space /home; then + local tmpdir=/home + else + ynh_die "Insufficient free space to continue..." + fi + + echo "$(mktemp --directory --tmpdir="$tmpdir")" +} + #================================================= # FUTURE OFFICIAL HELPERS #================================================= diff --git a/scripts/upgrade b/scripts/upgrade index c745b06..25bb381 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -21,6 +21,12 @@ path_url=$(ynh_app_setting_get --app=$app --key=path) is_public=$(ynh_app_setting_get --app=$app --key=is_public) final_path=$(ynh_app_setting_get --app=$app --key=final_path) +#================================================= +# CHECK VERSION +#================================================= + +upgrade_type=$(ynh_check_app_version_changed) + #================================================= # ENSURE DOWNWARD COMPATIBILITY #================================================= From a5a5ea5e646318c190da68935a4d973d1840d262 Mon Sep 17 00:00:00 2001 From: tituspijean Date: Tue, 24 Nov 2020 23:40:11 +0100 Subject: [PATCH 12/35] Fix NGINX --- conf/nginx.conf | 18 +++++++++--------- scripts/install | 7 +++++++ scripts/upgrade | 7 +++++++ 3 files changed, 23 insertions(+), 9 deletions(-) diff --git a/conf/nginx.conf b/conf/nginx.conf index f8ed873..63531b1 100644 --- a/conf/nginx.conf +++ b/conf/nginx.conf @@ -9,18 +9,18 @@ location __PATH__/ { rewrite ^ https://$server_name$request_uri? permanent; } - index index.html index.php; + index index.php; - try_files $uri $uri/ /index.php?q=$uri&$args; + try_files $uri $uri/ __PATH_HACK__/index.php$is_args$args; location ~ [^/]\.php(/|$) { - fastcgi_split_path_info ^(.+?\.php)(/.*)$; - fastcgi_pass unix:/var/run/php/php__PHPVERSION__-fpm-__NAME__.sock; - - fastcgi_index index.php; - fastcgi_param REMOTE_USER $remote_user; - fastcgi_param PATH_INFO $fastcgi_path_info; - include fastcgi_params; + fastcgi_split_path_info ^(.+?\.php)(/.*)$; + fastcgi_pass unix:/var/run/php/php__PHPVERSION__-fpm-__NAME__.sock; + fastcgi_index index.php; + include fastcgi_params; + fastcgi_param REMOTE_USER $remote_user; + fastcgi_param PATH_INFO $fastcgi_path_info; + fastcgi_param SCRIPT_FILENAME $request_filename; } # Include SSOWAT user panel. diff --git a/scripts/install b/scripts/install index df562b6..f519fec 100644 --- a/scripts/install +++ b/scripts/install @@ -70,6 +70,13 @@ ynh_setup_source --dest_dir="$final_path" #================================================= ynh_script_progression --message="Configuring NGINX web server..." +# Bug in Nginx with locations and aliases (see http://stackoverflow.com/a/35102259 ) +if [ $path_url = "/" ]; then + ynh_replace_string "__PATH_HACK__" "" "../conf/nginx.conf" +else + ynh_replace_string "__PATH_HACK__" "$path_url/$path_url" "../conf/nginx.conf" +fi + # Create a dedicated NGINX config ynh_add_nginx_config diff --git a/scripts/upgrade b/scripts/upgrade index 25bb381..b36efd3 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -102,6 +102,13 @@ ynh_secure_remove "$tmpdir" #================================================= ynh_script_progression --message="Upgrading NGINX web server configuration..." +# Bug in Nginx with locations and aliases (see http://stackoverflow.com/a/35102259 ) +if [ $path_url = "/" ]; then + ynh_replace_string "__PATH_HACK__" "" "../conf/nginx.conf" +else + ynh_replace_string "__PATH_HACK__" "$path_url/$path_url" "../conf/nginx.conf" +fi + # Create a dedicated NGINX config ynh_add_nginx_config From eb7843947bc0dda8b1bf5a3d207b4170152676b1 Mon Sep 17 00:00:00 2001 From: tituspijean Date: Wed, 25 Nov 2020 10:34:14 +0100 Subject: [PATCH 13/35] Re-implement automatic post-installation --- conf/config.json.php | 48 ++++++++++----- manifest.json | 34 ++++++++++- scripts/_common.sh | 140 +++++++++++++++++++++++++++++++++++++++++++ scripts/install | 31 ++++++++++ 4 files changed, 235 insertions(+), 18 deletions(-) diff --git a/conf/config.json.php b/conf/config.json.php index 69a0604..409d272 100644 --- a/conf/config.json.php +++ b/conf/config.json.php @@ -8,7 +8,9 @@ "updates": "data\/updates.txt", "log": "data\/log.txt", "update_check": "data\/lastupdatecheck.txt", + "history": "data\/history.php", "raintpl_tpl": "tpl\/", + "theme": "default", "raintpl_tmp": "tmp\/", "thumbnails_cache": "cache", "page_cache": "pagecache" @@ -17,7 +19,12 @@ "ban_after": 4, "ban_duration": 1800, "session_protection_disabled": false, - "open_shaarli": false + "open_shaarli": false, + "allowed_protocols": [ + "ftp", + "ftps", + "magnet" + ] }, "general": { "header_link": "?", @@ -25,8 +32,10 @@ "enabled_plugins": [ "qrcode" ], - "timezone": "YNH_TIMEZONE", - "title": "YNH_TITLE" + "default_note_title": "Note: ", + "retrieve_description": false, + "timezone": "__TIMEZONE__", + "title": "__TITLE__" }, "updates": { "check_updates": true, @@ -35,26 +44,35 @@ }, "feed": { "rss_permalinks": true, - "show_atom": false + "show_atom": true }, "privacy": { - "default_private_links": YNH_PRIVATE_LINK_BY_DEFAULT, + "default_private_links": __DEFAULT_PRIVATE_LINKS__, "hide_public_links": false, - "hide_timestamps": false + "force_login": false, + "hide_timestamps": false, + "remember_user_default": true }, - "thumbnail": { - "enable_thumbnails": true, - "enable_localcache": true + "thumbnails": { + "mode": "all", + "width": "125", + "height": "90" }, - "redirector": { - "url": "", - "encode_url": true + "translation": { + "language": "auto", + "mode": "php", + "extensions": [] }, "plugins": [], + "formatter": "markdown", "credentials": { - "login": "YNH_ADMIN", - "salt": "YNH_SALT", - "hash": "YNH_HASH" + "login": "__ADMIN__", + "salt": "__SALT__", + "hash": "__HASH__" + }, + "api": { + "enabled": true, + "secret": "__SECRET__" } } */ ?> diff --git a/manifest.json b/manifest.json index 7824063..721895d 100644 --- a/manifest.json +++ b/manifest.json @@ -43,6 +43,34 @@ "example": "/shaarli", "default": "/shaarli" }, + { + "name": "admin", + "type": "user", + "ask": { + "en": "Choose the admin user", + "fr": "Choisissez l’administrateur" + }, + "example": "johndoe" + }, + { + "name": "password", + "type": "password", + "ask": { + "en": "Choose the admin password", + "fr": "Choisissez le mot de passe de l’administrateur" + }, + "example": "johndoe" + }, + { + "name": "title", + "type": "string", + "ask": { + "en": "Choose a title for your Shaarli instance", + "fr": "Choisissez un titre pour votre instance Shaarli" + }, + "example": "Shaarli", + "default": "Shaarli" + }, { "name": "is_public", "type": "boolean", @@ -51,11 +79,11 @@ "fr": "Est-ce un site Shaarli public ?" }, "help": { - "en": "If set as public, Shaarli will be visible to anyone, including non-Yunohost users. However only Shaarli users can add bookmarks. Set this to public if you want people to see your (public) bookmarks", - "fr": "Si configuré en public, Shaarli sera visible par tout le monde, y compris des personnes sans compte sur votre Yunohost. Cependant seules les personnes avec un compte Shaarli pourrons ajouter des marques-pages. Activer la visibilité publique si vous voulez que les gens voient vos marques-pages (publiques)." + "en": "If set as public, Shaarli will be visible to anyone, including non-Yunohost users. However only Shaarli users can add bookmarks. Your links will be public by default, but you can change that in Shaarli's configuration page.", + "fr": "Si configuré en public, Shaarli sera visible par tout le monde, y compris des personnes sans compte sur votre Yunohost. Cependant seules les personnes avec un compte Shaarli pourrons ajouter des marques-pages. Vos nouveaux liens seront publics par défaut, mais vous pourrez changer ça dans la page de configuration de Shaarli." }, "default": false - } + } ] } } diff --git a/scripts/_common.sh b/scripts/_common.sh index 52200fa..7dd75f7 100644 --- a/scripts/_common.sh +++ b/scripts/_common.sh @@ -57,6 +57,146 @@ ynh_smart_mktemp () { echo "$(mktemp --directory --tmpdir="$tmpdir")" } +# Create a dedicated config file from a template +# +# examples: +# ynh_add_config --template=".env" --destination="$final_path/.env" +# ynh_add_config --template="../conf/.env" --destination="$final_path/.env" +# ynh_add_config --template="/etc/nginx/sites-available/default" --destination="etc/nginx/sites-available/mydomain.conf" +# +# usage: ynh_add_config --template="template" --destination="destination" +# | arg: -t, --template= - Template config file to use +# | arg: -d, --destination= - Destination of the config file +# +# The template can be by default the name of a file in the conf directory +# of a YunoHost Package, a relative path or an absolute path +# The helper will use the template $template to generate a config file +# $destination by replacing the following keywords with global variables +# that should be defined before calling this helper : +# __PATH__ by $path_url +# __NAME__ by $app +# __NAMETOCHANGE__ by $app +# __USER__ by $app +# __FINALPATH__ by $final_path +# __PHPVERSION__ by $YNH_PHP_VERSION +# +# And any dynamic variables that should be defined before calling this helper like: +# __DOMAIN__ by $domain +# __APP__ by $app +# __VAR_1__ by $var_1 +# __VAR_2__ by $var_2 +# +# The helper will verify the checksum and backup the destination file +# if it's different before applying the new template. +# And it will calculate and store the destination file checksum +# into the app settings when configuration is done. +# +# +ynh_add_config () { + # Declare an array to define the options of this helper. + local legacy_args=tdv + local -A args_array=( [t]=template= [d]=destination= ) + local template + local destination + # Manage arguments with getopts + ynh_handle_getopts_args "$@" + local template_path + + if [ -f "../conf/$template" ]; then + template_path="../conf/$template" + elif [ -f "../settings/conf/$template" ]; then + template_path="../settings/conf/$template" + elif [ -f "$template" ]; then + template_path=$template + else + ynh_die --message="The provided template $template doesn't exist" + fi + + ynh_backup_if_checksum_is_different --file="$destination" + + cp "$template_path" "$destination" + + ynh_replace_vars --file="$destination" + + ynh_store_file_checksum --file="$destination" +} + +# Replace variables in a file +# +# usage: ynh_replace_vars --file="file" +# | arg: -f, --file= - File where to replace variables +# +# The helper will replace the following keywords with global variables +# that should be defined before calling this helper : +# __PATH__ by $path_url +# __NAME__ by $app +# __NAMETOCHANGE__ by $app +# __USER__ by $app +# __FINALPATH__ by $final_path +# __PHPVERSION__ by $YNH_PHP_VERSION +# +# And any dynamic variables that should be defined before calling this helper like: +# __DOMAIN__ by $domain +# __APP__ by $app +# __VAR_1__ by $var_1 +# __VAR_2__ by $var_2 +# +# +ynh_replace_vars () { + # Declare an array to define the options of this helper. + local legacy_args=f + local -A args_array=( [f]=file= ) + local file + # Manage arguments with getopts + ynh_handle_getopts_args "$@" + + # Replace specific YunoHost variables + if test -n "${path_url:-}" + then + # path_url_slash_less is path_url, or a blank value if path_url is only '/' + local path_url_slash_less=${path_url%/} + ynh_replace_string --match_string="__PATH__/" --replace_string="$path_url_slash_less/" --target_file="$file" + ynh_replace_string --match_string="__PATH__" --replace_string="$path_url" --target_file="$file" + fi + if test -n "${app:-}"; then + ynh_replace_string --match_string="__NAME__" --replace_string="$app" --target_file="$file" + ynh_replace_string --match_string="__NAMETOCHANGE__" --replace_string="$app" --target_file="$file" + ynh_replace_string --match_string="__USER__" --replace_string="$app" --target_file="$file" + fi + if test -n "${final_path:-}"; then + ynh_replace_string --match_string="__FINALPATH__" --replace_string="$final_path" --target_file="$file" + fi + if test -n "${YNH_PHP_VERSION:-}"; then + ynh_replace_string --match_string="__PHPVERSION__" --replace_string="$YNH_PHP_VERSION" --target_file="$file" + fi + if test -n "${ynh_node_load_PATH:-}"; then + ynh_replace_string --match_string="__YNH_NODE_LOAD_PATH__" --replace_string="$ynh_node_load_PATH" --target_file="$file" + fi + + # Replace others variables + + # List other unique (__ __) variables in $file + local uniques_vars=( $(grep -o '__[A-Z0-9_]*__' $file | sort --unique | sed "s@__\([^.]*\)__@\L\1@g" )) + + # Do the replacement + local delimit=@ + for one_var in "${uniques_vars[@]}" + do + # Validate that one_var is indeed defined + test -n "${!one_var:-}" || ynh_die --message="\$$one_var wasn't initialized when trying to replace __${one_var^^}__ in $file" + + # Escape delimiter in match/replace string + match_string="__${one_var^^}__" + match_string=${match_string//${delimit}/"\\${delimit}"} + replace_string="${!one_var}" + replace_string=${replace_string//${delimit}/"\\${delimit}"} + + # Actually replace (sed is used instead of ynh_replace_string to avoid triggering an epic amount of debug logs) + sed --in-place "s${delimit}${match_string}${delimit}${replace_string}${delimit}g" "$file" + done +} + + #================================================= # FUTURE OFFICIAL HELPERS #================================================= diff --git a/scripts/install b/scripts/install index f519fec..13d31e1 100644 --- a/scripts/install +++ b/scripts/install @@ -25,6 +25,9 @@ ynh_abort_if_errors #================================================= domain=$YNH_APP_ARG_DOMAIN path_url=$YNH_APP_ARG_PATH +admin=$YNH_APP_ARG_ADMIN +password=$YNH_APP_ARG_PASSWORD +title=$YNH_APP_ARG_TITLE is_public=$YNH_APP_ARG_IS_PUBLIC app=$YNH_APP_INSTANCE_NAME @@ -104,6 +107,34 @@ ynh_script_progression --message="Configuring log rotation..." touch "$final_path/data/log.txt" ynh_use_logrotate "$final_path/data/log.txt" +#================================================= +# MODIFY A CONFIG FILE +#================================================= +ynh_script_progression --message="Configuring Shaarli..." + +# Get the timezone +timezone=$(cat /etc/timezone) + +# Generate the salt +salt=$(php${YNH_PHP_VERSION} -r 'echo sha1(uniqid("", true) ."_". mt_rand());') + +# Generate the hash with the password +hash=$(php${YNH_PHP_VERSION} -r "echo sha1('${password}'.'${admin}'.'${salt}');") + +# Generate the API secret +secret=$(php${YNH_PHP_VERSION} -r "echo str_shuffle(substr(hash_hmac('sha512', uniqid('${salt}'), '${admin}'), 10, 12));") + +# Set default_private_links. By default, make them public if the app is public. +if [ $is_public -eq 1 ] +then + default_private_links=false +else + default_private_links=true +fi + +# Installing the config file and replace the placeholders +ynh_add_config --template="../conf/config.json.php" --destination="$final_path/data/config.json.php" + #================================================= # SECURE FILES AND DIRECTORIES #================================================= From df17fe3a5357069f4f45e36ed09f6b321a9b8603 Mon Sep 17 00:00:00 2001 From: tituspijean Date: Wed, 25 Nov 2020 10:34:54 +0100 Subject: [PATCH 14/35] Ensure file and directories permissions in upgrade --- scripts/upgrade | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/scripts/upgrade b/scripts/upgrade index b36efd3..49652a9 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -149,6 +149,19 @@ then fi ynh_use_logrotate --non-append +#================================================= +# SECURE FILES AND DIRECTORIES +#================================================= +# set proper permissions +ynh_script_progression --message="Set permissions..." + +find $final_path -type f | xargs chmod 644 +find $final_path -type d | xargs chmod 755 + +# Set right permissions for curl install +ynh_script_progression --message="Set rights..." +chown -R $app: $final_path + #================================================= # UPGRADE FAIL2BAN #================================================= @@ -157,9 +170,6 @@ ynh_script_progression --message="Reconfiguring Fail2Ban..." # Create a dedicated fail2ban config ynh_add_fail2ban_config --logpath="$final_path/data/log.txt" --failregex="\s-\s\s-\sLogin failed for user.*$" -# Set right permissions -chown -R $app: $final_path - #================================================= # SETUP SSOWAT #================================================= From 7aed542943aa94e6515b8036984a5c64b07c9f31 Mon Sep 17 00:00:00 2001 From: tituspijean Date: Wed, 25 Nov 2020 10:36:44 +0100 Subject: [PATCH 15/35] Replace all ynh_print_info with ynh_script_progression --- scripts/install | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/scripts/install b/scripts/install index 13d31e1..ab62f28 100644 --- a/scripts/install +++ b/scripts/install @@ -46,7 +46,7 @@ ynh_webpath_register --app=$app --domain=$domain --path_url=$path_url #================================================= # STORE SETTINGS FROM MANIFEST #================================================= -ynh_print_info "Storing installation settings..." +ynh_script_progression --message="Storing installation settings..." ynh_app_setting_set --app=$app --key=domain --value=$domain ynh_app_setting_set --app=$app --key=path --value=$path_url @@ -87,13 +87,14 @@ ynh_add_nginx_config # CREATE DEDICATED USER #================================================= ynh_script_progression --message="Configuring system user..." + # Create a system user ynh_system_user_create --username=$app #================================================= # PHP-FPM CONFIGURATION #================================================= -ynh_print_info "Configuring PHP-FPM..." +ynh_script_progression --message="Configuring PHP-FPM..." # Create a dedicated PHP-FPM config ynh_add_fpm_config --usage=low --footprint=low --package="$extra_php_dependencies" From dbf8d5b38d926d06a6ca8f6b2c958ab4800c925b Mon Sep 17 00:00:00 2001 From: tituspijean Date: Wed, 25 Nov 2020 11:01:27 +0100 Subject: [PATCH 16/35] Update check_process --- check_process | 3 +++ 1 file changed, 3 insertions(+) diff --git a/check_process b/check_process index 692ab48..6cb120d 100644 --- a/check_process +++ b/check_process @@ -8,6 +8,9 @@ domain="domain.tld" (DOMAIN) path="/path" (PATH) is_public=1 (PUBLIC|public=1|private=0) + admin="john" (USER) + password="pass" + title="Shaarli" ; Checks pkg_linter=1 setup_sub_dir=1 From 9a949c120968813055bc8b22e000d5abc7a6acda Mon Sep 17 00:00:00 2001 From: tituspijean Date: Wed, 25 Nov 2020 11:39:30 +0100 Subject: [PATCH 17/35] Use permissions system --- scripts/install | 5 +++-- scripts/upgrade | 32 ++++++++++++-------------------- 2 files changed, 15 insertions(+), 22 deletions(-) diff --git a/scripts/install b/scripts/install index ab62f28..8a15e79 100644 --- a/scripts/install +++ b/scripts/install @@ -166,8 +166,9 @@ ynh_script_progression --message="Configuring SSOwat..." # Make app public if necessary if [ $is_public -eq 1 ] then - # unprotected_uris allows SSO credentials to be passed anyway. - ynh_app_setting_set --app=$app --key=unprotected_uris --value="/" + # Everyone can access the app. + # The "main" permission is automatically created before the install script. + ynh_permission_update --permission "main" --add "visitors" fi #================================================= diff --git a/scripts/upgrade b/scripts/upgrade index 49652a9..e1e0e94 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -32,21 +32,24 @@ upgrade_type=$(ynh_check_app_version_changed) #================================================= ynh_script_progression --message="Ensuring downward compatibility..." -# Fix is_public as a boolean value -if [ "$is_public" = "Yes" ]; then - ynh_app_setting_set --app=$app --key=is_public --value=1 - is_public=1 -elif [ "$is_public" = "No" ]; then - ynh_app_setting_set --app=$app --key=is_public --value=0 - is_public=0 -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 +is_public=$(ynh_app_setting_get --app=$app --key=is_public) + +if [ -n "$is_public" ]; then + # Delete is_public key. It is now handled by the permissions system + ynh_app_setting_delete --app=$app --key=is_public + # Delete legacy permission settings + ynh_app_setting_delete --app=$app --key=unprotected_uris + ynh_app_setting_delete --app=$app --key=protected_uris + ynh_app_setting_delete --app=$app --key=skipped_uris +fi + #================================================= # BACKUP BEFORE UPGRADE THEN ACTIVE TRAP #================================================= @@ -170,17 +173,6 @@ ynh_script_progression --message="Reconfiguring Fail2Ban..." # Create a dedicated fail2ban config ynh_add_fail2ban_config --logpath="$final_path/data/log.txt" --failregex="\s-\s\s-\sLogin failed for user.*$" -#================================================= -# SETUP SSOWAT -#================================================= -ynh_script_progression --message="Upgrading SSOwat configuration..." - -# Make app public if necessary -if [ $is_public -eq 1 ] -then - # unprotected_uris allows SSO credentials to be passed anyway - ynh_app_setting_set --app=$app --key=unprotected_uris --value="/" -fi #================================================= # RELOAD NGINX #================================================= From d57ade42a70eaed20241c8a12b27ff6a151a91ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89ric=20Gaspar?= <46165813+ericgaspar@users.noreply.github.com> Date: Mon, 30 Nov 2020 10:07:30 +0100 Subject: [PATCH 18/35] Update README.md --- README.md | 4 ---- 1 file changed, 4 deletions(-) diff --git a/README.md b/README.md index d0bba4f..431b431 100644 --- a/README.md +++ b/README.md @@ -31,10 +31,6 @@ After the installation is complete, go to the domain where the Shaarli is instal * Official documentation: https://shaarli.readthedocs.io/en/master/ * YunoHost documentation: If specific documentation is needed, feel free to contribute. - -## TODO/Limitations - -- [ ] Integrate the LDAP/SSOWAT authentication ## Changelog From 0fbc1282098fad2467019301dfef979b1a1d86fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89ric=20Gaspar?= <46165813+ericgaspar@users.noreply.github.com> Date: Mon, 30 Nov 2020 11:30:29 +0100 Subject: [PATCH 19/35] Update check_process --- check_process | 5 ----- 1 file changed, 5 deletions(-) diff --git a/check_process b/check_process index 6cb120d..6070b57 100644 --- a/check_process +++ b/check_process @@ -19,15 +19,10 @@ setup_private=1 setup_public=1 upgrade=1 - upgrade=1 from_commit=c492793c6855ce2d8d2af8656725a9ef8ed27923 backup_restore=1 multi_instance=1 port_already_use=0 change_url=1 - -;;; Levels - # If the level 5 (Package linter) is forced to 1. Please add justifications here. - Level 5=auto ;;; Options Email= Notification=none From fe6f94078d5844377304b7b4c5e03179e19c43e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89ric=20Gaspar?= <46165813+ericgaspar@users.noreply.github.com> Date: Mon, 30 Nov 2020 17:18:40 +0100 Subject: [PATCH 20/35] Upgrade to version 0.12.1 (#62) --- README.md | 2 +- conf/app.src | 4 ++-- manifest.json | 22 +++++++++++----------- scripts/install | 2 +- scripts/upgrade | 2 +- 5 files changed, 16 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index 431b431..21680a6 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ If you don't have YunoHost, please consult [the guide](https://yunohost.org/#/in ## Overview [Shaarli](https://github.com/shaarli/Shaarli) intends to provide YunoHost's users with a simple but advanced bookmarking service. -**Shipped version:** 0.12.0 +**Shipped version:** 0.12.1 ## Screenshots diff --git a/conf/app.src b/conf/app.src index 6c37cec..4ce13af 100644 --- a/conf/app.src +++ b/conf/app.src @@ -1,5 +1,5 @@ -SOURCE_URL=https://github.com/shaarli/Shaarli/releases/download/v0.12.0/shaarli-v0.12.0-full.tar.gz -SOURCE_SUM=f8d6e5d31d4657dfd0085b037804023a58d9e22152dea82b1ddb11fd1b1debd6 +SOURCE_URL=https://github.com/shaarli/Shaarli/releases/download/v0.12.1/shaarli-v0.12.1-full.tar.gz +SOURCE_SUM=f614e9baddbb5ea72b2158bbfa586b5761d17918be9a97a7bd28d7255276fc0b SOURCE_SUM_PRG=sha256sum SOURCE_FORMAT=tar.gz SOURCE_IN_SUBDIR=true diff --git a/manifest.json b/manifest.json index 721895d..19c14bf 100644 --- a/manifest.json +++ b/manifest.json @@ -2,26 +2,26 @@ "name": "Shaarli", "id": "shaarli", "packaging_format": 1, - "requirements": { - "yunohost": ">= 3.8.1" - }, "description": { "en": "The personal, minimalist, super-fast, no-database delicious clone", "fr": "Clone de delicious, rapide, simple et sans base de données." }, - "maintainer": { - "name": "Lapineige et rafi59", - "email": "rafi59_dev@srvmaison.fr.nf", - "url": "" - }, + "version": "0.12.1~ynh1", "url": "https://github.com/shaarli/Shaarli", "license": "MIT", - "version": "0.12.0~ynh1", + "maintainer": { + "name": "Lapineige et rafi59", + "email": "rafi59_dev@srvmaison.fr.nf", + "url": "" + }, + "requirements": { + "yunohost": ">= 3.8.1" + }, "multi_instance": true, "services": [ "nginx", "php7.0-fpm" - ], + ], "arguments": { "install" : [ { @@ -83,7 +83,7 @@ "fr": "Si configuré en public, Shaarli sera visible par tout le monde, y compris des personnes sans compte sur votre Yunohost. Cependant seules les personnes avec un compte Shaarli pourrons ajouter des marques-pages. Vos nouveaux liens seront publics par défaut, mais vous pourrez changer ça dans la page de configuration de Shaarli." }, "default": false - } + } ] } } diff --git a/scripts/install b/scripts/install index 8a15e79..cdf0cf3 100644 --- a/scripts/install +++ b/scripts/install @@ -73,7 +73,7 @@ ynh_setup_source --dest_dir="$final_path" #================================================= ynh_script_progression --message="Configuring NGINX web server..." -# Bug in Nginx with locations and aliases (see http://stackoverflow.com/a/35102259 ) +# Bug in NGINX with locations and aliases (see http://stackoverflow.com/a/35102259 ) if [ $path_url = "/" ]; then ynh_replace_string "__PATH_HACK__" "" "../conf/nginx.conf" else diff --git a/scripts/upgrade b/scripts/upgrade index e1e0e94..a177428 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -105,7 +105,7 @@ ynh_secure_remove "$tmpdir" #================================================= ynh_script_progression --message="Upgrading NGINX web server configuration..." -# Bug in Nginx with locations and aliases (see http://stackoverflow.com/a/35102259 ) +# Bug in NGINX with locations and aliases (see http://stackoverflow.com/a/35102259 ) if [ $path_url = "/" ]; then ynh_replace_string "__PATH_HACK__" "" "../conf/nginx.conf" else From 3cadf7cd5137c7605431df37cbc6cb05dbe7c92d Mon Sep 17 00:00:00 2001 From: ericgaspar Date: Tue, 1 Dec 2020 11:36:55 +0100 Subject: [PATCH 21/35] Fix --- conf/nginx.conf | 2 +- scripts/install | 7 ------- 2 files changed, 1 insertion(+), 8 deletions(-) diff --git a/conf/nginx.conf b/conf/nginx.conf index 63531b1..51908f1 100644 --- a/conf/nginx.conf +++ b/conf/nginx.conf @@ -11,7 +11,7 @@ location __PATH__/ { index index.php; - try_files $uri $uri/ __PATH_HACK__/index.php$is_args$args; + try_files $uri $uri/ __PATH__//__PATH__/index.php$is_args$args; location ~ [^/]\.php(/|$) { fastcgi_split_path_info ^(.+?\.php)(/.*)$; diff --git a/scripts/install b/scripts/install index cdf0cf3..32bdd0c 100644 --- a/scripts/install +++ b/scripts/install @@ -73,13 +73,6 @@ ynh_setup_source --dest_dir="$final_path" #================================================= ynh_script_progression --message="Configuring NGINX web server..." -# Bug in NGINX with locations and aliases (see http://stackoverflow.com/a/35102259 ) -if [ $path_url = "/" ]; then - ynh_replace_string "__PATH_HACK__" "" "../conf/nginx.conf" -else - ynh_replace_string "__PATH_HACK__" "$path_url/$path_url" "../conf/nginx.conf" -fi - # Create a dedicated NGINX config ynh_add_nginx_config From 206f5173ac08d93e0748e11290d9ce5021877cf2 Mon Sep 17 00:00:00 2001 From: ericgaspar Date: Tue, 1 Dec 2020 11:49:54 +0100 Subject: [PATCH 22/35] Update upgrade --- scripts/upgrade | 7 ------- 1 file changed, 7 deletions(-) diff --git a/scripts/upgrade b/scripts/upgrade index a177428..0a0c127 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -105,13 +105,6 @@ ynh_secure_remove "$tmpdir" #================================================= ynh_script_progression --message="Upgrading NGINX web server configuration..." -# Bug in NGINX with locations and aliases (see http://stackoverflow.com/a/35102259 ) -if [ $path_url = "/" ]; then - ynh_replace_string "__PATH_HACK__" "" "../conf/nginx.conf" -else - ynh_replace_string "__PATH_HACK__" "$path_url/$path_url" "../conf/nginx.conf" -fi - # Create a dedicated NGINX config ynh_add_nginx_config From 733cfdc207c54f8bacce5f22e29ddcc3b3d9a642 Mon Sep 17 00:00:00 2001 From: ericgaspar Date: Tue, 1 Dec 2020 12:03:07 +0100 Subject: [PATCH 23/35] Fix --- scripts/install | 9 +++------ scripts/remove | 2 +- scripts/restore | 4 +++- scripts/upgrade | 52 ++++++++++++++++++++----------------------------- 4 files changed, 28 insertions(+), 39 deletions(-) diff --git a/scripts/install b/scripts/install index 32bdd0c..a27e4c7 100644 --- a/scripts/install +++ b/scripts/install @@ -133,14 +133,11 @@ ynh_add_config --template="../conf/config.json.php" --destination="$final_path/d # SECURE FILES AND DIRECTORIES #================================================= # set proper permissions -ynh_script_progression --message="Set permissions..." +ynh_script_progression --message="Securing files and directories..." -find $final_path -type f | xargs chmod 644 -find $final_path -type d | xargs chmod 755 - -# Set right permissions for curl install -ynh_script_progression --message="Set rights..." chown -R $app: $final_path +chmod -R g+rX $final_path +chmod -R g+rwX $final_path/{cache/,data/,pagecache/,tmp/} #================================================= # SETUP FAIL2BAN diff --git a/scripts/remove b/scripts/remove index 7e5cbaa..31a0cd0 100644 --- a/scripts/remove +++ b/scripts/remove @@ -16,7 +16,7 @@ ynh_script_progression --message="Loading installation settings..." app=$YNH_APP_INSTANCE_NAME -domain=$(ynh_app_setting_get --app=$app --key=domain) +domain=$(ynh_app_setting_get --app=$app --key=domain) final_path=$(ynh_app_setting_get --app=$app --key=final_path) #================================================= diff --git a/scripts/restore b/scripts/restore index 6ecd4dd..5dace33 100644 --- a/scripts/restore +++ b/scripts/restore @@ -69,9 +69,11 @@ ynh_system_user_create --username=$app #================================================= # RESTORE USER RIGHTS #================================================= +ynh_script_progression --message="Restoring user rights..." -# Restore permissions on app files chown -R $app: $final_path +chmod -R g+rX $final_path +chmod -R g+rwX $final_path/{cache/,data/,pagecache/,tmp/} #================================================= # RESTORE THE PHP-FPM CONFIGURATION diff --git a/scripts/upgrade b/scripts/upgrade index 0a0c127..31c2220 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -72,34 +72,27 @@ if [ "$upgrade_type" == "UPGRADE_APP" ] then ynh_script_progression --message="Upgrading source files..." + # Create a temporary directory + tmpdir="$(mktemp -d)" + + # Backup the config file in the temp dir + cp -a "$final_path/data" "$tmpdir/data" + cp -a "$final_path/tpl" "$tmpdir/tpl" + + # Remove the app directory securely + ynh_secure_remove "$final_path" + # Download, check integrity, uncompress and patch the source from app.src ynh_setup_source --dest_dir="$final_path" + + cp -a "$tmpdir/data" "$final_path/" + cp -a "$tmpdir/tpl" "$final_path/" + + # Remove the tmp directory securely + ynh_secure_remove --file="$tmpdir" + fi -#================================================= -# REMOVE APP MAIN DIR -#================================================= - -# Create a temporary directory -tmpdir="$(ynh_smart_mktemp 600)" -# Backup the config file in the temp dir -cp -a "$final_path/data" "$tmpdir/" -# Backup the theme file in the temp dir -cp -a "$final_path/tpl" "$tmpdir/" - -# Remove the app directory securely -ynh_secure_remove "$final_path" - -#================================================= -# DOWNLOAD, CHECK AND UNPACK SOURCE -#================================================= -ynh_print_info "Upgrading source files..." -# Download, check integrity, uncompress and patch the source from app.src -ynh_setup_source "$final_path" -cp -a "$tmpdir/data" "${final_path}/" -cp -a "$tmpdir/tpl" "${final_path}/" -ynh_secure_remove "$tmpdir" - #================================================= # NGINX CONFIGURATION #================================================= @@ -143,20 +136,17 @@ then ynh_secure_remove "$final_path/data/log.txt" touch "$final_path/data/log.txt" fi + ynh_use_logrotate --non-append #================================================= # SECURE FILES AND DIRECTORIES #================================================= -# set proper permissions -ynh_script_progression --message="Set permissions..." +ynh_script_progression --message="Securing files and directories..." -find $final_path -type f | xargs chmod 644 -find $final_path -type d | xargs chmod 755 - -# Set right permissions for curl install -ynh_script_progression --message="Set rights..." chown -R $app: $final_path +chmod -R g+rX $final_path +chmod -R g+rwX $final_path/{cache/,data/,pagecache/,tmp/} #================================================= # UPGRADE FAIL2BAN From 06dcc36382f22ff27aed16d9592b111bb1679f0f Mon Sep 17 00:00:00 2001 From: ericgaspar Date: Tue, 1 Dec 2020 12:05:35 +0100 Subject: [PATCH 24/35] Remove dependencies --- scripts/_common.sh | 3 --- scripts/backup | 1 - scripts/install | 7 ------- scripts/remove | 8 -------- scripts/restore | 8 -------- scripts/upgrade | 7 ------- 6 files changed, 34 deletions(-) diff --git a/scripts/_common.sh b/scripts/_common.sh index 7dd75f7..0ebbc18 100644 --- a/scripts/_common.sh +++ b/scripts/_common.sh @@ -7,9 +7,6 @@ # dependencies used by the app YNH_PHP_VERSION="7.3" -# dependencies used by the app -pkg_dependencies="" - extra_php_dependencies="php${YNH_PHP_VERSION}-cli php${YNH_PHP_VERSION}-gettext php${YNH_PHP_VERSION}-curl php${YNH_PHP_VERSION}-intl php${YNH_PHP_VERSION}-gd php${YNH_PHP_VERSION}-mbstring" #================================================= diff --git a/scripts/backup b/scripts/backup index 03a7f71..9b02445 100644 --- a/scripts/backup +++ b/scripts/backup @@ -15,7 +15,6 @@ source /usr/share/yunohost/helpers #================================================= ynh_clean_setup () { - ### Remove this function if there's nothing to clean before calling the remove script. true } # Exit if an error occurs during the execution of the script diff --git a/scripts/install b/scripts/install index a27e4c7..62ca534 100644 --- a/scripts/install +++ b/scripts/install @@ -52,13 +52,6 @@ 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=is_public --value=$is_public -#================================================= -# INSTALL DEPENDENCIES -#================================================= -ynh_script_progression --message="Installing dependencies..." - -ynh_install_app_dependencies $pkg_dependencies - #================================================= # DOWNLOAD, CHECK AND UNPACK SOURCE #================================================= diff --git a/scripts/remove b/scripts/remove index 31a0cd0..893b568 100644 --- a/scripts/remove +++ b/scripts/remove @@ -19,14 +19,6 @@ app=$YNH_APP_INSTANCE_NAME domain=$(ynh_app_setting_get --app=$app --key=domain) final_path=$(ynh_app_setting_get --app=$app --key=final_path) -#================================================= -# REMOVE DEPENDENCIES -#================================================= -ynh_script_progression --message="Removing dependencies..." - -# Remove metapackage and its dependencies -ynh_remove_app_dependencies - #================================================= # REMOVE APP MAIN DIR #================================================= diff --git a/scripts/restore b/scripts/restore index 5dace33..ae8521b 100644 --- a/scripts/restore +++ b/scripts/restore @@ -83,14 +83,6 @@ ynh_restore_file --origin_path="/etc/php/$phpversion/fpm/pool.d/$app.conf" #================================================= # SPECIFIC RESTORATION -#================================================= -# REINSTALL DEPENDENCIES -#================================================= -ynh_script_progression --message="Reinstalling dependencies..." - -# Define and install dependencies -ynh_install_app_dependencies $pkg_dependencies - #================================================= # RESTORE THE LOGROTATE CONFIGURATION #================================================= diff --git a/scripts/upgrade b/scripts/upgrade index 31c2220..e579599 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -101,13 +101,6 @@ ynh_script_progression --message="Upgrading NGINX web server configuration..." # Create a dedicated NGINX config ynh_add_nginx_config -#================================================= -# UPGRADE DEPENDENCIES -#================================================= -ynh_script_progression --message="Upgrading dependencies..." - -ynh_install_app_dependencies $pkg_dependencies - #================================================= # CREATE DEDICATED USER #================================================= From c95ef8b2aaa52a77abd66b76e864729285a2c7ac Mon Sep 17 00:00:00 2001 From: ericgaspar Date: Tue, 1 Dec 2020 12:07:45 +0100 Subject: [PATCH 25/35] Update manifest.json --- manifest.json | 1 - 1 file changed, 1 deletion(-) diff --git a/manifest.json b/manifest.json index e222d9f..19c14bf 100644 --- a/manifest.json +++ b/manifest.json @@ -2,7 +2,6 @@ "name": "Shaarli", "id": "shaarli", "packaging_format": 1, - "description": { "en": "The personal, minimalist, super-fast, no-database delicious clone", "fr": "Clone de delicious, rapide, simple et sans base de données." From 35e98c09251d9e82ff6a9b596cadd65a1cd308fe Mon Sep 17 00:00:00 2001 From: ericgaspar Date: Tue, 1 Dec 2020 12:14:47 +0100 Subject: [PATCH 26/35] Update nginx.conf --- conf/nginx.conf | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/conf/nginx.conf b/conf/nginx.conf index 51908f1..df1ba72 100644 --- a/conf/nginx.conf +++ b/conf/nginx.conf @@ -11,6 +11,10 @@ location __PATH__/ { index index.php; + if (!-f $request_filename) { + rewrite ^ __PATH__/index.php last; + } + try_files $uri $uri/ __PATH__//__PATH__/index.php$is_args$args; location ~ [^/]\.php(/|$) { From 22e9982a5d2aca6ff54d3a3246f0c3c62a87327f Mon Sep 17 00:00:00 2001 From: ericgaspar Date: Tue, 1 Dec 2020 13:35:39 +0100 Subject: [PATCH 27/35] small typos --- scripts/remove | 1 - scripts/restore | 5 ++--- scripts/upgrade | 12 ++++-------- 3 files changed, 6 insertions(+), 12 deletions(-) diff --git a/scripts/remove b/scripts/remove index 893b568..bcfbfc6 100644 --- a/scripts/remove +++ b/scripts/remove @@ -50,7 +50,6 @@ ynh_script_progression --message="Removing logrotate configuration..." # Remove the app-specific logrotate config ynh_remove_logrotate - #================================================= # REMOVE FAIL2BAN CONFIGURATION #================================================= diff --git a/scripts/restore b/scripts/restore index ae8521b..5bbee27 100644 --- a/scripts/restore +++ b/scripts/restore @@ -15,7 +15,6 @@ source /usr/share/yunohost/helpers #================================================= ynh_clean_setup () { - #### Remove this function if there's nothing to clean before calling the remove script. true } # Exit if an error occurs during the execution of the script @@ -28,8 +27,8 @@ 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) +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) phpversion=$(ynh_app_setting_get --app=$app --key=phpversion) diff --git a/scripts/upgrade b/scripts/upgrade index e579599..626454a 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -16,9 +16,9 @@ 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) -is_public=$(ynh_app_setting_get --app=$app --key=is_public) +domain=$(ynh_app_setting_get --app=$app --key=domain) +path_url=$(ynh_app_setting_get --app=$app --key=path) +is_public=$(ynh_app_setting_get --app=$app --key=is_public) final_path=$(ynh_app_setting_get --app=$app --key=final_path) #================================================= @@ -38,9 +38,6 @@ if [ -z "$final_path" ]; then ynh_app_setting_set --app=$app --key=final_path --value=$final_path fi -# Cleaning legacy permissions -is_public=$(ynh_app_setting_get --app=$app --key=is_public) - if [ -n "$is_public" ]; then # Delete is_public key. It is now handled by the permissions system ynh_app_setting_delete --app=$app --key=is_public @@ -90,7 +87,6 @@ then # Remove the tmp directory securely ynh_secure_remove --file="$tmpdir" - fi #================================================= @@ -146,7 +142,7 @@ chmod -R g+rwX $final_path/{cache/,data/,pagecache/,tmp/} #================================================= ynh_script_progression --message="Reconfiguring Fail2Ban..." -# Create a dedicated fail2ban config +# Create a dedicated Fail2Ban config ynh_add_fail2ban_config --logpath="$final_path/data/log.txt" --failregex="\s-\s\s-\sLogin failed for user.*$" #================================================= From cf7a4821f32221e71d2dd86ecc317390d9d6632b Mon Sep 17 00:00:00 2001 From: ericgaspar Date: Wed, 2 Dec 2020 09:18:40 +0100 Subject: [PATCH 28/35] Add php-fpm.conf --- conf/nginx.conf | 5 +- conf/php-fpm.conf | 430 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 433 insertions(+), 2 deletions(-) create mode 100644 conf/php-fpm.conf diff --git a/conf/nginx.conf b/conf/nginx.conf index df1ba72..3115800 100644 --- a/conf/nginx.conf +++ b/conf/nginx.conf @@ -14,8 +14,9 @@ location __PATH__/ { if (!-f $request_filename) { rewrite ^ __PATH__/index.php last; } - - try_files $uri $uri/ __PATH__//__PATH__/index.php$is_args$args; + + client_max_body_size 50M; + try_files $uri $uri/ index.php$is_args$args; location ~ [^/]\.php(/|$) { fastcgi_split_path_info ^(.+?\.php)(/.*)$; diff --git a/conf/php-fpm.conf b/conf/php-fpm.conf new file mode 100644 index 0000000..ab1a471 --- /dev/null +++ b/conf/php-fpm.conf @@ -0,0 +1,430 @@ +; Start a new pool named 'www'. +; the variable $pool can be used in any directive and will be replaced by the +; pool name ('www' here) +[__NAMETOCHANGE__] + +; Per pool prefix +; It only applies on the following directives: +; - 'access.log' +; - 'slowlog' +; - 'listen' (unixsocket) +; - 'chroot' +; - 'chdir' +; - 'php_values' +; - 'php_admin_values' +; When not set, the global prefix (or /usr) applies instead. +; Note: This directive can also be relative to the global prefix. +; Default Value: none +;prefix = /path/to/pools/$pool + +; Unix user/group of processes +; Note: The user is mandatory. If the group is not set, the default user's group +; will be used. +user = __USER__ +group = __USER__ + +; The address on which to accept FastCGI requests. +; Valid syntaxes are: +; 'ip.add.re.ss:port' - to listen on a TCP socket to a specific IPv4 address on +; a specific port; +; '[ip:6:addr:ess]:port' - to listen on a TCP socket to a specific IPv6 address on +; a specific port; +; 'port' - to listen on a TCP socket to all addresses +; (IPv6 and IPv4-mapped) on a specific port; +; '/path/to/unix/socket' - to listen on a unix socket. +; Note: This value is mandatory. +listen = /var/run/php/php__PHPVERSION__-fpm-__NAMETOCHANGE__.sock + +; Set listen(2) backlog. +; Default Value: 511 (-1 on FreeBSD and OpenBSD) +;listen.backlog = 511 + +; Set permissions for unix socket, if one is used. In Linux, read/write +; permissions must be set in order to allow connections from a web server. Many +; BSD-derived systems allow connections regardless of permissions. +; Default Values: user and group are set as the running user +; mode is set to 0660 +listen.owner = www-data +listen.group = www-data +;listen.mode = 0660 +; When POSIX Access Control Lists are supported you can set them using +; these options, value is a comma separated list of user/group names. +; When set, listen.owner and listen.group are ignored +;listen.acl_users = +;listen.acl_groups = + +; List of addresses (IPv4/IPv6) of FastCGI clients which are allowed to connect. +; Equivalent to the FCGI_WEB_SERVER_ADDRS environment variable in the original +; PHP FCGI (5.2.2+). Makes sense only with a tcp listening socket. Each address +; must be separated by a comma. If this value is left blank, connections will be +; accepted from any ip address. +; Default Value: any +;listen.allowed_clients = 127.0.0.1 + +; Specify the nice(2) priority to apply to the pool processes (only if set) +; The value can vary from -19 (highest priority) to 20 (lower priority) +; Note: - It will only work if the FPM master process is launched as root +; - The pool processes will inherit the master process priority +; unless it specified otherwise +; Default Value: no set +; process.priority = -19 + +; Set the process dumpable flag (PR_SET_DUMPABLE prctl) even if the process user +; or group is differrent than the master process user. It allows to create process +; core dump and ptrace the process for the pool user. +; Default Value: no +; process.dumpable = yes + +; Choose how the process manager will control the number of child processes. +; Possible Values: +; static - a fixed number (pm.max_children) of child processes; +; dynamic - the number of child processes are set dynamically based on the +; following directives. With this process management, there will be +; always at least 1 children. +; pm.max_children - the maximum number of children that can +; be alive at the same time. +; pm.start_servers - the number of children created on startup. +; pm.min_spare_servers - the minimum number of children in 'idle' +; state (waiting to process). If the number +; of 'idle' processes is less than this +; number then some children will be created. +; pm.max_spare_servers - the maximum number of children in 'idle' +; state (waiting to process). If the number +; of 'idle' processes is greater than this +; number then some children will be killed. +; ondemand - no children are created at startup. Children will be forked when +; new requests will connect. The following parameter are used: +; pm.max_children - the maximum number of children that +; can be alive at the same time. +; pm.process_idle_timeout - The number of seconds after which +; an idle process will be killed. +; Note: This value is mandatory. +pm = dynamic + +; The number of child processes to be created when pm is set to 'static' and the +; maximum number of child processes when pm is set to 'dynamic' or 'ondemand'. +; This value sets the limit on the number of simultaneous requests that will be +; served. Equivalent to the ApacheMaxClients directive with mpm_prefork. +; Equivalent to the PHP_FCGI_CHILDREN environment variable in the original PHP +; CGI. The below defaults are based on a server without much resources. Don't +; forget to tweak pm.* to fit your needs. +; Note: Used when pm is set to 'static', 'dynamic' or 'ondemand' +; Note: This value is mandatory. +pm.max_children = 5 + +; The number of child processes created on startup. +; Note: Used only when pm is set to 'dynamic' +; Default Value: min_spare_servers + (max_spare_servers - min_spare_servers) / 2 +pm.start_servers = 2 + +; The desired minimum number of idle server processes. +; Note: Used only when pm is set to 'dynamic' +; Note: Mandatory when pm is set to 'dynamic' +pm.min_spare_servers = 1 + +; The desired maximum number of idle server processes. +; Note: Used only when pm is set to 'dynamic' +; Note: Mandatory when pm is set to 'dynamic' +pm.max_spare_servers = 3 + +; The number of seconds after which an idle process will be killed. +; Note: Used only when pm is set to 'ondemand' +; Default Value: 10s +;pm.process_idle_timeout = 10s; + +; The number of requests each child process should execute before respawning. +; This can be useful to work around memory leaks in 3rd party libraries. For +; endless request processing specify '0'. Equivalent to PHP_FCGI_MAX_REQUESTS. +; Default Value: 0 +;pm.max_requests = 500 + +; The URI to view the FPM status page. If this value is not set, no URI will be +; recognized as a status page. It shows the following informations: +; pool - the name of the pool; +; process manager - static, dynamic or ondemand; +; start time - the date and time FPM has started; +; start since - number of seconds since FPM has started; +; accepted conn - the number of request accepted by the pool; +; listen queue - the number of request in the queue of pending +; connections (see backlog in listen(2)); +; max listen queue - the maximum number of requests in the queue +; of pending connections since FPM has started; +; listen queue len - the size of the socket queue of pending connections; +; idle processes - the number of idle processes; +; active processes - the number of active processes; +; total processes - the number of idle + active processes; +; max active processes - the maximum number of active processes since FPM +; has started; +; max children reached - number of times, the process limit has been reached, +; when pm tries to start more children (works only for +; pm 'dynamic' and 'ondemand'); +; Value are updated in real time. +; Example output: +; pool: www +; process manager: static +; start time: 01/Jul/2011:17:53:49 +0200 +; start since: 62636 +; accepted conn: 190460 +; listen queue: 0 +; max listen queue: 1 +; listen queue len: 42 +; idle processes: 4 +; active processes: 11 +; total processes: 15 +; max active processes: 12 +; max children reached: 0 +; +; By default the status page output is formatted as text/plain. Passing either +; 'html', 'xml' or 'json' in the query string will return the corresponding +; output syntax. Example: +; http://www.foo.bar/status +; http://www.foo.bar/status?json +; http://www.foo.bar/status?html +; http://www.foo.bar/status?xml +; +; By default the status page only outputs short status. Passing 'full' in the +; query string will also return status for each pool process. +; Example: +; http://www.foo.bar/status?full +; http://www.foo.bar/status?json&full +; http://www.foo.bar/status?html&full +; http://www.foo.bar/status?xml&full +; The Full status returns for each process: +; pid - the PID of the process; +; state - the state of the process (Idle, Running, ...); +; start time - the date and time the process has started; +; start since - the number of seconds since the process has started; +; requests - the number of requests the process has served; +; request duration - the duration in µs of the requests; +; request method - the request method (GET, POST, ...); +; request URI - the request URI with the query string; +; content length - the content length of the request (only with POST); +; user - the user (PHP_AUTH_USER) (or '-' if not set); +; script - the main script called (or '-' if not set); +; last request cpu - the %cpu the last request consumed +; it's always 0 if the process is not in Idle state +; because CPU calculation is done when the request +; processing has terminated; +; last request memory - the max amount of memory the last request consumed +; it's always 0 if the process is not in Idle state +; because memory calculation is done when the request +; processing has terminated; +; If the process is in Idle state, then informations are related to the +; last request the process has served. Otherwise informations are related to +; the current request being served. +; Example output: +; ************************ +; pid: 31330 +; state: Running +; start time: 01/Jul/2011:17:53:49 +0200 +; start since: 63087 +; requests: 12808 +; request duration: 1250261 +; request method: GET +; request URI: /test_mem.php?N=10000 +; content length: 0 +; user: - +; script: /home/fat/web/docs/php/test_mem.php +; last request cpu: 0.00 +; last request memory: 0 +; +; Note: There is a real-time FPM status monitoring sample web page available +; It's available in: /usr/share/php/7.0/fpm/status.html +; +; Note: The value must start with a leading slash (/). The value can be +; anything, but it may not be a good idea to use the .php extension or it +; may conflict with a real PHP file. +; Default Value: not set +;pm.status_path = /status + +; The ping URI to call the monitoring page of FPM. If this value is not set, no +; URI will be recognized as a ping page. This could be used to test from outside +; that FPM is alive and responding, or to +; - create a graph of FPM availability (rrd or such); +; - remove a server from a group if it is not responding (load balancing); +; - trigger alerts for the operating team (24/7). +; Note: The value must start with a leading slash (/). The value can be +; anything, but it may not be a good idea to use the .php extension or it +; may conflict with a real PHP file. +; Default Value: not set +;ping.path = /ping + +; This directive may be used to customize the response of a ping request. The +; response is formatted as text/plain with a 200 response code. +; Default Value: pong +;ping.response = pong + +; The access log file +; Default: not set +;access.log = log/$pool.access.log + +; The access log format. +; The following syntax is allowed +; %%: the '%' character +; %C: %CPU used by the request +; it can accept the following format: +; - %{user}C for user CPU only +; - %{system}C for system CPU only +; - %{total}C for user + system CPU (default) +; %d: time taken to serve the request +; it can accept the following format: +; - %{seconds}d (default) +; - %{miliseconds}d +; - %{mili}d +; - %{microseconds}d +; - %{micro}d +; %e: an environment variable (same as $_ENV or $_SERVER) +; it must be associated with embraces to specify the name of the env +; variable. Some exemples: +; - server specifics like: %{REQUEST_METHOD}e or %{SERVER_PROTOCOL}e +; - HTTP headers like: %{HTTP_HOST}e or %{HTTP_USER_AGENT}e +; %f: script filename +; %l: content-length of the request (for POST request only) +; %m: request method +; %M: peak of memory allocated by PHP +; it can accept the following format: +; - %{bytes}M (default) +; - %{kilobytes}M +; - %{kilo}M +; - %{megabytes}M +; - %{mega}M +; %n: pool name +; %o: output header +; it must be associated with embraces to specify the name of the header: +; - %{Content-Type}o +; - %{X-Powered-By}o +; - %{Transfert-Encoding}o +; - .... +; %p: PID of the child that serviced the request +; %P: PID of the parent of the child that serviced the request +; %q: the query string +; %Q: the '?' character if query string exists +; %r: the request URI (without the query string, see %q and %Q) +; %R: remote IP address +; %s: status (response code) +; %t: server time the request was received +; 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 +; %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 From bb64f6820c701f0dbcec4c72176141618b0a6c24 Mon Sep 17 00:00:00 2001 From: lapineige Date: Sun, 28 Feb 2021 14:20:33 +0100 Subject: [PATCH 29/35] Don't override (new) official templates with old ones (#66) * Don't override (new) official templates with old ones Fix #65 * Change version number --- manifest.json | 2 +- scripts/upgrade | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/manifest.json b/manifest.json index 19c14bf..aebb315 100644 --- a/manifest.json +++ b/manifest.json @@ -6,7 +6,7 @@ "en": "The personal, minimalist, super-fast, no-database delicious clone", "fr": "Clone de delicious, rapide, simple et sans base de données." }, - "version": "0.12.1~ynh1", + "version": "0.12.1~ynh2", "url": "https://github.com/shaarli/Shaarli", "license": "MIT", "maintainer": { diff --git a/scripts/upgrade b/scripts/upgrade index 626454a..e31c9bd 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -83,7 +83,7 @@ then ynh_setup_source --dest_dir="$final_path" cp -a "$tmpdir/data" "$final_path/" - cp -a "$tmpdir/tpl" "$final_path/" + cp -a -n "$tmpdir/tpl" "$final_path/" # copy without erasing existing templates (from official source) # Remove the tmp directory securely ynh_secure_remove --file="$tmpdir" From 4a3567faf55cd52d15010b45db395faa6675395e Mon Sep 17 00:00:00 2001 From: lapineige Date: Sun, 28 Feb 2021 14:27:08 +0100 Subject: [PATCH 30/35] Don't override (new) official templates with old ones during force upgrade (#68) * Don't override (new) official templates with old ones #66 would not work during a forced upgrade --- scripts/upgrade | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/upgrade b/scripts/upgrade index e31c9bd..e3f536c 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -65,7 +65,7 @@ ynh_abort_if_errors # DOWNLOAD, CHECK AND UNPACK SOURCE #================================================= -if [ "$upgrade_type" == "UPGRADE_APP" ] +if [ "$upgrade_type" == "UPGRADE_APP" || "$upgrade_type" == "UPGRADE_FORCED" ] # we should do that during a force upgrade too (as it could lead to a version upgrade for instance) then ynh_script_progression --message="Upgrading source files..." From c32745baee720157a8ccd8a6174fb49974ad08c8 Mon Sep 17 00:00:00 2001 From: lapineige Date: Sun, 28 Feb 2021 21:54:57 +0100 Subject: [PATCH 31/35] Fix bad condition Co-authored-by: Alex Garel --- scripts/upgrade | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/upgrade b/scripts/upgrade index e3f536c..9b3d266 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -65,7 +65,7 @@ ynh_abort_if_errors # DOWNLOAD, CHECK AND UNPACK SOURCE #================================================= -if [ "$upgrade_type" == "UPGRADE_APP" || "$upgrade_type" == "UPGRADE_FORCED" ] # we should do that during a force upgrade too (as it could lead to a version upgrade for instance) +if [ "$upgrade_type" == "UPGRADE_APP" ] || [ "$upgrade_type" == "UPGRADE_FORCED" ] # we should do that during a force upgrade too (as it could lead to a version upgrade for instance) then ynh_script_progression --message="Upgrading source files..." From 95b7e39714008f6eaa8d38c3592b4824e59a5236 Mon Sep 17 00:00:00 2001 From: yalh76 Date: Sun, 14 Mar 2021 21:10:46 +0100 Subject: [PATCH 32/35] username normalisation --- manifest.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manifest.json b/manifest.json index aebb315..a5b2d35 100644 --- a/manifest.json +++ b/manifest.json @@ -10,7 +10,7 @@ "url": "https://github.com/shaarli/Shaarli", "license": "MIT", "maintainer": { - "name": "Lapineige et rafi59", + "name": "lapineige et rafi59", "email": "rafi59_dev@srvmaison.fr.nf", "url": "" }, From 2124945d06d21f15bb83c2b7bd01d1b1b20f777f Mon Sep 17 00:00:00 2001 From: YunoHost Bot Date: Sun, 21 Nov 2021 09:02:49 +0100 Subject: [PATCH 33/35] [autopatch] Update issue and PR templates (#71) * Testing (#69) Fix #67 #65 * [autopatch] Update issue and PR templates Co-authored-by: lapineige Co-authored-by: Yunohost-Bot <> --- issue_template.md => .github/ISSUE_TEMPLATE.md | 12 ++++++------ .github/PULL_REQUEST_TEMPLATE.md | 16 ++++++++++++++++ pull_request_template.md | 18 ------------------ 3 files changed, 22 insertions(+), 24 deletions(-) rename issue_template.md => .github/ISSUE_TEMPLATE.md (89%) create mode 100644 .github/PULL_REQUEST_TEMPLATE.md delete mode 100644 pull_request_template.md diff --git a/issue_template.md b/.github/ISSUE_TEMPLATE.md similarity index 89% rename from issue_template.md rename to .github/ISSUE_TEMPLATE.md index e2fca72..2729a6b 100644 --- a/issue_template.md +++ b/.github/ISSUE_TEMPLATE.md @@ -6,12 +6,12 @@ about: When creating a bug report, please use the following template to provide **How to post a meaningful bug report** 1. *Read this whole template first.* -2. *Make sure you are on the right place:* +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.* - - *In doubt, ask here and we will figure it out together.* -3. *Delete these italic comments as you write over them below, and remove this guide.* ---- + - *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 @@ -22,7 +22,7 @@ about: When creating a bug report, please use the following template to provide - 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* +- 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`* @@ -31,7 +31,7 @@ about: When creating a bug report, please use the following template to provide - *If you performed a command from the CLI, the command itself is enough. For example:* ```sh - sudo yunohost app install shaarli + 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:* 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/pull_request_template.md b/pull_request_template.md deleted file mode 100644 index 658cf1d..0000000 --- a/pull_request_template.md +++ /dev/null @@ -1,18 +0,0 @@ -## Problem -- *Description of why you made this PR* - -## Solution -- *And how do you fix that problem* - -## PR Status -- [ ] Code finished. -- [ ] Tested with Package_check. -- [ ] Fix or enhancement tested. -- [ ] Upgrade from last version tested. -- [ ] Can be reviewed and tested. - -## Package_check results ---- -*If you have access to [App Continuous Integration for packagers](https://yunohost.org/#/packaging_apps_ci) you can provide a link to the package_check results like below, replacing '-NUM-' in this link by the PR number and USERNAME by your username on the ci-apps-dev. Or you provide a screenshot or a pastebin of the results* - -[![Build Status](https://ci-apps-dev.yunohost.org/jenkins/job/shaarli_ynh%20PR-NUM-%20(USERNAME)/badge/icon)](https://ci-apps-dev.yunohost.org/jenkins/job/shaarli_ynh%20PR-NUM-%20(USERNAME)/) From ae6795704864e061bf5a5133ffd4ddd375c676e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89ric=20Gaspar?= <46165813+ericgaspar@users.noreply.github.com> Date: Mon, 22 Nov 2021 19:20:21 +0100 Subject: [PATCH 34/35] Fix linter (#73) * Fix linter * Auto-update README * Fix * Auto-update README * Fix * Fix * Update upgrade * Update install * Fix * Update upgrade * Update restore Co-authored-by: Yunohost-Bot <> --- README.md | 72 +++++++++--------- README_fr.md | 62 ++++++++++++++++ check_process | 14 +--- conf/app.src | 1 - conf/nginx.conf | 5 -- doc/.DS_Store | Bin 0 -> 8196 bytes doc/DESCRIPTION.md | 13 ++++ doc/DISCLAIMER.md | 5 ++ doc/screenshots/27wYsbC.png | Bin 0 -> 317946 bytes manifest.json | 41 +++-------- scripts/_common.sh | 142 +----------------------------------- scripts/backup | 3 - scripts/install | 57 ++++++++------- scripts/remove | 1 + scripts/restore | 30 +++++--- scripts/upgrade | 56 +++++++------- 16 files changed, 213 insertions(+), 289 deletions(-) create mode 100644 README_fr.md create mode 100644 doc/.DS_Store create mode 100644 doc/DESCRIPTION.md create mode 100644 doc/DISCLAIMER.md create mode 100644 doc/screenshots/27wYsbC.png diff --git a/README.md b/README.md index 21680a6..0d781f8 100644 --- a/README.md +++ b/README.md @@ -1,60 +1,56 @@ + + # Shaarli for YunoHost [![Integration level](https://dash.yunohost.org/integration/shaarli.svg)](https://dash.yunohost.org/appci/app/shaarli) ![](https://ci-apps.yunohost.org/ci/badges/shaarli.status.svg) ![](https://ci-apps.yunohost.org/ci/badges/shaarli.maintain.svg) -[![Install Shaarli with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=shaarli) +[![Install Shaarli with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=shaarli) + +*[Lire ce readme en français.](./README_fr.md)* > *This package allows you to install Shaarli 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 -[Shaarli](https://github.com/shaarli/Shaarli) intends to provide YunoHost's users with a simple but advanced bookmarking service. -**Shipped version:** 0.12.1 +Shaarli is a minimalist bookmark manager and link sharing service that you can install on your own server. It is designed to be personal (single-user), fast and handy. + +### Features + +- share, comment and save interesting links +- bookmark useful/frequent links and share them between computers +- a minimal blog/microblog/writing platform +- a read-it-later/todo list +- a notepad to draft and save articles/posts/ideas +- a knowledge base to keep notes, documentation and code snippets +- a shared clipboard/notepad/pastebin between computers +- playlist manager for online media +- feed other blogs, aggregators, social networks... + + +**Shipped version:** 0.12.1~ynh2 + +**Demo:** https://demo.shaarli.org/ ## Screenshots -![](https://i.imgur.com/zGF4d6L.jpg) +![](./doc/screenshots/27wYsbC.png) -![](https://i.imgur.com/27wYsbC.png) - -## Demo - -* [Official demo](https://demo.shaarli.org/) +## Disclaimers / important information ## Configuration During the installation app will prompt you to install itself as public or private, if you choose public then anyone (not just YunoHost users) would be able to access your Shaarli instance. After the installation is complete, go to the domain where the Shaarli is installed and create your account. After the creation of the account the registration will be locked. +## Documentation and resources -## Documentation - - * Official documentation: https://shaarli.readthedocs.io/en/master/ - * YunoHost documentation: If specific documentation is needed, feel free to contribute. - -## Changelog - -For Shaarli changelog, see: https://github.com/shaarli/Shaarli/blob/master/CHANGELOG.md - -#### Supported architectures - -* x86-64 - [![Build Status](https://ci-apps.yunohost.org/ci/logs/shaarli%20%28Apps%29.svg)](https://ci-apps.yunohost.org/ci/apps/shaarli/) -* ARMv8-A - [![Build Status](https://ci-apps-arm.yunohost.org/ci/logs/shaarli%20%28Apps%29.svg)](https://ci-apps-arm.yunohost.org/ci/apps/shaarli/) - -## Limitations - -* Any known limitations. - -## Additional information - -## Links - - * Report a bug: https://github.com/YunoHost-Apps/shaarli_ynh/issues - * App website: https://shaarli.readthedocs.io/ - * Upstream app repository: https://github.com/shaarli/Shaarli - * YunoHost website: https://yunohost.org/ - ---- +* Official admin documentation: https://shaarli.readthedocs.io/en/master/ +* Upstream app code repository: https://github.com/shaarli/Shaarli +* YunoHost documentation for this app: https://yunohost.org/app_shaarli +* Report a bug: https://github.com/YunoHost-Apps/shaarli_ynh/issues ## Developer info @@ -66,3 +62,5 @@ sudo yunohost app install https://github.com/YunoHost-Apps/shaarli_ynh/tree/test or sudo yunohost app upgrade shaarli -u https://github.com/YunoHost-Apps/shaarli_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..ec5e9be --- /dev/null +++ b/README_fr.md @@ -0,0 +1,62 @@ +# Shaarli pour YunoHost + +[![Niveau d'intégration](https://dash.yunohost.org/integration/shaarli.svg)](https://dash.yunohost.org/appci/app/shaarli) ![](https://ci-apps.yunohost.org/ci/badges/shaarli.status.svg) ![](https://ci-apps.yunohost.org/ci/badges/shaarli.maintain.svg) +[![Installer Shaarli avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=shaarli) + +*[Read this readme in english.](./README.md)* +*[Lire ce readme en français.](./README_fr.md)* + +> *Ce package vous permet d'installer Shaarli 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 + +Shaarli is a minimalist bookmark manager and link sharing service that you can install on your own server. It is designed to be personal (single-user), fast and handy. + +### Features + +- share, comment and save interesting links +- bookmark useful/frequent links and share them between computers +- a minimal blog/microblog/writing platform +- a read-it-later/todo list +- a notepad to draft and save articles/posts/ideas +- a knowledge base to keep notes, documentation and code snippets +- a shared clipboard/notepad/pastebin between computers +- playlist manager for online media +- feed other blogs, aggregators, social networks... + + +**Version incluse :** 0.12.1~ynh2 + +**Démo :** https://demo.shaarli.org/ + +## Captures d'écran + +![](./doc/screenshots/27wYsbC.png) + +## Avertissements / informations importantes + +## Configuration + +During the installation app will prompt you to install itself as public or private, if you choose public then anyone (not just YunoHost users) would be able to access your Shaarli instance. + +After the installation is complete, go to the domain where the Shaarli is installed and create your account. After the creation of the account the registration will be locked. +## Documentations et ressources + +* Documentation officielle de l'admin : https://shaarli.readthedocs.io/en/master/ +* Dépôt de code officiel de l'app : https://github.com/shaarli/Shaarli +* Documentation YunoHost pour cette app : https://yunohost.org/app_shaarli +* Signaler un bug : https://github.com/YunoHost-Apps/shaarli_ynh/issues + +## Informations pour les développeurs + +Merci de faire vos pull request sur la [branche testing](https://github.com/YunoHost-Apps/shaarli_ynh/tree/testing). + +Pour essayer la branche testing, procédez comme suit. +``` +sudo yunohost app install https://github.com/YunoHost-Apps/shaarli_ynh/tree/testing --debug +ou +sudo yunohost app upgrade shaarli -u https://github.com/YunoHost-Apps/shaarli_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 6070b57..aa9ec79 100644 --- a/check_process +++ b/check_process @@ -1,14 +1,9 @@ -# See here for more information -# https://github.com/YunoHost/package_check#syntax-check_process-file - -# Move this file from check_process.default to check_process when you have filled it. - ;; Test complet sans multisite ; Manifest - domain="domain.tld" (DOMAIN) - path="/path" (PATH) - is_public=1 (PUBLIC|public=1|private=0) - admin="john" (USER) + domain="domain.tld" + path="/path" + is_public=1 + admin="john" password="pass" title="Shaarli" ; Checks @@ -21,7 +16,6 @@ upgrade=1 backup_restore=1 multi_instance=1 - port_already_use=0 change_url=1 ;;; Options Email= diff --git a/conf/app.src b/conf/app.src index 4ce13af..ee7109a 100644 --- a/conf/app.src +++ b/conf/app.src @@ -3,5 +3,4 @@ SOURCE_SUM=f614e9baddbb5ea72b2158bbfa586b5761d17918be9a97a7bd28d7255276fc0b SOURCE_SUM_PRG=sha256sum SOURCE_FORMAT=tar.gz SOURCE_IN_SUBDIR=true -SOURCE_FILENAME= SOURCE_EXTRACT=true diff --git a/conf/nginx.conf b/conf/nginx.conf index 3115800..98e374a 100644 --- a/conf/nginx.conf +++ b/conf/nginx.conf @@ -4,11 +4,6 @@ location __PATH__/ { # Path to source alias __FINALPATH__/ ; - # Force usage of https - if ($scheme = http) { - rewrite ^ https://$server_name$request_uri? permanent; - } - index index.php; if (!-f $request_filename) { diff --git a/doc/.DS_Store b/doc/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..50d38e8f15dcc141f2636369472b790537c4e1d0 GIT binary patch literal 8196 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%0Da$d{;zHBDg-_*o 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%0DG`G7>dsa$j^HN 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

!N}#fZEQ$>Ar^wJ{KFZbWs?Raq_o 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

A(@`HjfpLUJ2Xs)}J3b^Lp1Dtbm1U= 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
?#*!zZteg>D-TtEBc`rA`oru|6e~YO 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

3@CRTl6(qd5F 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 literal 0 HcmV?d00001 diff --git a/manifest.json b/manifest.json index a5b2d35..aa50659 100644 --- a/manifest.json +++ b/manifest.json @@ -4,10 +4,16 @@ "packaging_format": 1, "description": { "en": "The personal, minimalist, super-fast, no-database delicious clone", - "fr": "Clone de delicious, rapide, simple et sans base de données." + "fr": "Clone de delicious, rapide, simple et sans base de données" }, "version": "0.12.1~ynh2", "url": "https://github.com/shaarli/Shaarli", + "upstream": { + "license": "MIT", + "demo": "https://demo.shaarli.org/", + "admindoc": "https://shaarli.readthedocs.io/en/master/", + "code": "https://github.com/shaarli/Shaarli" + }, "license": "MIT", "maintainer": { "name": "lapineige et rafi59", @@ -15,51 +21,32 @@ "url": "" }, "requirements": { - "yunohost": ">= 3.8.1" + "yunohost": ">= 4.3.0" }, "multi_instance": true, "services": [ "nginx", - "php7.0-fpm" + "php7.3-fpm" ], "arguments": { "install" : [ { "name": "domain", - "type": "domain", - "ask": { - "en": "Choose a domain for your Shaarli", - "fr": "Choisissez un domaine pour votre Shaarli" - }, - "example": "domain.org" + "type": "domain" }, { "name": "path", "type": "path", - "ask": { - "en": "Choose a path for your Shaarli", - "fr": "Choisissez un chemin pour votre Shaarli" - }, "example": "/shaarli", "default": "/shaarli" }, { "name": "admin", - "type": "user", - "ask": { - "en": "Choose the admin user", - "fr": "Choisissez l’administrateur" - }, - "example": "johndoe" + "type": "user" }, { "name": "password", - "type": "password", - "ask": { - "en": "Choose the admin password", - "fr": "Choisissez le mot de passe de l’administrateur" - }, - "example": "johndoe" + "type": "password" }, { "name": "title", @@ -74,10 +61,6 @@ { "name": "is_public", "type": "boolean", - "ask": { - "en": "Is it a public Shaarli site?", - "fr": "Est-ce un site Shaarli public ?" - }, "help": { "en": "If set as public, Shaarli will be visible to anyone, including non-Yunohost users. However only Shaarli users can add bookmarks. Your links will be public by default, but you can change that in Shaarli's configuration page.", "fr": "Si configuré en public, Shaarli sera visible par tout le monde, y compris des personnes sans compte sur votre Yunohost. Cependant seules les personnes avec un compte Shaarli pourrons ajouter des marques-pages. Vos nouveaux liens seront publics par défaut, mais vous pourrez changer ça dans la page de configuration de Shaarli." diff --git a/scripts/_common.sh b/scripts/_common.sh index 0ebbc18..9cdec16 100644 --- a/scripts/_common.sh +++ b/scripts/_common.sh @@ -7,7 +7,7 @@ # dependencies used by the app YNH_PHP_VERSION="7.3" -extra_php_dependencies="php${YNH_PHP_VERSION}-cli php${YNH_PHP_VERSION}-gettext php${YNH_PHP_VERSION}-curl php${YNH_PHP_VERSION}-intl php${YNH_PHP_VERSION}-gd php${YNH_PHP_VERSION}-mbstring" +pkg_dependencies="php${YNH_PHP_VERSION}-cli php${YNH_PHP_VERSION}-gettext php${YNH_PHP_VERSION}-curl php${YNH_PHP_VERSION}-intl php${YNH_PHP_VERSION}-gd php${YNH_PHP_VERSION}-mbstring" #================================================= # PERSONAL HELPERS @@ -54,146 +54,6 @@ ynh_smart_mktemp () { echo "$(mktemp --directory --tmpdir="$tmpdir")" } -# Create a dedicated config file from a template -# -# examples: -# ynh_add_config --template=".env" --destination="$final_path/.env" -# ynh_add_config --template="../conf/.env" --destination="$final_path/.env" -# ynh_add_config --template="/etc/nginx/sites-available/default" --destination="etc/nginx/sites-available/mydomain.conf" -# -# usage: ynh_add_config --template="template" --destination="destination" -# | arg: -t, --template= - Template config file to use -# | arg: -d, --destination= - Destination of the config file -# -# The template can be by default the name of a file in the conf directory -# of a YunoHost Package, a relative path or an absolute path -# The helper will use the template $template to generate a config file -# $destination by replacing the following keywords with global variables -# that should be defined before calling this helper : -# __PATH__ by $path_url -# __NAME__ by $app -# __NAMETOCHANGE__ by $app -# __USER__ by $app -# __FINALPATH__ by $final_path -# __PHPVERSION__ by $YNH_PHP_VERSION -# -# And any dynamic variables that should be defined before calling this helper like: -# __DOMAIN__ by $domain -# __APP__ by $app -# __VAR_1__ by $var_1 -# __VAR_2__ by $var_2 -# -# The helper will verify the checksum and backup the destination file -# if it's different before applying the new template. -# And it will calculate and store the destination file checksum -# into the app settings when configuration is done. -# -# -ynh_add_config () { - # Declare an array to define the options of this helper. - local legacy_args=tdv - local -A args_array=( [t]=template= [d]=destination= ) - local template - local destination - # Manage arguments with getopts - ynh_handle_getopts_args "$@" - local template_path - - if [ -f "../conf/$template" ]; then - template_path="../conf/$template" - elif [ -f "../settings/conf/$template" ]; then - template_path="../settings/conf/$template" - elif [ -f "$template" ]; then - template_path=$template - else - ynh_die --message="The provided template $template doesn't exist" - fi - - ynh_backup_if_checksum_is_different --file="$destination" - - cp "$template_path" "$destination" - - ynh_replace_vars --file="$destination" - - ynh_store_file_checksum --file="$destination" -} - -# Replace variables in a file -# -# usage: ynh_replace_vars --file="file" -# | arg: -f, --file= - File where to replace variables -# -# The helper will replace the following keywords with global variables -# that should be defined before calling this helper : -# __PATH__ by $path_url -# __NAME__ by $app -# __NAMETOCHANGE__ by $app -# __USER__ by $app -# __FINALPATH__ by $final_path -# __PHPVERSION__ by $YNH_PHP_VERSION -# -# And any dynamic variables that should be defined before calling this helper like: -# __DOMAIN__ by $domain -# __APP__ by $app -# __VAR_1__ by $var_1 -# __VAR_2__ by $var_2 -# -# -ynh_replace_vars () { - # Declare an array to define the options of this helper. - local legacy_args=f - local -A args_array=( [f]=file= ) - local file - # Manage arguments with getopts - ynh_handle_getopts_args "$@" - - # Replace specific YunoHost variables - if test -n "${path_url:-}" - then - # path_url_slash_less is path_url, or a blank value if path_url is only '/' - local path_url_slash_less=${path_url%/} - ynh_replace_string --match_string="__PATH__/" --replace_string="$path_url_slash_less/" --target_file="$file" - ynh_replace_string --match_string="__PATH__" --replace_string="$path_url" --target_file="$file" - fi - if test -n "${app:-}"; then - ynh_replace_string --match_string="__NAME__" --replace_string="$app" --target_file="$file" - ynh_replace_string --match_string="__NAMETOCHANGE__" --replace_string="$app" --target_file="$file" - ynh_replace_string --match_string="__USER__" --replace_string="$app" --target_file="$file" - fi - if test -n "${final_path:-}"; then - ynh_replace_string --match_string="__FINALPATH__" --replace_string="$final_path" --target_file="$file" - fi - if test -n "${YNH_PHP_VERSION:-}"; then - ynh_replace_string --match_string="__PHPVERSION__" --replace_string="$YNH_PHP_VERSION" --target_file="$file" - fi - if test -n "${ynh_node_load_PATH:-}"; then - ynh_replace_string --match_string="__YNH_NODE_LOAD_PATH__" --replace_string="$ynh_node_load_PATH" --target_file="$file" - fi - - # Replace others variables - - # List other unique (__ __) variables in $file - local uniques_vars=( $(grep -o '__[A-Z0-9_]*__' $file | sort --unique | sed "s@__\([^.]*\)__@\L\1@g" )) - - # Do the replacement - local delimit=@ - for one_var in "${uniques_vars[@]}" - do - # Validate that one_var is indeed defined - test -n "${!one_var:-}" || ynh_die --message="\$$one_var wasn't initialized when trying to replace __${one_var^^}__ in $file" - - # Escape delimiter in match/replace string - match_string="__${one_var^^}__" - match_string=${match_string//${delimit}/"\\${delimit}"} - replace_string="${!one_var}" - replace_string=${replace_string//${delimit}/"\\${delimit}"} - - # Actually replace (sed is used instead of ynh_replace_string to avoid triggering an epic amount of debug logs) - sed --in-place "s${delimit}${match_string}${delimit}${replace_string}${delimit}g" "$file" - done -} - - #================================================= # FUTURE OFFICIAL HELPERS #================================================= diff --git a/scripts/backup b/scripts/backup index 9b02445..feb1e4a 100644 --- a/scripts/backup +++ b/scripts/backup @@ -14,9 +14,6 @@ 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 diff --git a/scripts/install b/scripts/install index 62ca534..b4203b6 100644 --- a/scripts/install +++ b/scripts/install @@ -13,22 +13,20 @@ source /usr/share/yunohost/helpers # MANAGE SCRIPT FAILURE #================================================= -ynh_clean_setup () { - ### Remove this function if there's nothing to clean before calling the remove script. - true -} # Exit if an error occurs during the execution of the script ynh_abort_if_errors #================================================= # RETRIEVE ARGUMENTS FROM THE MANIFEST #================================================= + domain=$YNH_APP_ARG_DOMAIN path_url=$YNH_APP_ARG_PATH admin=$YNH_APP_ARG_ADMIN password=$YNH_APP_ARG_PASSWORD title=$YNH_APP_ARG_TITLE is_public=$YNH_APP_ARG_IS_PUBLIC +phpversion=$YNH_PHP_VERSION app=$YNH_APP_INSTANCE_NAME @@ -48,26 +46,16 @@ ynh_webpath_register --app=$app --domain=$domain --path_url=$path_url #================================================= ynh_script_progression --message="Storing installation settings..." -ynh_app_setting_set --app=$app --key=domain --value=$domain -ynh_app_setting_set --app=$app --key=path --value=$path_url -ynh_app_setting_set --app=$app --key=is_public --value=$is_public +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=phpversion --value=$phpversion #================================================= -# DOWNLOAD, CHECK AND UNPACK SOURCE +# INSTALL DEPENDENCIES #================================================= -ynh_script_progression --message="Setting up source files..." +ynh_script_progression --message="Installing dependencies..." -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" - -#================================================= -# NGINX CONFIGURATION -#================================================= -ynh_script_progression --message="Configuring NGINX web server..." - -# Create a dedicated NGINX config -ynh_add_nginx_config +ynh_install_app_dependencies $pkg_dependencies #================================================= # CREATE DEDICATED USER @@ -77,13 +65,35 @@ ynh_script_progression --message="Configuring system user..." # Create a system user ynh_system_user_create --username=$app +#================================================= +# DOWNLOAD, CHECK AND UNPACK SOURCE +#================================================= +ynh_script_progression --message="Setting up source files..." + +ynh_app_setting_set --app=$app --key=final_path --value=$final_path +# Download, check integrity, uncompress and patch the source from app.src +ynh_setup_source --dest_dir="$final_path" + +#chmod 750 "$final_path" +#chmod -R o-rwx "$final_path" +#chmod -R g+rwX $final_path/{cache/,data/,pagecache/,tmp/} +#chown -R $app:www-data "$final_path" + +#================================================= +# NGINX CONFIGURATION +#================================================= +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 --usage=low --footprint=low --package="$extra_php_dependencies" +ynh_add_fpm_config --usage=low --footprint=low #================================================= # SETUP LOGROTATE @@ -138,19 +148,16 @@ chmod -R g+rwX $final_path/{cache/,data/,pagecache/,tmp/} ynh_script_progression --message="Configuring Fail2Ban..." # Create a dedicated Fail2Ban config - ynh_add_fail2ban_config --logpath="$final_path/data/log.txt" --failregex="\s-\s\s-\sLogin failed for user.*$" #================================================= # SETUP SSOWAT #================================================= -ynh_script_progression --message="Configuring SSOwat..." +ynh_script_progression --message="Configuring permissions..." # Make app public if necessary if [ $is_public -eq 1 ] then - # Everyone can access the app. - # The "main" permission is automatically created before the install script. ynh_permission_update --permission "main" --add "visitors" fi diff --git a/scripts/remove b/scripts/remove index bcfbfc6..7c0e74d 100644 --- a/scripts/remove +++ b/scripts/remove @@ -47,6 +47,7 @@ ynh_remove_fpm_config # REMOVE LOGROTATE CONFIGURATION #================================================= ynh_script_progression --message="Removing logrotate configuration..." + # Remove the app-specific logrotate config ynh_remove_logrotate diff --git a/scripts/restore b/scripts/restore index 5bbee27..1813606 100644 --- a/scripts/restore +++ b/scripts/restore @@ -14,9 +14,6 @@ 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 @@ -37,8 +34,6 @@ phpversion=$(ynh_app_setting_get --app=$app --key=phpversion) #================================================= ynh_script_progression --message="Validating restoration parameters..." -ynh_webpath_available --domain=$domain --path_url=$path_url \ - || ynh_die --message="Path not available: ${domain}${path_url}" test ! -d $final_path \ || ynh_die --message="There is already a directory: $final_path " @@ -47,16 +42,10 @@ test ! -d $final_path \ #================================================= # RESTORE THE NGINX CONFIGURATION #================================================= +ynh_script_progression --message="Restoring the NGINX configuration..." ynh_restore_file --origin_path="/etc/nginx/conf.d/$domain.d/$app.conf" -#================================================= -# RESTORE THE APP MAIN DIR -#================================================= -ynh_script_progression --message="Restoring the app main directory..." - -ynh_restore_file --origin_path="$final_path" - #================================================= # RECREATE THE DEDICATED USER #================================================= @@ -65,6 +54,13 @@ ynh_script_progression --message="Recreating the dedicated system user..." # Create the dedicated user (if not existing) ynh_system_user_create --username=$app +#================================================= +# RESTORE THE APP MAIN DIR +#================================================= +ynh_script_progression --message="Restoring the app main directory..." + +ynh_restore_file --origin_path="$final_path" + #================================================= # RESTORE USER RIGHTS #================================================= @@ -77,14 +73,24 @@ chmod -R g+rwX $final_path/{cache/,data/,pagecache/,tmp/} #================================================= # RESTORE THE PHP-FPM CONFIGURATION #================================================= +ynh_script_progression --message="Restoring the PHP-FPM configuration..." ynh_restore_file --origin_path="/etc/php/$phpversion/fpm/pool.d/$app.conf" +#================================================= +# REINSTALL DEPENDENCIES +#================================================= +ynh_script_progression --message="Reinstalling dependencies..." + +# Define and install dependencies +ynh_install_app_dependencies $pkg_dependencies + #================================================= # SPECIFIC RESTORATION #================================================= # RESTORE THE LOGROTATE CONFIGURATION #================================================= +ynh_script_progression --message="Restoring the logrotate configuration..." ynh_restore_file --origin_path="/etc/logrotate.d/$app" diff --git a/scripts/upgrade b/scripts/upgrade index 9b3d266..ce8c9fb 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -18,7 +18,6 @@ app=$YNH_APP_INSTANCE_NAME domain=$(ynh_app_setting_get --app=$app --key=domain) path_url=$(ynh_app_setting_get --app=$app --key=path) -is_public=$(ynh_app_setting_get --app=$app --key=is_public) final_path=$(ynh_app_setting_get --app=$app --key=final_path) #================================================= @@ -27,26 +26,6 @@ final_path=$(ynh_app_setting_get --app=$app --key=final_path) upgrade_type=$(ynh_check_app_version_changed) -#================================================= -# ENSURE DOWNWARD COMPATIBILITY -#================================================= -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 [ -n "$is_public" ]; then - # Delete is_public key. It is now handled by the permissions system - ynh_app_setting_delete --app=$app --key=is_public - # Delete legacy permission settings - ynh_app_setting_delete --app=$app --key=unprotected_uris - ynh_app_setting_delete --app=$app --key=protected_uris - ynh_app_setting_delete --app=$app --key=skipped_uris -fi - #================================================= # BACKUP BEFORE UPGRADE THEN ACTIVE TRAP #================================================= @@ -61,6 +40,32 @@ ynh_clean_setup () { # 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..." + +# 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..." + +# Create a dedicated user (if not existing) +ynh_system_user_create --username=$app + #================================================= # DOWNLOAD, CHECK AND UNPACK SOURCE #================================================= @@ -98,12 +103,11 @@ ynh_script_progression --message="Upgrading NGINX web server configuration..." ynh_add_nginx_config #================================================= -# CREATE DEDICATED USER +# UPGRADE DEPENDENCIES #================================================= -ynh_script_progression --message="Making sure dedicated system user exists..." +ynh_script_progression --message="Upgrading dependencies..." -# Create a dedicated user (if not existing) -ynh_system_user_create --username=$app +ynh_install_app_dependencies $pkg_dependencies #================================================= # PHP-FPM CONFIGURATION @@ -111,7 +115,7 @@ ynh_system_user_create --username=$app ynh_script_progression --message="Upgrading PHP-FPM configuration..." # Create a dedicated php-fpm config -ynh_add_fpm_config --usage=low --footprint=low --package="$extra_php_dependencies" +ynh_add_fpm_config --usage=low --footprint=low #================================================= # SETUP LOGROTATE From 43d2991fb2375ef5644d55d5a9172a176d9a5ec3 Mon Sep 17 00:00:00 2001 From: Alexandre Aubin Date: Mon, 29 Nov 2021 16:14:22 +0100 Subject: [PATCH 35/35] Delete .DS_Store --- doc/.DS_Store | Bin 8196 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 doc/.DS_Store diff --git a/doc/.DS_Store b/doc/.DS_Store deleted file mode 100644 index 50d38e8f15dcc141f2636369472b790537c4e1d0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8196 zcmeHMTWl0n82-Pulv#IZr=U{DEiTkr(3)O?n2IS=c99l}t-aV54DIgDNGD8Z>dx-A zh%x)7QF#O}F(zm<8hr2pyu{msF(JnIAT>rKKKR0mi7(!L@jr8B3AFUVm>42+l5@T@ z=l}n6X1@K-oc(u+2s?{rCs892DO?3=ac-_qgk98Sr79e$W(3C*S>%#WGvrZWnRhf0 zF%U5jF%U5jF%U6uH88+uwkXO9=f1Q?ZNxytz%|K$ct0e$3N%72OAKBe+yp5AV+{`n zh5MWb1To1FjS$NcgHWDRW)BEM5vCZB;cQO|cSa+`vP2n9kl}=IWrP_Dg4H=L8MqS+ ziBTId5HYZv0g=1MIcLvNp0oE$^LO9zOR22mWqFssm7Q~JztGX~Evl+(R@JUnV%Nph zHF{rv-=4kdl(x2HTl0f+1>1A|2d%u%IHlG5Gv0iE&U1(ImavcKJf}G8`cqm%F5~2i zPNrb>I?jmwsKsOTelG7h&XDKZVw%Z`g0)Z(wq>S?{l1qkq=LyNY@T0wX+_@}ws=yz zWTkm(UqkFv-TK7FmfPF6cK4(f>$Qfp>#kST{kCbj1^Z#!%8$+4W?^PBS1>O&^4w9hleY^HWbk^Y-D z==uR+N#!kW%`o7$R$U$S`H{3t=y*q)s*WDET~qVJr8+uQeay*ZEk`qBa-F-jsrqJvF{c9tK-Z$Mi(yu;A-gJR`@j9(a>vs}Kbv*Ge-zN<-L>orYrPfBw| z4$a19*$tk%*)Zf)jNi#k)J16;plQ~}Q94G?(MdW@Z__*U34Kmq(|Ni;Khe+h8~sjy zpbBxUK^^MRh!(VBGq#`$J=g&Q{kR`PcmTsVfN5lrgNa%AD58XUl<_29dtAVe_(k4eRd^WCK6zbf@hkUMR`pz{>f={dbz*nl z?*2Vjv8unRlTyCn#`VdTEq8X^eQ)nYDJ=Q$FVp9xk_>bxg%${~BCtRKi!At?6HV$Z zmHn`EpNz3&tp!EsPFpR#HzjUWSZbOQT&k^!c#QXhw6!MM6h*6&mi9zvj5mN*Ep1!X zZ3;_WTP3aC>h>6K2CYU~dsIVV&1<#Nno@Vg#J1GvUyAoLI!8aSaQ_0KmPNac1-p^O z+K%o(tSO{%9|l>l!x+IB4q^%!7VTj;ELsl>ID(^i43Fc9P`Jl%0?*=kynq++Dqh3u zcmt-eVzufKTxSi}<@G(jBOXRwB-?EZx#b-gP|p5PMXFe|d0p6*2G+7!YSa zmqwBQ?^^ly|G+6~A_gJ`{+|q>COwkg$