From 343fa03a05a20c29042e265435171afe7d435e7c Mon Sep 17 00:00:00 2001 From: yalh76 Date: Tue, 5 Feb 2019 21:08:32 +0100 Subject: [PATCH 01/96] adding _common.sh from example_ynh --- scripts/_common.sh | 13 +++++++++++++ scripts/backup | 2 ++ scripts/install | 3 +++ scripts/remove | 5 ++++- scripts/restore | 2 ++ scripts/upgrade | 2 +- 6 files changed, 25 insertions(+), 2 deletions(-) create mode 100644 scripts/_common.sh diff --git a/scripts/_common.sh b/scripts/_common.sh new file mode 100644 index 0000000..bb04a03 --- /dev/null +++ b/scripts/_common.sh @@ -0,0 +1,13 @@ +#!/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 +} \ No newline at end of file diff --git a/scripts/backup b/scripts/backup index 1d0109b..90f0a37 100644 --- a/scripts/backup +++ b/scripts/backup @@ -5,6 +5,8 @@ #================================================= # IMPORT GENERIC HELPERS #================================================= + +source ../settings/scripts/_common.sh source /usr/share/yunohost/helpers #================================================= diff --git a/scripts/install b/scripts/install index ab1bc82..ae47673 100755 --- a/scripts/install +++ b/scripts/install @@ -1,9 +1,12 @@ #!/bin/bash + #================================================= # GENERIC START #================================================= # IMPORT GENERIC HELPERS #================================================= + +source _common.sh source _future.sh source ynh_systemd_action source /usr/share/yunohost/helpers diff --git a/scripts/remove b/scripts/remove index f0cfa95..a5cea32 100755 --- a/scripts/remove +++ b/scripts/remove @@ -1,9 +1,12 @@ #!/bin/bash + #================================================= -# GENERIC STARTING +# GENERIC START #================================================= # IMPORT GENERIC HELPERS #================================================= + +source _common.sh source _future.sh source /usr/share/yunohost/helpers diff --git a/scripts/restore b/scripts/restore index 41a87f1..c5f84f4 100644 --- a/scripts/restore +++ b/scripts/restore @@ -5,6 +5,8 @@ #================================================= # IMPORT GENERIC HELPERS #================================================= + +source ../settings/scripts/_common.sh source ../settings/scripts/_future.sh source ../settings/scripts/ynh_systemd_action source /usr/share/yunohost/helpers diff --git a/scripts/upgrade b/scripts/upgrade index 357efd5..c4f992c 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -6,7 +6,7 @@ # IMPORT GENERIC HELPERS #================================================= -source _future.sh +source _common.sh source ynh_systemd_action source /usr/share/yunohost/helpers From e194cf9844e1362445ee75132791c52d9e31c852 Mon Sep 17 00:00:00 2001 From: yalh76 Date: Tue, 5 Feb 2019 21:10:09 +0100 Subject: [PATCH 02/96] Reorder from example_ynh --- manifest.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manifest.json b/manifest.json index 98c2599..d9a6f81 100644 --- a/manifest.json +++ b/manifest.json @@ -2,11 +2,11 @@ "name": "Wekan", "id": "wekan", "packaging_format": 1, - "version": "1.07~ynh2", "description": { "en": "Trello-like kanban", "fr": "Un kanban similaire à Trello" }, + "version": "1.07~ynh2", "url": "https://wekan.io", "license": "MIT", "maintainer": { From 82a8aa595b53e72cbb59a874d31888e3f495474f Mon Sep 17 00:00:00 2001 From: yalh76 Date: Tue, 5 Feb 2019 21:12:41 +0100 Subject: [PATCH 03/96] Remove mongodb, not a yunohost base service --- manifest.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/manifest.json b/manifest.json index d9a6f81..e01f71f 100644 --- a/manifest.json +++ b/manifest.json @@ -19,8 +19,7 @@ }, "multi_instance": true, "services": [ - "nginx", - "mongod" + "nginx" ], "arguments": { "install" : [ From 3657d93979b459a3d4a61c57aeac2f49b03437c0 Mon Sep 17 00:00:00 2001 From: yalh76 Date: Tue, 5 Feb 2019 21:13:37 +0100 Subject: [PATCH 04/96] Remove old source filename --- conf/app.src | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/app.src b/conf/app.src index 61359cd..0b7bb83 100644 --- a/conf/app.src +++ b/conf/app.src @@ -5,4 +5,4 @@ SOURCE_SUM=1956dd19f17d76a6d820a15bcf93a3eb12172f9f5cb1dd40d9925b977e8f930d SOURCE_SUM_PRG=sha256sum ARCH_FORMAT=tar.gz SOURCE_IN_SUBDIR=true -SOURCE_FILENAME=wekan-1.07.tar.gz +SOURCE_FILENAME= From f8ca4e68c02a325281ff10babe902b3636ef3c6e Mon Sep 17 00:00:00 2001 From: yalh76 Date: Tue, 5 Feb 2019 21:16:13 +0100 Subject: [PATCH 05/96] update version number to 2.09 --- README.md | 2 ++ manifest.json | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 2ed8ff1..ee4286f 100644 --- a/README.md +++ b/README.md @@ -5,6 +5,8 @@ Wekan is an open-source kanban board (task manager and organizer) [![Integration level](https://dash.yunohost.org/integration/wekan.svg)](https://dash.yunohost.org/appci/app/wekan) [![Install Wordpress with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=wekan) +**Shipped version:** 2.09 + ## Screenshot ![](screenshot.jpg) diff --git a/manifest.json b/manifest.json index e01f71f..13cf267 100644 --- a/manifest.json +++ b/manifest.json @@ -6,7 +6,7 @@ "en": "Trello-like kanban", "fr": "Un kanban similaire à Trello" }, - "version": "1.07~ynh2", + "version": "2.09~ynh1", "url": "https://wekan.io", "license": "MIT", "maintainer": { From 03459a20451e2607b5c9b109a25e99f950ca0e8c Mon Sep 17 00:00:00 2001 From: yalh76 Date: Tue, 5 Feb 2019 21:40:21 +0100 Subject: [PATCH 06/96] Apply example_ynh on install --- scripts/install | 86 +++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 77 insertions(+), 9 deletions(-) diff --git a/scripts/install b/scripts/install index ae47673..c242500 100755 --- a/scripts/install +++ b/scripts/install @@ -14,10 +14,14 @@ 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 #================================================= @@ -25,6 +29,16 @@ 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 #================================================= @@ -34,9 +48,12 @@ app=$YNH_APP_INSTANCE_NAME # Check machine architecture (in particular, we don't support ARM and 32bit machines) [[ $(uname -m) == "x86_64" ]] || ynh_die "Sorry, but this app can only be installed on a x86, 64 bits machine :(" +### 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" +# Normalize the url path syntax path_url=$(ynh_normalize_url_path $path_url) # Register (book) web path @@ -45,20 +62,39 @@ ynh_webpath_register $app $domain $path_url #================================================= # STORE SETTINGS FROM MANIFEST #================================================= + +ynh_app_setting_set $app domain $domain +ynh_app_setting_set $app path $path_url ynh_app_setting_set $app is_public $is_public +#================================================= +# STANDARD MODIFICATIONS #================================================= # FIND AND OPEN A PORT #================================================= +### Use these lines if you have to open a port for the application +### `ynh_find_port` will find the first available port starting from the given port. +### If you're not using these lines: +### - Remove the section "CLOSE A PORT" in the remove script + # Find a free port -port=$(ynh_find_port 8081) +port=$(ynh_find_port 8095) +# Open this port +#yunohost firewall allow --no-upnp TCP $port 2>&1 ynh_app_setting_set $app port $port #================================================= # INSTALL 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 +### - As well as the section "REINSTALL DEPENDENCIES" in the restore script +### - And the section "UPGRADE DEPENDENCIES" in the upgrade script + ynh_print_info "Installing nodejs ..." ynh_install_nodejs 8.9.3 @@ -69,16 +105,21 @@ ynh_install_app_dependencies "mongodb mongodb-server" # DOWNLOAD, CHECK AND UNPACK SOURCE #================================================= +### `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_print_info "Setting up Wekan's sources ..." ynh_app_setting_set $app final_path $final_path # Download, check integrity, uncompress and patch the source from app.src -# For this app sources are in app subdirectory ynh_setup_source "$final_path" #================================================= # NGINX CONFIGURATION #================================================= +### `ynh_add_nginx_config` will use the file conf/nginx.conf + # Create a dedicated nginx config ynh_print_info "Configuring nginx ..." ynh_add_nginx_config @@ -93,14 +134,21 @@ ynh_system_user_create $app "$final_path" #================================================= # SPECIFIC SETUP #================================================= +# Install Wekan +#================================================= + # Install wekan dependencies ynh_print_info "Installing npm dependencies ..." chown -R $app $final_path pushd $final_path/programs/server -ynh_use_nodejs -npm install + ynh_use_nodejs + npm install popd +#================================================= +# Start MONGODB +#================================================= + # Start mogodb ynh_print_info "Starting mongodb ..." systemctl enable mongodb @@ -109,6 +157,17 @@ systemctl restart mongodb #================================================= # SETUP SYSTEMD #================================================= +### `ynh_systemd_config` is used to configure a systemd script for an app. +### It can be used for apps that use sysvinit (with adaptation) or systemd. +### Have a look at the app to be sure this app needs a systemd script. +### `ynh_systemd_config` will use the file conf/systemd.service +### If you're not using these lines: +### - You can remove those files in conf/. +### - Remove the section "BACKUP SYSTEMD" in the backup script +### - Remove also the section "STOP AND REMOVE SERVICE" in the remove script +### - As well as the section "RESTORE SYSTEMD" in the restore script +### - And the section "SETUP SYSTEMD" in the upgrade script + # Create a dedicated systemd config ynh_print_info "Adding wekan systemd service ..." ynh_replace_string "__NODEJS__" "$nodejs_use_version" "../conf/systemd.service" @@ -131,8 +190,17 @@ chmod -R 640 "$final_path" find "$final_path" -type d -print0 | xargs -0 chmod 750 #================================================= -# ADD SERVICE IN ADMIN PANEL +# ADVERTISE SERVICE IN ADMIN PANEL #================================================= + +### `yunohost service add` is a CLI yunohost command to add a service in the admin panel. +### You'll find the service in the 'services' section of YunoHost admin panel. +### This CLI command would be useless if the app does not have any services (systemd or sysvinit) +### If you're not using these lines: +### - You can remove these files in conf/. +### - Remove the section "REMOVE SERVICE FROM ADMIN PANEL" in the remove script +### - As well as the section ADVERTISE SERVICE IN ADMIN PANEL" in the restore script + yunohost service add mongodb --log "/var/log/mongodb/mongodb.log" yunohost service add $app @@ -140,11 +208,11 @@ yunohost service add $app # SETUP SSOWAT #================================================= -# Make app public if necessary or protect it +# 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 "/" + # unprotected_uris allows SSO credentials to be passed anyway. + ynh_app_setting_set $app unprotected_uris "/" fi #================================================= From 48373305e6f75a09fc4717a7a6b8125401dc63a8 Mon Sep 17 00:00:00 2001 From: yalh76 Date: Tue, 5 Feb 2019 21:41:22 +0100 Subject: [PATCH 07/96] Correct LICENSE --- LICENSE | 2666 +------------------------------------------------------ 1 file changed, 21 insertions(+), 2645 deletions(-) diff --git a/LICENSE b/LICENSE index 2b6ef1b..7cd6c7a 100644 --- a/LICENSE +++ b/LICENSE @@ -1,2645 +1,21 @@ - GNU AFFERO GENERAL PUBLIC LICENSE - Version 3, 19 November 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU Affero General Public License is a free, copyleft license for -software and other kinds of works, specifically designed to ensure -cooperation with the community in the case of network server software. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -our General Public Licenses are intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - Developers that use our General Public Licenses protect your rights -with two steps: (1) assert copyright on the software, and (2) offer -you this License which gives you legal permission to copy, distribute -and/or modify the software. - - A secondary benefit of defending all users' freedom is that -improvements made in alternate versions of the program, if they -receive widespread use, become available for other developers to -incorporate. Many developers of free software are heartened and -encouraged by the resulting cooperation. However, in the case of -software used on network servers, this result may fail to come about. -The GNU General Public License permits making a modified version and -letting the public access it on a server without ever releasing its -source code to the public. - - The GNU Affero General Public License is designed specifically to -ensure that, in such cases, the modified source code becomes available -to the community. It requires the operator of a network server to -provide the source code of the modified version running there to the -users of that server. Therefore, public use of a modified version, on -a publicly accessible server, gives the public access to the source -code of the modified version. - - An older license, called the Affero General Public License and -published by Affero, was designed to accomplish similar goals. This is -a different license, not a version of the Affero GPL, but Affero has -released a new version of the Affero GPL which permits relicensing under -this license. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU Affero General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Remote Network Interaction; Use with the GNU General Public License. - - Notwithstanding any other provision of this License, if you modify the -Program, your modified version must prominently offer all users -interacting with it remotely through a computer network (if your version -supports such interaction) an opportunity to receive the Corresponding -Source of your version by providing access to the Corresponding Source -from a network server at no charge, through some standard or customary -means of facilitating copying of software. This Corresponding Source -shall include the Corresponding Source for any work covered by version 3 -of the GNU General Public License that is incorporated pursuant to the -following paragraph. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the work with which it is combined will remain governed by version -3 of the GNU General Public License. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU Affero General Public License from time to time. Such new versions -will be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU Affero General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU Affero General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU Affero General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published - by the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If your software can interact with users remotely through a computer -network, you should also make sure that it provides a way for users to -get its source. For example, if your program is a web application, its -interface could display a "Source" link that leads users to an archive -of the code. There are many ways you could offer source, and different -solutions will be better for different programs; see section 13 for the -specific requirements. - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU AGPL, see -. - GNU AFFERO GENERAL PUBLIC LICENSE - Version 3, 19 November 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU Affero General Public License is a free, copyleft license for -software and other kinds of works, specifically designed to ensure -cooperation with the community in the case of network server software. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -our General Public Licenses are intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - Developers that use our General Public Licenses protect your rights -with two steps: (1) assert copyright on the software, and (2) offer -you this License which gives you legal permission to copy, distribute -and/or modify the software. - - A secondary benefit of defending all users' freedom is that -improvements made in alternate versions of the program, if they -receive widespread use, become available for other developers to -incorporate. Many developers of free software are heartened and -encouraged by the resulting cooperation. However, in the case of -software used on network servers, this result may fail to come about. -The GNU General Public License permits making a modified version and -letting the public access it on a server without ever releasing its -source code to the public. - - The GNU Affero General Public License is designed specifically to -ensure that, in such cases, the modified source code becomes available -to the community. It requires the operator of a network server to -provide the source code of the modified version running there to the -users of that server. Therefore, public use of a modified version, on -a publicly accessible server, gives the public access to the source -code of the modified version. - - An older license, called the Affero General Public License and -published by Affero, was designed to accomplish similar goals. This is -a different license, not a version of the Affero GPL, but Affero has -released a new version of the Affero GPL which permits relicensing under -this license. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU Affero General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Remote Network Interaction; Use with the GNU General Public License. - - Notwithstanding any other provision of this License, if you modify the -Program, your modified version must prominently offer all users -interacting with it remotely through a computer network (if your version -supports such interaction) an opportunity to receive the Corresponding -Source of your version by providing access to the Corresponding Source -from a network server at no charge, through some standard or customary -means of facilitating copying of software. This Corresponding Source -shall include the Corresponding Source for any work covered by version 3 -of the GNU General Public License that is incorporated pursuant to the -following paragraph. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the work with which it is combined will remain governed by version -3 of the GNU General Public License. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU Affero General Public License from time to time. Such new versions -will be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU Affero General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU Affero General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU Affero General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published - by the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If your software can interact with users remotely through a computer -network, you should also make sure that it provides a way for users to -get its source. For example, if your program is a web application, its -interface could display a "Source" link that leads users to an archive -of the code. There are many ways you could offer source, and different -solutions will be better for different programs; see section 13 for the -specific requirements. - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU AGPL, see -. - GNU AFFERO GENERAL PUBLIC LICENSE - Version 3, 19 November 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU Affero General Public License is a free, copyleft license for -software and other kinds of works, specifically designed to ensure -cooperation with the community in the case of network server software. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -our General Public Licenses are intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - Developers that use our General Public Licenses protect your rights -with two steps: (1) assert copyright on the software, and (2) offer -you this License which gives you legal permission to copy, distribute -and/or modify the software. - - A secondary benefit of defending all users' freedom is that -improvements made in alternate versions of the program, if they -receive widespread use, become available for other developers to -incorporate. Many developers of free software are heartened and -encouraged by the resulting cooperation. However, in the case of -software used on network servers, this result may fail to come about. -The GNU General Public License permits making a modified version and -letting the public access it on a server without ever releasing its -source code to the public. - - The GNU Affero General Public License is designed specifically to -ensure that, in such cases, the modified source code becomes available -to the community. It requires the operator of a network server to -provide the source code of the modified version running there to the -users of that server. Therefore, public use of a modified version, on -a publicly accessible server, gives the public access to the source -code of the modified version. - - An older license, called the Affero General Public License and -published by Affero, was designed to accomplish similar goals. This is -a different license, not a version of the Affero GPL, but Affero has -released a new version of the Affero GPL which permits relicensing under -this license. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU Affero General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Remote Network Interaction; Use with the GNU General Public License. - - Notwithstanding any other provision of this License, if you modify the -Program, your modified version must prominently offer all users -interacting with it remotely through a computer network (if your version -supports such interaction) an opportunity to receive the Corresponding -Source of your version by providing access to the Corresponding Source -from a network server at no charge, through some standard or customary -means of facilitating copying of software. This Corresponding Source -shall include the Corresponding Source for any work covered by version 3 -of the GNU General Public License that is incorporated pursuant to the -following paragraph. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the work with which it is combined will remain governed by version -3 of the GNU General Public License. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU Affero General Public License from time to time. Such new versions -will be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU Affero General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU Affero General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU Affero General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published - by the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If your software can interact with users remotely through a computer -network, you should also make sure that it provides a way for users to -get its source. For example, if your program is a web application, its -interface could display a "Source" link that leads users to an archive -of the code. There are many ways you could offer source, and different -solutions will be better for different programs; see section 13 for the -specific requirements. - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU AGPL, see -. - GNU AFFERO GENERAL PUBLIC LICENSE - Version 3, 19 November 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU Affero General Public License is a free, copyleft license for -software and other kinds of works, specifically designed to ensure -cooperation with the community in the case of network server software. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -our General Public Licenses are intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - Developers that use our General Public Licenses protect your rights -with two steps: (1) assert copyright on the software, and (2) offer -you this License which gives you legal permission to copy, distribute -and/or modify the software. - - A secondary benefit of defending all users' freedom is that -improvements made in alternate versions of the program, if they -receive widespread use, become available for other developers to -incorporate. Many developers of free software are heartened and -encouraged by the resulting cooperation. However, in the case of -software used on network servers, this result may fail to come about. -The GNU General Public License permits making a modified version and -letting the public access it on a server without ever releasing its -source code to the public. - - The GNU Affero General Public License is designed specifically to -ensure that, in such cases, the modified source code becomes available -to the community. It requires the operator of a network server to -provide the source code of the modified version running there to the -users of that server. Therefore, public use of a modified version, on -a publicly accessible server, gives the public access to the source -code of the modified version. - - An older license, called the Affero General Public License and -published by Affero, was designed to accomplish similar goals. This is -a different license, not a version of the Affero GPL, but Affero has -released a new version of the Affero GPL which permits relicensing under -this license. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU Affero General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Remote Network Interaction; Use with the GNU General Public License. - - Notwithstanding any other provision of this License, if you modify the -Program, your modified version must prominently offer all users -interacting with it remotely through a computer network (if your version -supports such interaction) an opportunity to receive the Corresponding -Source of your version by providing access to the Corresponding Source -from a network server at no charge, through some standard or customary -means of facilitating copying of software. This Corresponding Source -shall include the Corresponding Source for any work covered by version 3 -of the GNU General Public License that is incorporated pursuant to the -following paragraph. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the work with which it is combined will remain governed by version -3 of the GNU General Public License. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU Affero General Public License from time to time. Such new versions -will be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU Affero General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU Affero General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU Affero General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published - by the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If your software can interact with users remotely through a computer -network, you should also make sure that it provides a way for users to -get its source. For example, if your program is a web application, its -interface could display a "Source" link that leads users to an archive -of the code. There are many ways you could offer source, and different -solutions will be better for different programs; see section 13 for the -specific requirements. - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU AGPL, see -. - +The MIT License (MIT) + +Copyright (c) 2014-2019 The Wekan Team + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file From afa9e6d452b93a44c1562741c041934b72775cac Mon Sep 17 00:00:00 2001 From: yalh76 Date: Tue, 5 Feb 2019 21:57:12 +0100 Subject: [PATCH 08/96] Adding a db_name variable Sanitize before being used: $(ynh_sanitize_dbid $app) --- scripts/backup | 7 ++++++- scripts/install | 37 +++++++++++++++++++++++++++---------- scripts/remove | 3 ++- scripts/restore | 3 ++- scripts/upgrade | 12 ++++++++++-- 5 files changed, 47 insertions(+), 15 deletions(-) diff --git a/scripts/backup b/scripts/backup index 90f0a37..8b1beaf 100644 --- a/scripts/backup +++ b/scripts/backup @@ -13,6 +13,10 @@ 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 @@ -24,6 +28,7 @@ app=$YNH_APP_INSTANCE_NAME final_path=$(ynh_app_setting_get $app final_path) domain=$(ynh_app_setting_get $app domain) +db_name=$(ynh_app_setting_get $app db_name) #================================================= # STANDARD BACKUP STEPS @@ -39,5 +44,5 @@ ynh_backup "/etc/systemd/system/$app.service" # BACKUP OF MONGODB #================================================= -mongodump --db "$app" -o "./dump" +mongodump --db "$db_name" -o "./dump" diff --git a/scripts/install b/scripts/install index c242500..9b804b2 100755 --- a/scripts/install +++ b/scripts/install @@ -101,6 +101,32 @@ ynh_install_nodejs 8.9.3 ynh_print_info "Installing mongodb dependencies ..." ynh_install_app_dependencies "mongodb mongodb-server" +#================================================= +# Start MONGODB +#================================================= + +# Start mogodb +ynh_print_info "Starting mongodb ..." +systemctl enable mongodb +systemctl restart mongodb + +#================================================= +# CREATE A MONGODB DATABASE +#================================================= + +### Use these lines if you need a database for the application. +### `ynh_mysql_setup_db` will create a database, an associated user and a ramdom password. +### The password will be stored as 'mysqlpwd' into the app settings, +### and will be available as $db_pwd +### If you're not using these lines: +### - Remove the section "BACKUP THE MYSQL DATABASE" in the backup script +### - Remove also the section "REMOVE THE MYSQL DATABASE" in the remove script +### - As well as the section "RESTORE THE MYSQL DATABASE" in the restore script + +db_name=$(ynh_sanitize_dbid $app) +ynh_app_setting_set $app db_name $db_name +#ynh_mysql_setup_db $db_name $db_name + #================================================= # DOWNLOAD, CHECK AND UNPACK SOURCE #================================================= @@ -145,15 +171,6 @@ pushd $final_path/programs/server npm install popd -#================================================= -# Start MONGODB -#================================================= - -# Start mogodb -ynh_print_info "Starting mongodb ..." -systemctl enable mongodb -systemctl restart mongodb - #================================================= # SETUP SYSTEMD #================================================= @@ -172,7 +189,7 @@ systemctl restart mongodb ynh_print_info "Adding wekan systemd service ..." ynh_replace_string "__NODEJS__" "$nodejs_use_version" "../conf/systemd.service" ynh_replace_string "__ENV_PATH__" "$PATH" "../conf/systemd.service" -ynh_replace_string "__DB_NAME__" "$app" "../conf/systemd.service" +ynh_replace_string "__DB_NAME__" "$db_name" "../conf/systemd.service" ynh_replace_string "__URI__" "$path_url" "../conf/systemd.service" ynh_replace_string "__PORT__" "$port" "../conf/systemd.service" ynh_replace_string "__DOMAIN__" "$domain" "../conf/systemd.service" diff --git a/scripts/remove b/scripts/remove index a5cea32..76aacd2 100755 --- a/scripts/remove +++ b/scripts/remove @@ -15,6 +15,7 @@ source /usr/share/yunohost/helpers #================================================= readonly app=$YNH_APP_INSTANCE_NAME readonly domain=$(ynh_app_setting_get "$app" domain) +db_name=$(ynh_app_setting_get $app db_name) readonly final_path=$(ynh_app_setting_get "$app" final_path) #================================================= @@ -38,7 +39,7 @@ fi #================================================= # REMOVE DB #================================================= -mongo $app --eval "db.dropDatabase()" +mongo $db_name --eval "db.dropDatabase()" #================================================= # REMOVE DEPENDENCIES diff --git a/scripts/restore b/scripts/restore index c5f84f4..ce81066 100644 --- a/scripts/restore +++ b/scripts/restore @@ -28,6 +28,7 @@ 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) +db_name=$(ynh_app_setting_get $app db_name) port=$(ynh_app_setting_get $app final_path) #================================================= @@ -66,7 +67,7 @@ ynh_install_app_dependencies "mongodb mongodb-server" # Start mogodb systemctl enable mongodb systemctl start mongodb -mongorestore --db $app ./dump/$app +mongorestore --db $db_name ./dump/$app #================================================= # SPECIFIC SETUP diff --git a/scripts/upgrade b/scripts/upgrade index c4f992c..1faefa2 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -20,8 +20,16 @@ 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) +db_name=$(ynh_app_setting_get $app db_name) port=$(ynh_app_setting_get $app port) +if [ -z "$db_name" ] +then + db_name=$app + ynh_app_setting_set "$app" db_name "$db_name" +fi + + #================================================= # Check version #================================================= @@ -55,7 +63,7 @@ if ynh_version_gt "0.77-2" "${previous_version}" ; then # Create a dedicated systemd config ynh_replace_string "__NODEJS__" "$nodejs_use_version" "../conf/systemd.service" ynh_replace_string "__ENV_PATH__" "$PATH" "../conf/systemd.service" - ynh_replace_string "__DB_NAME__" "$app" "../conf/systemd.service" + ynh_replace_string "__DB_NAME__" "$db_name" "../conf/systemd.service" ynh_replace_string "__URI__" "$path_url/" "../conf/systemd.service" ynh_replace_string "__PORT__" "$port" "../conf/systemd.service" ynh_replace_string "__DOMAIN__" "$domain" "../conf/systemd.service" @@ -76,7 +84,7 @@ if ynh_version_gt "1.07~ynh2" "${previous_version}" ; then nodejs_use_version="$n_install_dir/bin/n -q $nodejs_version" ynh_replace_string "__NODEJS__" "$nodejs_use_version" "../conf/systemd.service" ynh_replace_string "__ENV_PATH__" "$PATH" "../conf/systemd.service" - ynh_replace_string "__DB_NAME__" "$app" "../conf/systemd.service" + ynh_replace_string "__DB_NAME__" "$db_name" "../conf/systemd.service" ynh_replace_string "__URI__" "$path_url/" "../conf/systemd.service" ynh_replace_string "__PORT__" "$port" "../conf/systemd.service" ynh_replace_string "__DOMAIN__" "$domain" "../conf/systemd.service" From a72ab627ef3c6ec1ede425f94278ae91179bed3c Mon Sep 17 00:00:00 2001 From: yalh76 Date: Tue, 5 Feb 2019 22:01:54 +0100 Subject: [PATCH 09/96] Apply example_ynh on backup --- scripts/backup | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/scripts/backup b/scripts/backup index 8b1beaf..0994511 100644 --- a/scripts/backup +++ b/scripts/backup @@ -33,16 +33,27 @@ db_name=$(ynh_app_setting_get $app db_name) #================================================= # STANDARD BACKUP STEPS #================================================= -# BACKUP OF THE MAIN DIR OF THE APP +# BACKUP THE APP MAIN DIR #================================================= ynh_backup "$final_path" -ynh_backup "/etc/nginx/conf.d/$domain.d/$app.conf" -ynh_backup "/etc/systemd/system/$app.service" #================================================= -# BACKUP OF MONGODB +# BACKUP THE NGINX CONFIGURATION +#================================================= + +ynh_backup "/etc/nginx/conf.d/$domain.d/$app.conf" + +#================================================= +# BACKUP THE MONGODB DATABASE #================================================= mongodump --db "$db_name" -o "./dump" +#================================================= +# SPECIFIC BACKUP +#================================================= +# BACKUP SYSTEMD +#================================================= + +ynh_backup "/etc/systemd/system/$app.service" From b3eb74c76642e92f20d2dbd7860ad3f61c94418d Mon Sep 17 00:00:00 2001 From: yalh76 Date: Tue, 5 Feb 2019 22:10:12 +0100 Subject: [PATCH 10/96] Apply example_ynh on restore --- scripts/restore | 74 ++++++++++++++++++++++++++----------------------- 1 file changed, 40 insertions(+), 34 deletions(-) diff --git a/scripts/restore b/scripts/restore index ce81066..28c0e85 100644 --- a/scripts/restore +++ b/scripts/restore @@ -15,6 +15,10 @@ 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 @@ -43,70 +47,72 @@ test ! -d $final_path \ #================================================= # STANDARD RESTORE STEPS #================================================= -ynh_restore - -#================================================= -# CREATE DEDICATED USER +# RESTORE THE NGINX CONFIGURATION #================================================= -# Create a system user +ynh_restore_file "/etc/nginx/conf.d/$domain.d/$app.conf" + +#================================================= +# RESTORE THE APP MAIN DIR +#================================================= + +ynh_restore_file "$final_path" + + +#================================================= +# RECREATE THE DEDICATED USER +#================================================= + +# Create the dedicated user (if not existing) ynh_system_user_create $app "$final_path" +#================================================= +# RESTORE USER RIGHTS +#================================================= + +# Restore permissions on app files +chown -R $app: "$final_path" +chmod -R 640 "$final_path" +find "$final_path" -type d -print0 | xargs -0 chmod 750 #================================================= -# INSTALL DEPENDENCIES +# SPECIFIC RESTORATION #================================================= +# REINSTALL DEPENDENCIES +#================================================= + +# Define and install dependencies ynh_install_nodejs 8.9.3 # Install mongodb ynh_install_app_dependencies "mongodb mongodb-server" #================================================= -# RESTORE DB +# RESTORE THE MONGODB DATABASE #================================================= + # Start mogodb systemctl enable mongodb systemctl start mongodb mongorestore --db $db_name ./dump/$app #================================================= -# SPECIFIC SETUP +# RESTORE SYSTEMD #================================================= -# Install wekan dependencies -#chown -R $app $final_path -#pushd $final_path/programs/server -#ynh_use_nodejs -#npm install -#popd +ynh_restore_file "/etc/systemd/system/$app.service" +systemctl enable $app.service #================================================= -# GENERIC FINALIZATION +# ADVERTISE SERVICE IN ADMIN PANEL #================================================= -# SECURE FILES AND DIRECTORIES -#================================================= -# Set strong right permissions to app files -chown -R $app: "$final_path" -chmod -R 640 "$final_path" -find "$final_path" -type d -print0 | xargs -0 chmod 750 -#================================================= -# ADD SERVICE IN ADMIN PANEL -#================================================= yunohost service add mongodb --log "/var/log/mongodb/mongodb.log" yunohost service add $app -#================================================= -# SETUP SSOWAT -#================================================= - -# Make app public if necessary or protect it -if [ $is_public -eq 1 ] -then - # unprotected_uris allows SSO credentials to be passed anyway. - ynh_app_setting_set "$app" unprotected_uris "/" -fi +#================================================= +# GENERIC FINALIZATION #================================================= # RELOAD NGINX #================================================= From 66c394e0bce7e5575f8897c8c04a2cfc60c2e5fc Mon Sep 17 00:00:00 2001 From: yalh76 Date: Tue, 5 Feb 2019 22:11:04 +0100 Subject: [PATCH 11/96] Fix db_name for restoration --- scripts/restore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/restore b/scripts/restore index 28c0e85..f4841b7 100644 --- a/scripts/restore +++ b/scripts/restore @@ -94,7 +94,7 @@ ynh_install_app_dependencies "mongodb mongodb-server" # Start mogodb systemctl enable mongodb systemctl start mongodb -mongorestore --db $db_name ./dump/$app +mongorestore --db $db_name ./dump/$db_name #================================================= # RESTORE SYSTEMD From 2c1dc36d2159606558ca5e08a4ffb14ebf7535e1 Mon Sep 17 00:00:00 2001 From: yalh76 Date: Tue, 5 Feb 2019 22:17:28 +0100 Subject: [PATCH 12/96] Apply example_ynh on remove --- scripts/remove | 62 +++++++++++++++++++++++++++++++++----------------- 1 file changed, 41 insertions(+), 21 deletions(-) diff --git a/scripts/remove b/scripts/remove index 76aacd2..c251310 100755 --- a/scripts/remove +++ b/scripts/remove @@ -13,38 +13,47 @@ source /usr/share/yunohost/helpers #================================================= # LOAD SETTINGS #================================================= -readonly app=$YNH_APP_INSTANCE_NAME -readonly domain=$(ynh_app_setting_get "$app" domain) + +app=$YNH_APP_INSTANCE_NAME + +domain=$(ynh_app_setting_get $app domain) +port=$(ynh_app_setting_get $app port) db_name=$(ynh_app_setting_get $app db_name) -readonly final_path=$(ynh_app_setting_get "$app" final_path) + +final_path=$(ynh_app_setting_get $app final_path) #================================================= # STANDARD REMOVE #================================================= -# STOP AND REMOVE SERVICE +# REMOVE SERVICE FROM ADMIN PANEL #================================================= -ynh_remove_systemd_config - -#================================================= -# DISABLE SERVICE IN ADMIN PANEL -#================================================= - -if yunohost service status | grep -q $app # Test l'existence du service dans Yunohost +# Remove a service from the admin panel, added by `yunohost service add` +if yunohost service status | grep -q $app then - echo "Remove $app service" - yunohost service remove $app + echo "Remove $app service" + yunohost service remove $app fi #================================================= -# REMOVE DB +# STOP AND REMOVE SERVICE #================================================= + +# Remove the dedicated systemd config +ynh_remove_systemd_config + +#================================================= +# REMOVE THE MONGODB DATABASE +#================================================= + +# Remove a database if it exists, along with the associated user mongo $db_name --eval "db.dropDatabase()" #================================================= # REMOVE DEPENDENCIES #================================================= +# Remove metapackage and its dependencies ynh_remove_app_dependencies #================================================= @@ -54,23 +63,34 @@ ynh_remove_app_dependencies ynh_remove_nodejs #================================================= -# REMOVE THE MAIN DIR OF THE APP +# REMOVE APP MAIN DIR #================================================= -ynh_secure_remove "/var/www/$app" +# Remove the app directory securely +ynh_secure_remove "$final_path" #================================================= -# REMOVE THE NGINX CONFIGURATION +# REMOVE NGINX CONFIGURATION #================================================= -ynh_remove_nginx_config +# Remove the dedicated nginx config +ynh_remove_nginx_config #================================================= -# GENERIC FINALISATION +# CLOSE A PORT +#================================================= + +if yunohost firewall list | grep -q "\- $port$" +then + echo "Close port $port" >&2 + yunohost firewall disallow TCP $port 2>&1 +fi + +#================================================= +# GENERIC FINALIZATION #================================================= # REMOVE DEDICATED USER #================================================= +# Delete a system user ynh_system_user_delete $app - - From eed72dd957b96634b03dae04cce4eb420c1c1008 Mon Sep 17 00:00:00 2001 From: yalh76 Date: Tue, 5 Feb 2019 22:24:26 +0100 Subject: [PATCH 13/96] Apply example_ynh to upgrade --- scripts/upgrade | 38 ++++++++++++++++++++++++++++++-------- 1 file changed, 30 insertions(+), 8 deletions(-) diff --git a/scripts/upgrade b/scripts/upgrade index 1faefa2..679c233 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -31,8 +31,9 @@ fi #================================================= -# Check version +# CHECK VERSION #================================================= + abort_if_up_to_date # previous function is what defines 'version', more precisely the 'previous version' previous_version="${version}" @@ -41,11 +42,14 @@ previous_version="${version}" # BACKUP BEFORE UPGRADE THEN ACTIVE TRAP #================================================= -ynh_backup_before_upgrade # Backup the current version of the app +# Backup the current version of the app +ynh_backup_before_upgrade ynh_clean_setup () { - ynh_restore_upgradebackup # restore it if the upgrade fails + # restore it if the upgrade fails + ynh_restore_upgradebackup } -ynh_abort_if_errors # Exit if an error occurs during the execution of the script +# Exit if an error occurs during the execution of the script +ynh_abort_if_errors #================================================= # ENSURE DOWNWARD COMPATIBILITY @@ -55,9 +59,11 @@ if ynh_version_gt "0.45-2" "${previous_version}" ; then ynh_replace_string "Environment=ROOT_URL=http://127.0.0.1:$port$path_url" "Environment=ROOT_URL=https://$domain$path_url/" "/etc/systemd/system/$app.service" systemctl daemon-reload fi + if ynh_version_gt "0.45-3" "${previous_version}" ; then yunohost service add $app fi + if ynh_version_gt "0.77-2" "${previous_version}" ; then ynh_install_nodejs 8.9.3 # Create a dedicated systemd config @@ -69,6 +75,7 @@ if ynh_version_gt "0.77-2" "${previous_version}" ; then ynh_replace_string "__DOMAIN__" "$domain" "../conf/systemd.service" ynh_add_systemd_config fi + if ynh_version_gt "1.07~ynh2" "${previous_version}" ; then # Replace mongodb packages @@ -91,6 +98,12 @@ if ynh_version_gt "1.07~ynh2" "${previous_version}" ; then ynh_add_systemd_config fi +#================================================= +# CHECK THE PATH +#================================================= + +# Normalize the URL path syntax +path_url=$(ynh_normalize_url_path $path_url) #================================================= # STANDARD UPGRADE STEPS @@ -99,24 +112,33 @@ fi #================================================= # Download, check integrity, uncompress and patch the source from app.src -# For this app sources are in app subdirectory ynh_setup_source "$final_path" +#================================================= +# CREATE DEDICATED USER +#================================================= + +# Create a dedicated user (if not existing) +ynh_system_user_create $app + + + + #================================================= # GENERIC FINALIZATION #================================================= # SECURE FILES AND DIRECTORIES #================================================= -# Set strong right permissions to app files +# Set permissions on app files chown -R $app: "$final_path" chmod -R 640 "$final_path" find "$final_path" -type d -print0 | xargs -0 chmod 750 # Relaunch a npm install pushd $final_path/programs/server -ynh_use_nodejs -npm install + ynh_use_nodejs + npm install popd #================================================= From 407520bed0a8addaabdcb030594cc270e73f55bd Mon Sep 17 00:00:00 2001 From: yalh76 Date: Tue, 5 Feb 2019 22:34:44 +0100 Subject: [PATCH 14/96] remove nodejs_use_version deprecated --- conf/systemd.service | 1 - 1 file changed, 1 deletion(-) diff --git a/conf/systemd.service b/conf/systemd.service index d60488e..4c201ce 100644 --- a/conf/systemd.service +++ b/conf/systemd.service @@ -7,7 +7,6 @@ After=network.target mongodb.service Type=simple User=__APP__ Group=__APP__ -ExecStartPre=__NODEJS__ Environment="PATH=__ENV_PATH__" Environment=NODE_ENV=production Environment=MONGO_URL=mongodb://127.0.0.1:27017/__DB_NAME__ From b134ebba85d4841901a84d46a6369aa272132ba2 Mon Sep 17 00:00:00 2001 From: yalh76 Date: Tue, 5 Feb 2019 22:39:20 +0100 Subject: [PATCH 15/96] remove nodejs_use_version references... deprecated --- scripts/install | 1 - scripts/upgrade | 4 ---- 2 files changed, 5 deletions(-) diff --git a/scripts/install b/scripts/install index 9b804b2..d170248 100755 --- a/scripts/install +++ b/scripts/install @@ -187,7 +187,6 @@ popd # Create a dedicated systemd config ynh_print_info "Adding wekan systemd service ..." -ynh_replace_string "__NODEJS__" "$nodejs_use_version" "../conf/systemd.service" ynh_replace_string "__ENV_PATH__" "$PATH" "../conf/systemd.service" ynh_replace_string "__DB_NAME__" "$db_name" "../conf/systemd.service" ynh_replace_string "__URI__" "$path_url" "../conf/systemd.service" diff --git a/scripts/upgrade b/scripts/upgrade index 679c233..bee0fb8 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -67,7 +67,6 @@ fi if ynh_version_gt "0.77-2" "${previous_version}" ; then ynh_install_nodejs 8.9.3 # Create a dedicated systemd config - ynh_replace_string "__NODEJS__" "$nodejs_use_version" "../conf/systemd.service" ynh_replace_string "__ENV_PATH__" "$PATH" "../conf/systemd.service" ynh_replace_string "__DB_NAME__" "$db_name" "../conf/systemd.service" ynh_replace_string "__URI__" "$path_url/" "../conf/systemd.service" @@ -87,9 +86,6 @@ if ynh_version_gt "1.07~ynh2" "${previous_version}" ; then yunohost service add mongodb --log "/var/log/mongodb/mongodb.log" # Gotta regen the systemd config because mongodb service name changed - nodejs_version=$(ynh_app_setting_get $app nodejs_version) - nodejs_use_version="$n_install_dir/bin/n -q $nodejs_version" - ynh_replace_string "__NODEJS__" "$nodejs_use_version" "../conf/systemd.service" ynh_replace_string "__ENV_PATH__" "$PATH" "../conf/systemd.service" ynh_replace_string "__DB_NAME__" "$db_name" "../conf/systemd.service" ynh_replace_string "__URI__" "$path_url/" "../conf/systemd.service" From e40a3ab65c5746dca0b0eddc1fe06790ec0118d9 Mon Sep 17 00:00:00 2001 From: yalh76 Date: Tue, 5 Feb 2019 22:45:13 +0100 Subject: [PATCH 16/96] Change __ENV_PATH__ to $nodejs_path --- scripts/install | 2 +- scripts/upgrade | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/scripts/install b/scripts/install index d170248..a7f377e 100755 --- a/scripts/install +++ b/scripts/install @@ -187,7 +187,7 @@ popd # Create a dedicated systemd config ynh_print_info "Adding wekan systemd service ..." -ynh_replace_string "__ENV_PATH__" "$PATH" "../conf/systemd.service" +ynh_replace_string "__ENV_PATH__" "$nodejs_path" "../conf/systemd.service" ynh_replace_string "__DB_NAME__" "$db_name" "../conf/systemd.service" ynh_replace_string "__URI__" "$path_url" "../conf/systemd.service" ynh_replace_string "__PORT__" "$port" "../conf/systemd.service" diff --git a/scripts/upgrade b/scripts/upgrade index bee0fb8..131e51c 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -66,8 +66,9 @@ fi if ynh_version_gt "0.77-2" "${previous_version}" ; then ynh_install_nodejs 8.9.3 + ynh_use_nodejs # Create a dedicated systemd config - ynh_replace_string "__ENV_PATH__" "$PATH" "../conf/systemd.service" + ynh_replace_string "__ENV_PATH__" "$nodejs_path" "../conf/systemd.service" ynh_replace_string "__DB_NAME__" "$db_name" "../conf/systemd.service" ynh_replace_string "__URI__" "$path_url/" "../conf/systemd.service" ynh_replace_string "__PORT__" "$port" "../conf/systemd.service" @@ -84,9 +85,10 @@ if ynh_version_gt "1.07~ynh2" "${previous_version}" ; then ynh_install_app_dependencies "mongodb mongodb-server" yunohost service remove mongod yunohost service add mongodb --log "/var/log/mongodb/mongodb.log" + ynh_use_nodejs # Gotta regen the systemd config because mongodb service name changed - ynh_replace_string "__ENV_PATH__" "$PATH" "../conf/systemd.service" + ynh_replace_string "__ENV_PATH__" "$nodejs_path" "../conf/systemd.service" ynh_replace_string "__DB_NAME__" "$db_name" "../conf/systemd.service" ynh_replace_string "__URI__" "$path_url/" "../conf/systemd.service" ynh_replace_string "__PORT__" "$port" "../conf/systemd.service" From 58ed2f08de086cf65efdb77c775562d9704c3b19 Mon Sep 17 00:00:00 2001 From: yalh76 Date: Tue, 5 Feb 2019 22:49:19 +0100 Subject: [PATCH 17/96] replacing __DOMAIN__ and __URI__ by __DOMAIN_URI__ to have one ynh_replace_string instead of two --- conf/systemd.service | 2 +- scripts/install | 3 +-- scripts/upgrade | 6 ++---- 3 files changed, 4 insertions(+), 7 deletions(-) diff --git a/conf/systemd.service b/conf/systemd.service index 4c201ce..0fb4618 100644 --- a/conf/systemd.service +++ b/conf/systemd.service @@ -10,7 +10,7 @@ Group=__APP__ Environment="PATH=__ENV_PATH__" Environment=NODE_ENV=production Environment=MONGO_URL=mongodb://127.0.0.1:27017/__DB_NAME__ -Environment=ROOT_URL=https://__DOMAIN____URI__ PORT=__PORT__ +Environment=ROOT_URL=https://__DOMAIN_URI__ PORT=__PORT__ WorkingDirectory=__FINALPATH__ ExecStart=/opt/node_n/bin/node __FINALPATH__/main.js Restart=on-failure diff --git a/scripts/install b/scripts/install index a7f377e..1ac1118 100755 --- a/scripts/install +++ b/scripts/install @@ -189,9 +189,8 @@ popd ynh_print_info "Adding wekan systemd service ..." ynh_replace_string "__ENV_PATH__" "$nodejs_path" "../conf/systemd.service" ynh_replace_string "__DB_NAME__" "$db_name" "../conf/systemd.service" -ynh_replace_string "__URI__" "$path_url" "../conf/systemd.service" +ynh_replace_string "__DOMAIN_URI__" "$domain$path_url" "../conf/systemd.service" ynh_replace_string "__PORT__" "$port" "../conf/systemd.service" -ynh_replace_string "__DOMAIN__" "$domain" "../conf/systemd.service" ynh_add_systemd_config #================================================= diff --git a/scripts/upgrade b/scripts/upgrade index 131e51c..fdf9c19 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -70,9 +70,8 @@ if ynh_version_gt "0.77-2" "${previous_version}" ; then # Create a dedicated systemd config ynh_replace_string "__ENV_PATH__" "$nodejs_path" "../conf/systemd.service" ynh_replace_string "__DB_NAME__" "$db_name" "../conf/systemd.service" - ynh_replace_string "__URI__" "$path_url/" "../conf/systemd.service" + ynh_replace_string "__DOMAIN_URI__" "$domain$path_url" "../conf/systemd.service" ynh_replace_string "__PORT__" "$port" "../conf/systemd.service" - ynh_replace_string "__DOMAIN__" "$domain" "../conf/systemd.service" ynh_add_systemd_config fi @@ -90,9 +89,8 @@ if ynh_version_gt "1.07~ynh2" "${previous_version}" ; then # Gotta regen the systemd config because mongodb service name changed ynh_replace_string "__ENV_PATH__" "$nodejs_path" "../conf/systemd.service" ynh_replace_string "__DB_NAME__" "$db_name" "../conf/systemd.service" - ynh_replace_string "__URI__" "$path_url/" "../conf/systemd.service" + ynh_replace_string "__DOMAIN_URI__" "$domain$path_url" "../conf/systemd.service" ynh_replace_string "__PORT__" "$port" "../conf/systemd.service" - ynh_replace_string "__DOMAIN__" "$domain" "../conf/systemd.service" ynh_add_systemd_config fi From ce7c56b7c1fb4ba2113dfa6cf27a8ec840190ae5 Mon Sep 17 00:00:00 2001 From: yalh76 Date: Tue, 5 Feb 2019 22:54:12 +0100 Subject: [PATCH 18/96] reapply example_ynh onto install and check_process --- check_process | 7 ++++--- scripts/install | 8 +++++++- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/check_process b/check_process index 130e18e..a83869d 100644 --- a/check_process +++ b/check_process @@ -22,9 +22,10 @@ Level 1=auto Level 2=auto Level 3=auto -# Level 4: - Level 4=0 -# Level 5: +# Level 4: If the app supports LDAP and SSOwat, turn level 4 to '1' and add a link to an issue or a part of your code to show it. +# If the app does not use LDAP nor SSOwat, and can't use them, turn level 4 to 'na' and explain as well. + #no ldap for now + Level 4=na Level 5=auto Level 6=auto Level 7=auto diff --git a/scripts/install b/scripts/install index 1ac1118..2e9c530 100755 --- a/scripts/install +++ b/scripts/install @@ -25,6 +25,7 @@ ynh_abort_if_errors #================================================= # RETRIEVE ARGUMENTS FROM THE MANIFEST #================================================= + domain=$YNH_APP_ARG_DOMAIN path_url=$YNH_APP_ARG_PATH is_public=$YNH_APP_ARG_IS_PUBLIC @@ -160,7 +161,7 @@ ynh_system_user_create $app "$final_path" #================================================= # SPECIFIC SETUP #================================================= -# Install Wekan +# INSTALL WEKAN #================================================= # Install wekan dependencies @@ -174,6 +175,7 @@ popd #================================================= # SETUP SYSTEMD #================================================= + ### `ynh_systemd_config` is used to configure a systemd script for an app. ### It can be used for apps that use sysvinit (with adaptation) or systemd. ### Have a look at the app to be sure this app needs a systemd script. @@ -198,6 +200,10 @@ ynh_add_systemd_config #================================================= # SECURE FILES AND DIRECTORIES #================================================= + +### For security reason, any app should set the permissions to root: before anything else. +### Then, if write authorization is needed, any access should be given only to directories +### that really need such authorization. ynh_print_info "Fixing permissions ..." # Set strong right permissions to app files chown -R $app: "$final_path" From 256e5ec780af284a954e936f41a57dfd55032a19 Mon Sep 17 00:00:00 2001 From: yalh76 Date: Tue, 5 Feb 2019 23:00:28 +0100 Subject: [PATCH 19/96] Apply example_ynh on README.md --- README.md | 53 +++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 49 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index ee4286f..99f926e 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,17 @@ # Wekan for Yunohost -Wekan is an open-source kanban board (task manager and organizer) - [![Integration level](https://dash.yunohost.org/integration/wekan.svg)](https://dash.yunohost.org/appci/app/wekan) -[![Install Wordpress with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=wekan) +[![Install Wekan with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=wekan) + +> *This package allow you to install wekan quickly and simply on a YunoHost server. +If you don't have YunoHost, please see [here](https://yunohost.org/#/install) to know how to install and enjoy it.* + +## Overview +Wekan is an open-source kanban board (task manager and organizer) **Shipped version:** 2.09 -## Screenshot +## Screenshots ![](screenshot.jpg) @@ -30,3 +34,44 @@ Wekan is an open-source kanban board (task manager and organizer) **Private/Public mode:** In private mode, only authorized YunoHost members can access to the wekan. **SSO/LDAP:** SSO and LDAP are not configured. + +## Configuration + +First registered user will be admin, and next ones normal users. If you want other admins too, you can change their permission to admin at Wekan Admin Panel. + +## Documentation + + * Official documentation: https://github.com/wekan/wekan/wiki + +## YunoHost specific features + +#### Supported architectures + +* x86-64b - [![Build Status](https://ci-apps.yunohost.org/ci/logs/wekan%20%28Community%29.svg)](https://ci-apps.yunohost.org/ci/apps/wekan/) +* ARMv8-A - [![Build Status](https://ci-apps-arm.yunohost.org/ci/logs/wekan%20%28Community%29.svg)](https://ci-apps-arm.yunohost.org/ci/apps/wekan/) +* Jessie x86-64b - [![Build Status](https://ci-stretch.nohost.me/ci/logs/wekan%20%28Community%29.svg)](https://ci-stretch.nohost.me/ci/apps/wekan/) + +## Limitations + +* Any known limitations. + +## Links + + * Report a bug: https://github.com/YunoHost-Apps/wekan_ynh/issues + * App website: Link to the official website of this app + * YunoHost website: https://yunohost.org/ + +--- + +Developers info +---------------- + +**Only if you want to use a testing branch for coding, instead of merging directly into master.** +Please do your pull request to the [testing branch](https://github.com/YunoHost-Apps/wekan_ynh/tree/testing). + +To try the testing branch, please proceed like that. +``` +sudo yunohost app install https://github.com/YunoHost-Apps/wekan_ynh/tree/testing --debug +or +sudo yunohost app upgrade wekan -u https://github.com/YunoHost-Apps/wekan_ynh/tree/testing --debug +``` From 0c638f928d9292befa37ef94609e01f3dbafc14d Mon Sep 17 00:00:00 2001 From: yalh76 Date: Tue, 5 Feb 2019 23:03:16 +0100 Subject: [PATCH 20/96] Spacing --- scripts/restore | 2 -- scripts/upgrade | 4 ---- 2 files changed, 6 deletions(-) diff --git a/scripts/restore b/scripts/restore index f4841b7..7f3d8f5 100644 --- a/scripts/restore +++ b/scripts/restore @@ -58,7 +58,6 @@ ynh_restore_file "/etc/nginx/conf.d/$domain.d/$app.conf" ynh_restore_file "$final_path" - #================================================= # RECREATE THE DEDICATED USER #================================================= @@ -110,7 +109,6 @@ systemctl enable $app.service yunohost service add mongodb --log "/var/log/mongodb/mongodb.log" yunohost service add $app - #================================================= # GENERIC FINALIZATION #================================================= diff --git a/scripts/upgrade b/scripts/upgrade index fdf9c19..6f78b8f 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -29,7 +29,6 @@ then ynh_app_setting_set "$app" db_name "$db_name" fi - #================================================= # CHECK VERSION #================================================= @@ -117,9 +116,6 @@ ynh_setup_source "$final_path" # Create a dedicated user (if not existing) ynh_system_user_create $app - - - #================================================= # GENERIC FINALIZATION #================================================= From 1bf2614f33abc30eba7cb06eb03e46c4058cf223 Mon Sep 17 00:00:00 2001 From: yalh76 Date: Tue, 5 Feb 2019 23:05:43 +0100 Subject: [PATCH 21/96] Remove nodejs, as integrated in the common helpers --- scripts/_future.sh | 119 --------------------------------------------- 1 file changed, 119 deletions(-) diff --git a/scripts/_future.sh b/scripts/_future.sh index 44bf9a9..26b6486 100644 --- a/scripts/_future.sh +++ b/scripts/_future.sh @@ -45,125 +45,6 @@ abort_if_up_to_date () { fi } - - -#================================================= -# NODEJS -#================================================= - -# INFOS -# n (Node version management) utilise la variable PATH pour stocker le path de la version de node à utiliser. -# C'est ainsi qu'il change de version -# ynh_install_nodejs installe la version de nodejs demandée en argument, avec n -# ynh_use_nodejs active une version de nodejs dans le script courant -# 3 variables sont mises à disposition, et 2 sont stockées dans la config de l'app -# - nodejs_path: Le chemin absolu de cette version de node -# Utilisé pour des appels directs à node. -# - nodejs_version: Simplement le numéro de version de nodejs pour cette application -# - nodejs_use_version: Un alias pour charger une version de node dans le shell courant. -# Utilisé pour démarrer un service ou un script qui utilise node ou npm -# Dans ce cas, c'est $PATH qui contient le chemin de la version de node. Il doit être propagé sur les autres shell si nécessaire. - -n_install_dir="/opt/node_n" -node_version_path="/opt/node_n/n/versions/node" -# N_PREFIX est le dossier de n, il doit être chargé dans les variables d'environnement pour n. -export N_PREFIX="$n_install_dir" - -ynh_use_nodejs () { - nodejs_version=$(ynh_app_setting_get $app nodejs_version) - - load_n_path="[[ :$PATH: == *\":$n_install_dir/bin:\"* ]] || PATH=\"$n_install_dir/bin:$PATH\"; N_PREFIX="$n_install_dir"" - - nodejs_use_version="$n_install_dir/bin/n -q $nodejs_version" - - # "Load" a version of node - eval $load_n_path; $nodejs_use_version - - # Get the absolute path of this version of node - nodejs_path="$(n bin $nodejs_version)" - - # Make an alias for node use - ynh_node_exec="eval $load_n_path; n use $nodejs_version" -} - -ynh_install_nodejs () { - # Use n, https://github.com/tj/n to manage the nodejs versions - nodejs_version="$1" - local n_install_script="https://git.io/n-install" - - # Create $n_install_dir - mkdir -p "$n_install_dir" - - # Load n path in PATH - CLEAR_PATH="$n_install_dir/bin:$PATH" - # Remove /usr/local/bin in PATH in case of node has already setup. - PATH=$(echo $CLEAR_PATH | sed 's@/usr/local/bin:@@') - - # Move an existing node binary, to avoid to block n. - test -x /usr/bin/node && mv /usr/bin/node /usr/bin/node_n - test -x /usr/bin/npm && mv /usr/bin/npm /usr/bin/npm_n - - # If n is not previously setup, install it - n --version > /dev/null 2>&1 || \ - (curl -sL $n_install_script | N_PREFIX=$N_PREFIX bash -s -- -y - 2>&1 ) - - # Modify the default N_PREFIX in n script - ynh_replace_string "^N_PREFIX=\${N_PREFIX-.*}$" "N_PREFIX=\${N_PREFIX-$N_PREFIX}" "$n_install_dir/bin/n" - - # Restore /usr/local/bin in PATH - PATH=$CLEAR_PATH - - # And replace the old node binary. - test -x /usr/bin/node_n && mv /usr/bin/node_n /usr/bin/node - test -x /usr/bin/npm_n && mv /usr/bin/npm_n /usr/bin/npm - - # Install the requested version of nodejs - n $nodejs_version - - # Find the last "real" version for this major version of node. - real_nodejs_version=$(find $node_version_path/$nodejs_version* -maxdepth 0 | sort --version-sort | tail --lines=1) - real_nodejs_version=$(basename $real_nodejs_version) - - # Create a symbolic link for this major version. If the file doesn't already exist - if [ ! -e "$node_version_path/$nodejs_version" ] - then - ln --symbolic --force --no-target-directory $node_version_path/$real_nodejs_version $node_version_path/$nodejs_version - fi - - # Store the ID of this app and the version of node requested for it - echo "$YNH_APP_ID:$nodejs_version" | tee --append "$n_install_dir/ynh_app_version" - - # Store nodejs_version into the config of this app - ynh_app_setting_set $app nodejs_version $nodejs_version - - # Build the update script and set the cronjob - ynh_cron_upgrade_node - - ynh_use_nodejs -} - -ynh_remove_nodejs () { - ynh_use_nodejs - - # Remove the line for this app - sed --in-place "/$YNH_APP_ID:$nodejs_version/d" "$n_install_dir/ynh_app_version" - - # If none another app uses this version of nodejs, remove it. - if ! grep --quiet "$nodejs_version" "$n_install_dir/ynh_app_version" - then - n rm $nodejs_version - fi - - # If none another app uses n, remove n - if [ ! -s "$n_install_dir/ynh_app_version" ] - then - ynh_secure_remove "$n_install_dir" - ynh_secure_remove "/usr/local/n" - sed --in-place "/N_PREFIX/d" /root/.bashrc - rm -f /etc/cron.daily/node_update - fi -} - ynh_cron_upgrade_node () { # Build the update script cat > "$n_install_dir/node_update.sh" << EOF From f74bf0581d51b14132c43e86af549c8198f3d223 Mon Sep 17 00:00:00 2001 From: yalh76 Date: Tue, 5 Feb 2019 23:06:45 +0100 Subject: [PATCH 22/96] remove ynh_cron_upgrade_nodenot used --- scripts/_future.sh | 45 --------------------------------------------- 1 file changed, 45 deletions(-) diff --git a/scripts/_future.sh b/scripts/_future.sh index 26b6486..35de3f1 100644 --- a/scripts/_future.sh +++ b/scripts/_future.sh @@ -45,52 +45,7 @@ abort_if_up_to_date () { fi } -ynh_cron_upgrade_node () { - # Build the update script - cat > "$n_install_dir/node_update.sh" << EOF -#!/bin/bash -version_path="$node_version_path" -n_install_dir="$n_install_dir" - -# Log the date -date - -# List all real installed version of node -all_real_version="\$(find \$version_path/* -maxdepth 0 -type d | sed "s@\$version_path/@@g")" - -# Keep only the major version number of each line -all_real_version=\$(echo "\$all_real_version" | sed 's/\..*\$//') - -# Remove double entries -all_real_version=\$(echo "\$all_real_version" | sort --unique) - -# Read each major version -while read version -do - echo "Update of the version \$version" - sudo \$n_install_dir/bin/n \$version - - # Find the last "real" version for this major version of node. - real_nodejs_version=\$(find \$version_path/\$version* -maxdepth 0 | sort --version-sort | tail --lines=1) - real_nodejs_version=\$(basename \$real_nodejs_version) - - # Update the symbolic link for this version - sudo ln --symbolic --force --no-target-directory \$version_path/\$real_nodejs_version \$version_path/\$version -done <<< "\$(echo "\$all_real_version")" -EOF - - chmod +x "$n_install_dir/node_update.sh" - - # Build the cronjob - cat > "/etc/cron.daily/node_update" << EOF -#!/bin/bash - -$n_install_dir/node_update.sh >> $n_install_dir/node_update.log -EOF - - chmod +x "/etc/cron.daily/node_update" -} ynh_version_gt () { From ef02ee6a09c7f40a8ee8b658ef6a114d0df37764 Mon Sep 17 00:00:00 2001 From: yalh76 Date: Tue, 5 Feb 2019 23:18:27 +0100 Subject: [PATCH 23/96] replacing abort_if_up_to_date by ynh_check_app_version_changed --- scripts/_future.sh | 22 ------------- scripts/upgrade | 3 +- scripts/ynh_check_app_version_changed | 46 +++++++++++++++++++++++++++ 3 files changed, 48 insertions(+), 23 deletions(-) create mode 100644 scripts/ynh_check_app_version_changed diff --git a/scripts/_future.sh b/scripts/_future.sh index 35de3f1..e5d0cec 100644 --- a/scripts/_future.sh +++ b/scripts/_future.sh @@ -25,28 +25,6 @@ to_logs() { fi } -read_json () { - sudo python3 -c "import sys, json;print(json.load(open('$1'))['$2'])" -} - -read_manifest () { - if [ -f '../manifest.json' ] ; then - read_json '../manifest.json' "$1" - else - read_json '../settings/manifest.json' "$1" - fi -} -abort_if_up_to_date () { - version=$(read_json "/etc/yunohost/apps/$YNH_APP_INSTANCE_NAME/manifest.json" 'version' 2> /dev/null || echo '20160501-7') - last_version=$(read_manifest 'version') - if [ "${version}" = "${last_version}" ]; then - info "Up-to-date, nothing to do" - ynh_die "" 0 - fi -} - - - ynh_version_gt () { dpkg --compare-versions "$1" gt "$2" diff --git a/scripts/upgrade b/scripts/upgrade index 6f78b8f..d27d835 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -8,6 +8,7 @@ source _common.sh source ynh_systemd_action +source ynh_check_app_version_changed source /usr/share/yunohost/helpers #================================================= @@ -33,7 +34,7 @@ fi # CHECK VERSION #================================================= -abort_if_up_to_date +ynh_check_app_version_changed # previous function is what defines 'version', more precisely the 'previous version' previous_version="${version}" diff --git a/scripts/ynh_check_app_version_changed b/scripts/ynh_check_app_version_changed new file mode 100644 index 0000000..641815c --- /dev/null +++ b/scripts/ynh_check_app_version_changed @@ -0,0 +1,46 @@ +#!/bin/bash + +# Checks the app version to upgrade with the existing app version and returns: +# - UPGRADE_APP if the upstream app version has changed +# - UPGRADE_PACKAGE if only the YunoHost package has changed +# +## It stops the current script without error if the package is up-to-date +# +# This helper should be used to avoid an upgrade of an app, or the upstream part +# of it, when it's not needed +# +# To force an upgrade, even if the package is up to date, +# you have to set the variable YNH_FORCE_UPGRADE before. +# example: sudo YNH_FORCE_UPGRADE=1 yunohost app upgrade MyApp + +# usage: ynh_check_app_version_changed +ynh_check_app_version_changed () { + local force_upgrade=${YNH_FORCE_UPGRADE:-0} + local package_check=${PACKAGE_CHECK_EXEC:-0} + + # By default, upstream app version has changed + local return_value="UPGRADE_APP" + + local current_version=$(ynh_read_manifest "/etc/yunohost/apps/$YNH_APP_INSTANCE_NAME/manifest.json" "version" || echo 1.0) + local current_upstream_version="${current_version/~ynh*/}" + local update_version=$(ynh_read_manifest "../manifest.json" "version" || echo 1.0) + local update_upstream_version="${update_version/~ynh*/}" + + if [ "$current_version" == "$update_version" ] ; then + # Complete versions are the same + if [ "$force_upgrade" != "0" ] + then + echo "Upgrade forced by YNH_FORCE_UPGRADE." >&2 + unset YNH_FORCE_UPGRADE + elif [ "$package_check" != "0" ] + then + echo "Upgrade forced for package check." >&2 + else + ynh_die "Up-to-date, nothing to do" 0 + fi + elif [ "$current_upstream_version" == "$update_upstream_version" ] ; then + # Upstream versions are the same, only YunoHost package versions differ + return_value="UPGRADE_PACKAGE" + fi + echo $return_value +} From 512895089270d4beea156adf26280587f57d65ad Mon Sep 17 00:00:00 2001 From: yalh76 Date: Tue, 5 Feb 2019 23:21:30 +0100 Subject: [PATCH 24/96] add ynh_read_manifest_2 --- scripts/upgrade | 1 + scripts/ynh_read_manifest_2 | 51 +++++++++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+) create mode 100644 scripts/ynh_read_manifest_2 diff --git a/scripts/upgrade b/scripts/upgrade index d27d835..543fc89 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -8,6 +8,7 @@ source _common.sh source ynh_systemd_action +source ynh_read_manifest_2 source ynh_check_app_version_changed source /usr/share/yunohost/helpers diff --git a/scripts/ynh_read_manifest_2 b/scripts/ynh_read_manifest_2 new file mode 100644 index 0000000..c2dd5a3 --- /dev/null +++ b/scripts/ynh_read_manifest_2 @@ -0,0 +1,51 @@ +#!/bin/bash + +# Need also the helper https://github.com/YunoHost-Apps/Experimental_helpers/blob/master/ynh_handle_getopts_args/ynh_handle_getopts_args + +# Read the value of a key in a ynh manifest file +# +# usage: ynh_read_manifest manifest key +# | arg: -m, --manifest= - Path of the manifest to read +# | arg: -k, --key= - Name of the key to find +ynh_read_manifest () { + # Declare an array to define the options of this helper. + declare -Ar args_array=( [m]=manifest= [k]=key= ) + local manifest + local key + # Manage arguments with getopts + ynh_handle_getopts_args "$@" + + python3 -c "import sys, json;print(json.load(open('$manifest', encoding='utf-8'))['$key'])" +} + +# Read the upstream version from the manifest +# The version number in the manifest is defined by ~ynh +# For example : 4.3-2~ynh3 +# This include the number before ~ynh +# In the last example it return 4.3-2 +# +# usage: ynh_app_upstream_version +ynh_app_upstream_version () { + manifest_path="../manifest.json" + if [ ! -e "$manifest_path" ]; then + manifest_path="../settings/manifest.json" # Into the restore script, the manifest is not at the same place + fi + version_key=$(ynh_read_manifest --manifest="$manifest_path" --key="version") + echo "${version_key/~ynh*/}" +} + +# Read package version from the manifest +# The version number in the manifest is defined by ~ynh +# For example : 4.3-2~ynh3 +# This include the number after ~ynh +# In the last example it return 3 +# +# usage: ynh_app_package_version +ynh_app_package_version () { + manifest_path="../manifest.json" + if [ ! -e "$manifest_path" ]; then + manifest_path="../settings/manifest.json" # Into the restore script, the manifest is not at the same place + fi + version_key=$(ynh_read_manifest --manifest="$manifest_path" --key="version") + echo "${version_key/*~ynh/}" +} From 54f3fa181ca7a288dbfc18a7173f7f7619c54bba Mon Sep 17 00:00:00 2001 From: yalh76 Date: Tue, 5 Feb 2019 23:24:11 +0100 Subject: [PATCH 25/96] Remove not needed functions --- scripts/_future.sh | 27 --------------------------- 1 file changed, 27 deletions(-) diff --git a/scripts/_future.sh b/scripts/_future.sh index e5d0cec..0b48576 100644 --- a/scripts/_future.sh +++ b/scripts/_future.sh @@ -1,30 +1,3 @@ - - -log() { - echo "${1}" -} - -info() { - log "[INFO] ${1}" -} - -warn() { - log "[WARN] ${1}" -} - -err() { - log "[ERR] ${1}" -} -to_logs() { - - # When yunohost --verbose or bash -x - if $_ISVERBOSE; then - cat - else - cat > /dev/null - fi -} - ynh_version_gt () { dpkg --compare-versions "$1" gt "$2" From 42540d82b51e78b96517b8e4dbffd2395b18477f Mon Sep 17 00:00:00 2001 From: yalh76 Date: Tue, 5 Feb 2019 23:28:45 +0100 Subject: [PATCH 26/96] revert back from ynh_check_app_version_changed to abort_if_up_to_date --- scripts/_future.sh | 22 ++++++++++++ scripts/upgrade | 4 +-- scripts/ynh_check_app_version_changed | 46 ------------------------ scripts/ynh_read_manifest_2 | 51 --------------------------- 4 files changed, 23 insertions(+), 100 deletions(-) delete mode 100644 scripts/ynh_check_app_version_changed delete mode 100644 scripts/ynh_read_manifest_2 diff --git a/scripts/_future.sh b/scripts/_future.sh index 0b48576..816f97a 100644 --- a/scripts/_future.sh +++ b/scripts/_future.sh @@ -1,3 +1,25 @@ +#!/bin/bash + +read_json () { + sudo python3 -c "import sys, json;print(json.load(open('$1'))['$2'])" +} + +read_manifest () { + if [ -f '../manifest.json' ] ; then + read_json '../manifest.json' "$1" + else + read_json '../settings/manifest.json' "$1" + fi +} +abort_if_up_to_date () { + version=$(read_json "/etc/yunohost/apps/$YNH_APP_INSTANCE_NAME/manifest.json" 'version' 2> /dev/null || echo '20160501-7') + last_version=$(read_manifest 'version') + if [ "${version}" = "${last_version}" ]; then + info "Up-to-date, nothing to do" + ynh_die "" 0 + fi +} + ynh_version_gt () { dpkg --compare-versions "$1" gt "$2" diff --git a/scripts/upgrade b/scripts/upgrade index 543fc89..6f78b8f 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -8,8 +8,6 @@ source _common.sh source ynh_systemd_action -source ynh_read_manifest_2 -source ynh_check_app_version_changed source /usr/share/yunohost/helpers #================================================= @@ -35,7 +33,7 @@ fi # CHECK VERSION #================================================= -ynh_check_app_version_changed +abort_if_up_to_date # previous function is what defines 'version', more precisely the 'previous version' previous_version="${version}" diff --git a/scripts/ynh_check_app_version_changed b/scripts/ynh_check_app_version_changed deleted file mode 100644 index 641815c..0000000 --- a/scripts/ynh_check_app_version_changed +++ /dev/null @@ -1,46 +0,0 @@ -#!/bin/bash - -# Checks the app version to upgrade with the existing app version and returns: -# - UPGRADE_APP if the upstream app version has changed -# - UPGRADE_PACKAGE if only the YunoHost package has changed -# -## It stops the current script without error if the package is up-to-date -# -# This helper should be used to avoid an upgrade of an app, or the upstream part -# of it, when it's not needed -# -# To force an upgrade, even if the package is up to date, -# you have to set the variable YNH_FORCE_UPGRADE before. -# example: sudo YNH_FORCE_UPGRADE=1 yunohost app upgrade MyApp - -# usage: ynh_check_app_version_changed -ynh_check_app_version_changed () { - local force_upgrade=${YNH_FORCE_UPGRADE:-0} - local package_check=${PACKAGE_CHECK_EXEC:-0} - - # By default, upstream app version has changed - local return_value="UPGRADE_APP" - - local current_version=$(ynh_read_manifest "/etc/yunohost/apps/$YNH_APP_INSTANCE_NAME/manifest.json" "version" || echo 1.0) - local current_upstream_version="${current_version/~ynh*/}" - local update_version=$(ynh_read_manifest "../manifest.json" "version" || echo 1.0) - local update_upstream_version="${update_version/~ynh*/}" - - if [ "$current_version" == "$update_version" ] ; then - # Complete versions are the same - if [ "$force_upgrade" != "0" ] - then - echo "Upgrade forced by YNH_FORCE_UPGRADE." >&2 - unset YNH_FORCE_UPGRADE - elif [ "$package_check" != "0" ] - then - echo "Upgrade forced for package check." >&2 - else - ynh_die "Up-to-date, nothing to do" 0 - fi - elif [ "$current_upstream_version" == "$update_upstream_version" ] ; then - # Upstream versions are the same, only YunoHost package versions differ - return_value="UPGRADE_PACKAGE" - fi - echo $return_value -} diff --git a/scripts/ynh_read_manifest_2 b/scripts/ynh_read_manifest_2 deleted file mode 100644 index c2dd5a3..0000000 --- a/scripts/ynh_read_manifest_2 +++ /dev/null @@ -1,51 +0,0 @@ -#!/bin/bash - -# Need also the helper https://github.com/YunoHost-Apps/Experimental_helpers/blob/master/ynh_handle_getopts_args/ynh_handle_getopts_args - -# Read the value of a key in a ynh manifest file -# -# usage: ynh_read_manifest manifest key -# | arg: -m, --manifest= - Path of the manifest to read -# | arg: -k, --key= - Name of the key to find -ynh_read_manifest () { - # Declare an array to define the options of this helper. - declare -Ar args_array=( [m]=manifest= [k]=key= ) - local manifest - local key - # Manage arguments with getopts - ynh_handle_getopts_args "$@" - - python3 -c "import sys, json;print(json.load(open('$manifest', encoding='utf-8'))['$key'])" -} - -# Read the upstream version from the manifest -# The version number in the manifest is defined by ~ynh -# For example : 4.3-2~ynh3 -# This include the number before ~ynh -# In the last example it return 4.3-2 -# -# usage: ynh_app_upstream_version -ynh_app_upstream_version () { - manifest_path="../manifest.json" - if [ ! -e "$manifest_path" ]; then - manifest_path="../settings/manifest.json" # Into the restore script, the manifest is not at the same place - fi - version_key=$(ynh_read_manifest --manifest="$manifest_path" --key="version") - echo "${version_key/~ynh*/}" -} - -# Read package version from the manifest -# The version number in the manifest is defined by ~ynh -# For example : 4.3-2~ynh3 -# This include the number after ~ynh -# In the last example it return 3 -# -# usage: ynh_app_package_version -ynh_app_package_version () { - manifest_path="../manifest.json" - if [ ! -e "$manifest_path" ]; then - manifest_path="../settings/manifest.json" # Into the restore script, the manifest is not at the same place - fi - version_key=$(ynh_read_manifest --manifest="$manifest_path" --key="version") - echo "${version_key/*~ynh/}" -} From 9cc7267af14e83dfdd0fc905e9ea4c4cbf7d3bbc Mon Sep 17 00:00:00 2001 From: yalh76 Date: Tue, 5 Feb 2019 23:33:38 +0100 Subject: [PATCH 27/96] rename _furure to a more revelant name: ynh_package_version and only use for upgrade --- scripts/install | 1 - scripts/remove | 1 - scripts/restore | 1 - scripts/upgrade | 1 + scripts/{_future.sh => ynh_package_version} | 0 5 files changed, 1 insertion(+), 3 deletions(-) rename scripts/{_future.sh => ynh_package_version} (100%) diff --git a/scripts/install b/scripts/install index 2e9c530..ffd6214 100755 --- a/scripts/install +++ b/scripts/install @@ -7,7 +7,6 @@ #================================================= source _common.sh -source _future.sh source ynh_systemd_action source /usr/share/yunohost/helpers diff --git a/scripts/remove b/scripts/remove index c251310..63483c1 100755 --- a/scripts/remove +++ b/scripts/remove @@ -7,7 +7,6 @@ #================================================= source _common.sh -source _future.sh source /usr/share/yunohost/helpers #================================================= diff --git a/scripts/restore b/scripts/restore index 7f3d8f5..9df475e 100644 --- a/scripts/restore +++ b/scripts/restore @@ -7,7 +7,6 @@ #================================================= source ../settings/scripts/_common.sh -source ../settings/scripts/_future.sh source ../settings/scripts/ynh_systemd_action source /usr/share/yunohost/helpers diff --git a/scripts/upgrade b/scripts/upgrade index 6f78b8f..22e8563 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -7,6 +7,7 @@ #================================================= source _common.sh +source ynh_package_version source ynh_systemd_action source /usr/share/yunohost/helpers diff --git a/scripts/_future.sh b/scripts/ynh_package_version similarity index 100% rename from scripts/_future.sh rename to scripts/ynh_package_version From a6d691165c0ce31142679f37ac9375a2f5861d74 Mon Sep 17 00:00:00 2001 From: yalh76 Date: Wed, 6 Feb 2019 00:29:35 +0100 Subject: [PATCH 28/96] adding links --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 99f926e..e9f43d6 100644 --- a/README.md +++ b/README.md @@ -58,7 +58,8 @@ First registered user will be admin, and next ones normal users. If you want oth ## Links * Report a bug: https://github.com/YunoHost-Apps/wekan_ynh/issues - * App website: Link to the official website of this app + * App website: https://wekan.github.io/ + * Github App website: https://github.com/wekan/wekan * YunoHost website: https://yunohost.org/ --- From 6d48c42f04b02ab80f1665b8862db90bcfb88741 Mon Sep 17 00:00:00 2001 From: yalh76 Date: Tue, 5 Feb 2019 21:10:09 +0100 Subject: [PATCH 29/96] Reorder from example_ynh --- manifest.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manifest.json b/manifest.json index 98c2599..d9a6f81 100644 --- a/manifest.json +++ b/manifest.json @@ -2,11 +2,11 @@ "name": "Wekan", "id": "wekan", "packaging_format": 1, - "version": "1.07~ynh2", "description": { "en": "Trello-like kanban", "fr": "Un kanban similaire à Trello" }, + "version": "1.07~ynh2", "url": "https://wekan.io", "license": "MIT", "maintainer": { From b32b01c869946ef7e7bb164b396dd639834435a7 Mon Sep 17 00:00:00 2001 From: yalh76 Date: Tue, 5 Feb 2019 21:12:41 +0100 Subject: [PATCH 30/96] Remove mongodb, not a yunohost base service --- manifest.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/manifest.json b/manifest.json index d9a6f81..e01f71f 100644 --- a/manifest.json +++ b/manifest.json @@ -19,8 +19,7 @@ }, "multi_instance": true, "services": [ - "nginx", - "mongod" + "nginx" ], "arguments": { "install" : [ From 082cdebf7fdcbc55f3231b54dcc63d34590b2202 Mon Sep 17 00:00:00 2001 From: yalh76 Date: Tue, 5 Feb 2019 21:13:37 +0100 Subject: [PATCH 31/96] Remove old source filename --- conf/app.src | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/app.src b/conf/app.src index 61359cd..0b7bb83 100644 --- a/conf/app.src +++ b/conf/app.src @@ -5,4 +5,4 @@ SOURCE_SUM=1956dd19f17d76a6d820a15bcf93a3eb12172f9f5cb1dd40d9925b977e8f930d SOURCE_SUM_PRG=sha256sum ARCH_FORMAT=tar.gz SOURCE_IN_SUBDIR=true -SOURCE_FILENAME=wekan-1.07.tar.gz +SOURCE_FILENAME= From 3105eb5a3c515ea55a38b8b80c9b5dda1277a82e Mon Sep 17 00:00:00 2001 From: yalh76 Date: Tue, 5 Feb 2019 21:16:13 +0100 Subject: [PATCH 32/96] update version number to 2.09 --- README.md | 2 ++ manifest.json | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 2ed8ff1..ee4286f 100644 --- a/README.md +++ b/README.md @@ -5,6 +5,8 @@ Wekan is an open-source kanban board (task manager and organizer) [![Integration level](https://dash.yunohost.org/integration/wekan.svg)](https://dash.yunohost.org/appci/app/wekan) [![Install Wordpress with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=wekan) +**Shipped version:** 2.09 + ## Screenshot ![](screenshot.jpg) diff --git a/manifest.json b/manifest.json index e01f71f..13cf267 100644 --- a/manifest.json +++ b/manifest.json @@ -6,7 +6,7 @@ "en": "Trello-like kanban", "fr": "Un kanban similaire à Trello" }, - "version": "1.07~ynh2", + "version": "2.09~ynh1", "url": "https://wekan.io", "license": "MIT", "maintainer": { From ef78b7cf1fa2dc31f19e3e4570c4c6075edef632 Mon Sep 17 00:00:00 2001 From: Alexandre Aubin Date: Wed, 20 Feb 2019 16:42:47 +0100 Subject: [PATCH 33/96] Emphasis on current limitations --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index ee4286f..a552aaf 100644 --- a/README.md +++ b/README.md @@ -13,9 +13,9 @@ Wekan is an open-source kanban board (task manager and organizer) ## Status -- This app only works on x86, 64bits architecture ! In particular, it won't work on 32 bit machines or ARM. See the discussion [here](https://github.com/YunoHost-Apps/wekan_ynh/issues/1#issuecomment-401612500). On the long term, [support for ARM64 might happen](https://blog.wekan.team/2018/01/wekan-progress-on-x64-and-arm/index.html)... +- This app **only works on x86, 64bits architecture** ! In particular, it won't work on 32 bit machines or ARM. See the discussion [here](https://github.com/YunoHost-Apps/wekan_ynh/issues/1#issuecomment-401612500). On the long term, [support for ARM64 might happen](https://blog.wekan.team/2018/01/wekan-progress-on-x64-and-arm/index.html)... -- There is currently no SSO/LDAP integration though it might be integrated at some point in the app, now that it's supported in Meteor/Wekan. c.f. discussion in [here](https://github.com/YunoHost-Apps/wekan_ynh/issues/4). In the meantime, users can create accounts (in fact, they can create infinite number of accounts) manually, and need to login manually specifically in Wekan. +- There is currently **no SSO/LDAP integration** though it might be integrated at some point in the app, now that it's supported in Meteor/Wekan. c.f. discussion in [here](https://github.com/YunoHost-Apps/wekan_ynh/issues/4). In the meantime, users can create accounts (in fact, they can create infinite number of accounts) manually, and need to login manually specifically in Wekan. ## Infos From 0dd3e3d39cebb5394c2d613d7226c2e0ecfb9456 Mon Sep 17 00:00:00 2001 From: yalh76 Date: Wed, 20 Feb 2019 17:45:11 +0100 Subject: [PATCH 34/96] Apply last example_ynh --- check_process | 2 -- scripts/_common.sh | 22 +++++++++++----------- scripts/backup | 11 +++++++++++ scripts/install | 27 +++++++++++++++++++++------ scripts/remove | 20 +++++++++++++++++--- scripts/restore | 16 +++++++++++++++- scripts/upgrade | 29 +++++++++++++++++++++++++++++ 7 files changed, 104 insertions(+), 23 deletions(-) diff --git a/check_process b/check_process index a83869d..c510fd5 100644 --- a/check_process +++ b/check_process @@ -1,5 +1,3 @@ -# See here for more informations -# https://github.com/YunoHost/package_check#syntax-check_process-file ;; Test complet ; Manifest domain="domain.tld" (DOMAIN) diff --git a/scripts/_common.sh b/scripts/_common.sh index bb04a03..b905339 100644 --- a/scripts/_common.sh +++ b/scripts/_common.sh @@ -1,13 +1,13 @@ #!/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 -} \ No newline at end of file +#================================================= +# PERSONAL HELPERS +#================================================= + +#================================================= +# EXPERIMENTAL HELPERS +#================================================= + +#================================================= +# FUTURE OFFICIAL HELPERS +#================================================= diff --git a/scripts/backup b/scripts/backup index 0994511..6f2744f 100644 --- a/scripts/backup +++ b/scripts/backup @@ -23,6 +23,7 @@ ynh_abort_if_errors #================================================= # LOAD SETTINGS #================================================= +ynh_print_info "Loading installation settings..." app=$YNH_APP_INSTANCE_NAME @@ -35,18 +36,21 @@ db_name=$(ynh_app_setting_get $app db_name) #================================================= # BACKUP THE APP MAIN DIR #================================================= +ynh_print_info "Backing up the main app directory..." ynh_backup "$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" #================================================= # BACKUP THE MONGODB DATABASE #================================================= +ynh_print_info "Backing up the MongoDB database..." mongodump --db "$db_name" -o "./dump" @@ -55,5 +59,12 @@ mongodump --db "$db_name" -o "./dump" #================================================= # BACKUP SYSTEMD #================================================= +ynh_print_info "Backing up systemd configuration..." ynh_backup "/etc/systemd/system/$app.service" + +#================================================= +# END OF SCRIPT +#================================================= + +ynh_print_info "Backup script completed for $app. (YunoHost will then actually copy those files to the archive)." diff --git a/scripts/install b/scripts/install index ffd6214..90daf64 100755 --- a/scripts/install +++ b/scripts/install @@ -44,6 +44,7 @@ app=$YNH_APP_INSTANCE_NAME #================================================= # CHECK IF THE APP CAN BE INSTALLED WITH THESE ARGS #================================================= +ynh_print_info "Validating installation parameters..." # Check machine architecture (in particular, we don't support ARM and 32bit machines) [[ $(uname -m) == "x86_64" ]] || ynh_die "Sorry, but this app can only be installed on a x86, 64 bits machine :(" @@ -62,6 +63,7 @@ ynh_webpath_register $app $domain $path_url #================================================= # STORE SETTINGS FROM MANIFEST #================================================= +ynh_print_info "Storing installation settings..." ynh_app_setting_set $app domain $domain ynh_app_setting_set $app path $path_url @@ -72,6 +74,7 @@ ynh_app_setting_set $app is_public $is_public #================================================= # FIND AND OPEN A PORT #================================================= +ynh_print_info "Configuring firewall..." ### Use these lines if you have to open a port for the application ### `ynh_find_port` will find the first available port starting from the given port. @@ -81,12 +84,13 @@ ynh_app_setting_set $app is_public $is_public # Find a free port port=$(ynh_find_port 8095) # Open this port -#yunohost firewall allow --no-upnp TCP $port 2>&1 +#ynh_exec_warn_less yunohost firewall allow --no-upnp TCP $port ynh_app_setting_set $app port $port #================================================= # INSTALL DEPENDENCIES #================================================= +ynh_print_info "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. @@ -113,6 +117,7 @@ systemctl restart mongodb #================================================= # CREATE A MONGODB DATABASE #================================================= +ynh_print_info "Creating a MongoDB database..." ### Use these lines if you need a database for the application. ### `ynh_mysql_setup_db` will create a database, an associated user and a ramdom password. @@ -130,12 +135,12 @@ ynh_app_setting_set $app db_name $db_name #================================================= # DOWNLOAD, CHECK AND UNPACK SOURCE #================================================= +ynh_print_info "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_print_info "Setting up Wekan's sources ..." ynh_app_setting_set $app final_path $final_path # Download, check integrity, uncompress and patch the source from app.src ynh_setup_source "$final_path" @@ -143,16 +148,17 @@ ynh_setup_source "$final_path" #================================================= # NGINX CONFIGURATION #================================================= +ynh_print_info "Configuring nginx web server..." ### `ynh_add_nginx_config` will use the file conf/nginx.conf # Create a dedicated nginx config -ynh_print_info "Configuring nginx ..." ynh_add_nginx_config #================================================= # CREATE DEDICATED USER #================================================= +ynh_print_info "Configuring system user..." # Create a system user ynh_system_user_create $app "$final_path" @@ -160,11 +166,11 @@ ynh_system_user_create $app "$final_path" #================================================= # SPECIFIC SETUP #================================================= -# INSTALL WEKAN +# INSTALL WEKAN NPM DEPENDENCIES #================================================= +ynh_print_info "Installing wekan npm dependencies ..." # Install wekan dependencies -ynh_print_info "Installing npm dependencies ..." chown -R $app $final_path pushd $final_path/programs/server ynh_use_nodejs @@ -174,6 +180,7 @@ popd #================================================= # SETUP SYSTEMD #================================================= +ynh_print_info "Configuring a systemd service..." ### `ynh_systemd_config` is used to configure a systemd script for an app. ### It can be used for apps that use sysvinit (with adaptation) or systemd. @@ -199,11 +206,11 @@ ynh_add_systemd_config #================================================= # SECURE FILES AND DIRECTORIES #================================================= +ynh_print_info "Fixing permissions ..." ### For security reason, any app should set the permissions to root: before anything else. ### Then, if write authorization is needed, any access should be given only to directories ### that really need such authorization. -ynh_print_info "Fixing permissions ..." # Set strong right permissions to app files chown -R $app: "$final_path" chmod -R 640 "$final_path" @@ -227,6 +234,7 @@ yunohost service add $app #================================================= # SETUP SSOWAT #================================================= +ynh_print_info "Configuring SSOwat..." # Make app public if necessary if [ $is_public -eq 1 ] @@ -238,6 +246,7 @@ fi #================================================= # RELOAD NGINX #================================================= +ynh_print_info "Reloading nginx web server..." systemctl reload nginx @@ -247,3 +256,9 @@ systemctl reload nginx ynh_systemd_action --action=start --service_name=$app --log_path="systemd" --line_match="Finishing add-custom-html-before-body-end migration" sleep 10 + +#================================================= +# END OF SCRIPT +#================================================= + +ynh_print_info "Installation of $app completed" diff --git a/scripts/remove b/scripts/remove index 63483c1..f08fad7 100755 --- a/scripts/remove +++ b/scripts/remove @@ -12,6 +12,7 @@ source /usr/share/yunohost/helpers #================================================= # LOAD SETTINGS #================================================= +ynh_print_info "Loading installation settings..." app=$YNH_APP_INSTANCE_NAME @@ -30,13 +31,14 @@ final_path=$(ynh_app_setting_get $app final_path) # Remove a service from the admin panel, added by `yunohost service add` if yunohost service status | grep -q $app then - echo "Remove $app service" + ynh_print_info "Removing $app service" yunohost service remove $app fi #================================================= # STOP AND REMOVE SERVICE #================================================= +ynh_print_info "Stopping and removing the systemd service" # Remove the dedicated systemd config ynh_remove_systemd_config @@ -44,6 +46,7 @@ ynh_remove_systemd_config #================================================= # REMOVE THE MONGODB DATABASE #================================================= +ynh_print_info "Removing the MongoDB database" # Remove a database if it exists, along with the associated user mongo $db_name --eval "db.dropDatabase()" @@ -51,6 +54,7 @@ mongo $db_name --eval "db.dropDatabase()" #================================================= # REMOVE DEPENDENCIES #================================================= +ynh_print_info "Removing dependencies" # Remove metapackage and its dependencies ynh_remove_app_dependencies @@ -58,12 +62,14 @@ ynh_remove_app_dependencies #================================================= # REMOVE NODEJS #================================================= +ynh_print_info "Removing nodejs" ynh_remove_nodejs #================================================= # REMOVE APP MAIN DIR #================================================= +ynh_print_info "Removing app main directory" # Remove the app directory securely ynh_secure_remove "$final_path" @@ -71,6 +77,7 @@ ynh_secure_remove "$final_path" #================================================= # REMOVE NGINX CONFIGURATION #================================================= +ynh_print_info "Removing nginx web server configuration" # Remove the dedicated nginx config ynh_remove_nginx_config @@ -81,8 +88,8 @@ ynh_remove_nginx_config if yunohost firewall list | grep -q "\- $port$" then - echo "Close port $port" >&2 - yunohost firewall disallow TCP $port 2>&1 + ynh_print_info "Closing port $port" + ynh_exec_warn_less yunohost firewall disallow TCP $port fi #================================================= @@ -90,6 +97,13 @@ fi #================================================= # REMOVE DEDICATED USER #================================================= +ynh_print_info "Removing the dedicated system user" # Delete a system user ynh_system_user_delete $app + +#================================================= +# END OF SCRIPT +#================================================= + +ynh_print_info "Removal of $app completed" diff --git a/scripts/restore b/scripts/restore index 9df475e..11c87b7 100644 --- a/scripts/restore +++ b/scripts/restore @@ -24,6 +24,7 @@ ynh_abort_if_errors #================================================= # LOAD SETTINGS #================================================= +ynh_print_info "Loading settings..." app=$YNH_APP_INSTANCE_NAME @@ -37,6 +38,7 @@ port=$(ynh_app_setting_get $app final_path) #================================================= # CHECK IF THE APP CAN BE RESTORED #================================================= +ynh_print_info "Validating restoration parameters..." ynh_webpath_available $domain $path_url \ || ynh_die "Path not available: ${domain}${path_url}" @@ -44,7 +46,7 @@ test ! -d $final_path \ || ynh_die "There is already a directory: $final_path " #================================================= -# STANDARD RESTORE STEPS +# STANDARD RESTORATION STEPS #================================================= # RESTORE THE NGINX CONFIGURATION #================================================= @@ -54,12 +56,14 @@ ynh_restore_file "/etc/nginx/conf.d/$domain.d/$app.conf" #================================================= # RESTORE THE APP MAIN DIR #================================================= +ynh_print_info "Restoring the app main directory..." ynh_restore_file "$final_path" #================================================= # RECREATE THE DEDICATED USER #================================================= +ynh_print_info "Recreating the dedicated system user..." # Create the dedicated user (if not existing) ynh_system_user_create $app "$final_path" @@ -78,6 +82,7 @@ find "$final_path" -type d -print0 | xargs -0 chmod 750 #================================================= # REINSTALL DEPENDENCIES #================================================= +ynh_print_info "Reinstalling dependencies..." # Define and install dependencies ynh_install_nodejs 8.9.3 @@ -88,6 +93,7 @@ ynh_install_app_dependencies "mongodb mongodb-server" #================================================= # RESTORE THE MONGODB DATABASE #================================================= +ynh_print_info "Restoring the MongoDB database..." # Start mogodb systemctl enable mongodb @@ -97,6 +103,7 @@ mongorestore --db $db_name ./dump/$db_name #================================================= # RESTORE SYSTEMD #================================================= +ynh_print_info "Restoring the systemd configuration..." ynh_restore_file "/etc/systemd/system/$app.service" systemctl enable $app.service @@ -113,6 +120,7 @@ yunohost service add $app #================================================= # RELOAD NGINX #================================================= +ynh_print_info "Reloading nginx web server..." systemctl reload nginx @@ -122,3 +130,9 @@ systemctl reload nginx ynh_systemd_action --action=start --service_name=$app --log_path="systemd" sleep 10 + +#================================================= +# END OF SCRIPT +#================================================= + +ynh_print_info "Restoration completed for $app" diff --git a/scripts/upgrade b/scripts/upgrade index b0fb601..4f48cfa 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -14,6 +14,7 @@ source /usr/share/yunohost/helpers #================================================= # LOAD SETTINGS #================================================= +ynh_print_info "Loading installation settings..." app=$YNH_APP_INSTANCE_NAME @@ -41,6 +42,7 @@ previous_version="${version}" #================================================= # BACKUP BEFORE UPGRADE THEN ACTIVE TRAP #================================================= +ynh_print_info "Backing up the app before upgrading (may take a while)..." # Backup the current version of the app ynh_backup_before_upgrade @@ -54,6 +56,7 @@ ynh_abort_if_errors #================================================= # ENSURE DOWNWARD COMPATIBILITY #================================================= +ynh_print_info "Ensuring downward compatibility..." if ynh_version_gt "0.45-2" "${previous_version}" ; then ynh_replace_string "Environment=ROOT_URL=http://127.0.0.1:$port$path_url" "Environment=ROOT_URL=https://$domain$path_url/" "/etc/systemd/system/$app.service" @@ -106,6 +109,7 @@ path_url=$(ynh_normalize_url_path $path_url) #================================================= # 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" @@ -113,6 +117,7 @@ ynh_setup_source "$final_path" #================================================= # CREATE DEDICATED USER #================================================= +ynh_print_info "Making sure dedicated system user exists..." # Create a dedicated user (if not existing) ynh_system_user_create $app @@ -128,15 +133,33 @@ chown -R $app: "$final_path" chmod -R 640 "$final_path" find "$final_path" -type d -print0 | xargs -0 chmod 750 +#================================================= +# INSTALL WEKAN NPM DEPENDENCIES +#================================================= +ynh_print_info "Installing wekan npm dependencies ..." + # Relaunch a npm install pushd $final_path/programs/server ynh_use_nodejs npm install popd +#================================================= +# SETUP SSOWAT +#================================================= +ynh_print_info "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 "/" +fi + #================================================= # RELOAD NGINX #================================================= +ynh_print_info "Reloading nginx web server..." systemctl reload nginx @@ -146,3 +169,9 @@ systemctl reload nginx ynh_systemd_action --action=restart --service_name=$app --log_path="systemd" sleep 10 + +#================================================= +# END OF SCRIPT +#================================================= + +ynh_print_info "Upgrade of $app completed" From 22529a8b2052b9c0db920497ad64d60432d29475 Mon Sep 17 00:00:00 2001 From: yalh76 Date: Wed, 20 Feb 2019 17:47:53 +0100 Subject: [PATCH 35/96] update Level4 to 0 as LDAP can be implemented in wekan_ynh --- check_process | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/check_process b/check_process index c510fd5..26fa846 100644 --- a/check_process +++ b/check_process @@ -22,8 +22,8 @@ Level 3=auto # Level 4: If the app supports LDAP and SSOwat, turn level 4 to '1' and add a link to an issue or a part of your code to show it. # If the app does not use LDAP nor SSOwat, and can't use them, turn level 4 to 'na' and explain as well. - #no ldap for now - Level 4=na + #LDAP to be implemented in wekan_ynh: https://github.com/wekan/wekan/wiki/LDAP + Level 4=0 Level 5=auto Level 6=auto Level 7=auto From d33ef8ce315235972ebb36de642a91c7e3ecc2b1 Mon Sep 17 00:00:00 2001 From: yalh76 Date: Wed, 20 Feb 2019 18:01:58 +0100 Subject: [PATCH 36/96] Arm is not supported --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e9f43d6..ef4b7a2 100644 --- a/README.md +++ b/README.md @@ -48,7 +48,7 @@ First registered user will be admin, and next ones normal users. If you want oth #### Supported architectures * x86-64b - [![Build Status](https://ci-apps.yunohost.org/ci/logs/wekan%20%28Community%29.svg)](https://ci-apps.yunohost.org/ci/apps/wekan/) -* ARMv8-A - [![Build Status](https://ci-apps-arm.yunohost.org/ci/logs/wekan%20%28Community%29.svg)](https://ci-apps-arm.yunohost.org/ci/apps/wekan/) +* ARMv8-A - Not supported * Jessie x86-64b - [![Build Status](https://ci-stretch.nohost.me/ci/logs/wekan%20%28Community%29.svg)](https://ci-stretch.nohost.me/ci/apps/wekan/) ## Limitations From 827f6cace8681005c52a305a8df7165c45df979d Mon Sep 17 00:00:00 2001 From: yalh76 Date: Wed, 6 Mar 2019 02:28:23 +0100 Subject: [PATCH 38/96] Update to 2.37 --- README.md | 2 +- conf/app.src | 4 ++-- manifest.json | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index ff06768..8cae7a8 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ If you don't have YunoHost, please see [here](https://yunohost.org/#/install) to ## Overview Wekan is an open-source kanban board (task manager and organizer) -**Shipped version:** 2.09 +**Shipped version:** 2.37 ## Screenshots diff --git a/conf/app.src b/conf/app.src index 0b7bb83..4f533d4 100644 --- a/conf/app.src +++ b/conf/app.src @@ -1,7 +1,7 @@ # This is on YunoHost server just to avoid the file from disappearing # Original source is https://releases.wekan.team/ -SOURCE_URL=https://build.yunohost.org/apps/wekan-2.09.tar.gz -SOURCE_SUM=1956dd19f17d76a6d820a15bcf93a3eb12172f9f5cb1dd40d9925b977e8f930d +SOURCE_URL=https://github.com/yalh76/wekan_ynh/blob/2.37/conf/wekan-2.37.tar.gz +SOURCE_SUM=471c3c9190119da0b988a9ae0c28aa80388e07bd8d3720ff44e8a9ecac681c5b SOURCE_SUM_PRG=sha256sum ARCH_FORMAT=tar.gz SOURCE_IN_SUBDIR=true diff --git a/manifest.json b/manifest.json index 13cf267..da2e4bc 100644 --- a/manifest.json +++ b/manifest.json @@ -6,7 +6,7 @@ "en": "Trello-like kanban", "fr": "Un kanban similaire à Trello" }, - "version": "2.09~ynh1", + "version": "2.37~ynh1", "url": "https://wekan.io", "license": "MIT", "maintainer": { From 8bc11ee9cabe9014902bc9b0adfb2e824d351dd4 Mon Sep 17 00:00:00 2001 From: yalh76 Date: Wed, 6 Mar 2019 02:36:52 +0100 Subject: [PATCH 39/96] Fix sha256 checksum --- conf/app.src | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/app.src b/conf/app.src index 4f533d4..8aad521 100644 --- a/conf/app.src +++ b/conf/app.src @@ -1,7 +1,7 @@ # This is on YunoHost server just to avoid the file from disappearing # Original source is https://releases.wekan.team/ SOURCE_URL=https://github.com/yalh76/wekan_ynh/blob/2.37/conf/wekan-2.37.tar.gz -SOURCE_SUM=471c3c9190119da0b988a9ae0c28aa80388e07bd8d3720ff44e8a9ecac681c5b +SOURCE_SUM=dd1b9767550bcf61e7261329ec1a2fd51ff8a5d6d8493dc7029f61927400e10a SOURCE_SUM_PRG=sha256sum ARCH_FORMAT=tar.gz SOURCE_IN_SUBDIR=true From 7da87135bace2989ffb558e3d0c1e77efac5d8df Mon Sep 17 00:00:00 2001 From: yalh76 Date: Wed, 6 Mar 2019 02:40:53 +0100 Subject: [PATCH 40/96] Fix app source --- conf/app.src | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/app.src b/conf/app.src index 8aad521..207507f 100644 --- a/conf/app.src +++ b/conf/app.src @@ -1,6 +1,6 @@ # This is on YunoHost server just to avoid the file from disappearing # Original source is https://releases.wekan.team/ -SOURCE_URL=https://github.com/yalh76/wekan_ynh/blob/2.37/conf/wekan-2.37.tar.gz +SOURCE_URL=https://raw.githubusercontent.com/yalh76/wekan_ynh/2.37/conf/wekan-2.37.tar.gz SOURCE_SUM=dd1b9767550bcf61e7261329ec1a2fd51ff8a5d6d8493dc7029f61927400e10a SOURCE_SUM_PRG=sha256sum ARCH_FORMAT=tar.gz From c0ae0697a385c98bcdf193d9a630e49b4fca047b Mon Sep 17 00:00:00 2001 From: yalh76 Date: Wed, 6 Mar 2019 02:55:19 +0100 Subject: [PATCH 41/96] fix sha256 checksum --- conf/app.src | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/app.src b/conf/app.src index 207507f..990cf9d 100644 --- a/conf/app.src +++ b/conf/app.src @@ -1,7 +1,7 @@ # This is on YunoHost server just to avoid the file from disappearing # Original source is https://releases.wekan.team/ SOURCE_URL=https://raw.githubusercontent.com/yalh76/wekan_ynh/2.37/conf/wekan-2.37.tar.gz -SOURCE_SUM=dd1b9767550bcf61e7261329ec1a2fd51ff8a5d6d8493dc7029f61927400e10a +SOURCE_SUM=471c3c9190119da0b988a9ae0c28aa80388e07bd8d3720ff44e8a9ecac681c5b SOURCE_SUM_PRG=sha256sum ARCH_FORMAT=tar.gz SOURCE_IN_SUBDIR=true From fcfff7fefbc806c243d374408a9fe5cc79c099e5 Mon Sep 17 00:00:00 2001 From: yalh76 Date: Wed, 6 Mar 2019 04:05:48 +0100 Subject: [PATCH 42/96] move environment variable to dedicated file --- conf/.env | 11 +++++++++++ conf/systemd.service | 5 +---- scripts/install | 29 ++++++++++++++++++++++++----- scripts/upgrade | 14 +++++++++----- 4 files changed, 45 insertions(+), 14 deletions(-) create mode 100644 conf/.env diff --git a/conf/.env b/conf/.env new file mode 100644 index 0000000..912f470 --- /dev/null +++ b/conf/.env @@ -0,0 +1,11 @@ +# The path to NODEJS +PATH=__NODEJS_PATH__ + +# URL of the mongodb +MONGO_URL=mongodb://127.0.0.1:27017/__DB_NAME__ + +# Root URL +ROOT_URL=https://__DOMAIN_URI__ PORT=__PORT__ + +# The Node Environnement +NODE_ENV=production diff --git a/conf/systemd.service b/conf/systemd.service index 0fb4618..5abbcbf 100644 --- a/conf/systemd.service +++ b/conf/systemd.service @@ -7,10 +7,7 @@ After=network.target mongodb.service Type=simple User=__APP__ Group=__APP__ -Environment="PATH=__ENV_PATH__" -Environment=NODE_ENV=production -Environment=MONGO_URL=mongodb://127.0.0.1:27017/__DB_NAME__ -Environment=ROOT_URL=https://__DOMAIN_URI__ PORT=__PORT__ +EnvironmentFile=__FINALPATH__/.env WorkingDirectory=__FINALPATH__ ExecStart=/opt/node_n/bin/node __FINALPATH__/main.js Restart=on-failure diff --git a/scripts/install b/scripts/install index 90daf64..29f7d26 100755 --- a/scripts/install +++ b/scripts/install @@ -194,13 +194,32 @@ ynh_print_info "Configuring a systemd service..." ### - And the section "SETUP SYSTEMD" in the upgrade script # Create a dedicated systemd config -ynh_print_info "Adding wekan systemd service ..." -ynh_replace_string "__ENV_PATH__" "$nodejs_path" "../conf/systemd.service" -ynh_replace_string "__DB_NAME__" "$db_name" "../conf/systemd.service" -ynh_replace_string "__DOMAIN_URI__" "$domain$path_url" "../conf/systemd.service" -ynh_replace_string "__PORT__" "$port" "../conf/systemd.service" ynh_add_systemd_config +#================================================= +# MODIFY A CONFIG FILE +#================================================= + +### `ynh_replace_string` is used to replace a string in a file. +### (It's compatible with sed regular expressions syntax) +cp "../conf/.env" "$final_path/.env" + +ynh_replace_string "__NODEJS_PATH__" "$nodejs_path" "$final_path/.env" +ynh_replace_string "__DB_NAME__" "$db_name" "$final_path/.env" +ynh_replace_string "__DOMAIN_URI__" "$domain$path_url" "$final_path/.env" +ynh_replace_string "__PORT__" "$port" "$final_path/.env" + +#================================================= +# STORE THE CONFIG FILE CHECKSUM +#================================================= + +### `ynh_store_file_checksum` is used to store the checksum of a file. +### That way, during the upgrade script, by using `ynh_backup_if_checksum_is_different`, +### you can make a backup of this file before modifying it again if the admin had modified it. + +# Calculate and store the config file checksum into the app settings +ynh_store_file_checksum "$final_path/.env" + #================================================= # GENERIC FINALIZATION #================================================= diff --git a/scripts/upgrade b/scripts/upgrade index 4f48cfa..6240306 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -69,13 +69,17 @@ fi if ynh_version_gt "0.77-2" "${previous_version}" ; then ynh_install_nodejs 8.9.3 - ynh_use_nodejs + ynh_use_nodejs # Create a dedicated systemd config - ynh_replace_string "__ENV_PATH__" "$nodejs_path" "../conf/systemd.service" - ynh_replace_string "__DB_NAME__" "$db_name" "../conf/systemd.service" - ynh_replace_string "__DOMAIN_URI__" "$domain$path_url" "../conf/systemd.service" - ynh_replace_string "__PORT__" "$port" "../conf/systemd.service" ynh_add_systemd_config + # Create a dedicated .env config + ynh_backup_if_checksum_is_different "$final_path/.env" + cp "../conf/.env" "$final_path/.env" + ynh_replace_string "__NODEJS_PATH__" "$nodejs_path" "$final_path/.env" + ynh_replace_string "__DB_NAME__" "$db_name" "$final_path/.env" + ynh_replace_string "__DOMAIN_URI__" "$domain$path_url" "$final_path/.env" + ynh_replace_string "__PORT__" "$port" "$final_path/.env" + ynh_store_file_checksum "$final_path/.env" fi if ynh_version_gt "1.07~ynh2" "${previous_version}" ; then From 83077dd5aca9224b1aa018cb074f1e28239b0e17 Mon Sep 17 00:00:00 2001 From: yalh76 Date: Wed, 6 Mar 2019 04:15:18 +0100 Subject: [PATCH 43/96] Fix port --- conf/.env | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/conf/.env b/conf/.env index 912f470..f94c4e5 100644 --- a/conf/.env +++ b/conf/.env @@ -5,7 +5,10 @@ PATH=__NODEJS_PATH__ MONGO_URL=mongodb://127.0.0.1:27017/__DB_NAME__ # Root URL -ROOT_URL=https://__DOMAIN_URI__ PORT=__PORT__ +ROOT_URL=https://__DOMAIN_URI__ + +#Port +PORT=__PORT__ # The Node Environnement NODE_ENV=production From 4c1f2fe29a51861bd827238ebe862c4a012eabaa Mon Sep 17 00:00:00 2001 From: yalh76 Date: Wed, 6 Mar 2019 04:33:12 +0100 Subject: [PATCH 44/96] Remove npm install step --- scripts/install | 8 -------- scripts/upgrade | 6 ------ 2 files changed, 14 deletions(-) diff --git a/scripts/install b/scripts/install index ab1bc82..8af2114 100755 --- a/scripts/install +++ b/scripts/install @@ -90,14 +90,6 @@ ynh_system_user_create $app "$final_path" #================================================= # SPECIFIC SETUP #================================================= -# Install wekan dependencies -ynh_print_info "Installing npm dependencies ..." -chown -R $app $final_path -pushd $final_path/programs/server -ynh_use_nodejs -npm install -popd - # Start mogodb ynh_print_info "Starting mongodb ..." systemctl enable mongodb diff --git a/scripts/upgrade b/scripts/upgrade index 6d2d9cd..f0b7bc9 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -105,12 +105,6 @@ chown -R $app: "$final_path" chmod -R 640 "$final_path" find "$final_path" -type d -print0 | xargs -0 chmod 750 -# Relaunch a npm install -pushd $final_path/programs/server -ynh_use_nodejs -npm install -popd - #================================================= # RELOAD NGINX #================================================= From 44a11d252023fd58306c52748c2603c6438b1e12 Mon Sep 17 00:00:00 2001 From: yalh76 Date: Wed, 6 Mar 2019 05:05:49 +0100 Subject: [PATCH 45/96] Add additional environment variables --- conf/.env | 330 +++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 327 insertions(+), 3 deletions(-) diff --git a/conf/.env b/conf/.env index f94c4e5..17d1c80 100644 --- a/conf/.env +++ b/conf/.env @@ -1,14 +1,338 @@ +# The Node Environnement +NODE_ENV=production + # The path to NODEJS PATH=__NODEJS_PATH__ +# Activate Debug mode +#DEBUG=true + # URL of the mongodb MONGO_URL=mongodb://127.0.0.1:27017/__DB_NAME__ # Root URL ROOT_URL=https://__DOMAIN_URI__ -#Port +# Mail URL +MAIL_URL='smtp://user:pass@mailserver.example.com:25/' + +# This is local port where Wekan Node.js runs PORT=__PORT__ -# The Node Environnement -NODE_ENV=production +#--------------------------------------------- +# Wekan Export Board works when WITH_API=true. +# If you disable Wekan API with false, Export Board does not work. +WITH_API='true' + +#--------------------------------------------- +# CORS: Set Access-Control-Allow-Origin header. Example: * +#CORS=* + +#--------------------------------------------- +## Optional: Integration with Matomo https://matomo.org that is installed to your server +## The address of the server where Matomo is hosted: +# Example: MATOMO_ADDRESS=https://example.com/matomo +#MATOMO_ADDRESS= + +## The value of the site ID given in Matomo server for Wekan +# Example: MATOMO_SITE_ID=123456789 +#MATOMO_SITE_ID='' + +## The option do not track which enables users to not be tracked by matomo" +#Example: MATOMO_DO_NOT_TRACK=false +#MATOMO_DO_NOT_TRACK=true + +## The option that allows matomo to retrieve the username: +# Example: MATOMO_WITH_USERNAME=true +#MATOMO_WITH_USERNAME='false' + +#--------------------------------------------- +# Enable browser policy and allow one trusted URL that can have iframe that has Wekan embedded inside. +# Setting this to false is not recommended, it also disables all other browser policy protections +# and allows all iframing etc. See wekan/server/policy.js +# Default value: true +BROWSER_POLICY_ENABLED=true + +# When browser policy is enabled, HTML code at this Trusted URL can have iframe that embeds Wekan inside. +# Example: TRUSTED_URL=http://example.com +TRUSTED_URL='' + +# What to send to Outgoing Webhook, or leave out. Example, that includes all that are default: cardId,listId,oldListId,boardId,comment,user,card,commentId . +# Example: WEBHOOKS_ATTRIBUTES=cardId,listId,oldListId,boardId,comment,user,card,commentId +WEBHOOKS_ATTRIBUTES='' + +#--------------------------------------------- +# ==== OAUTH2 AZURE ==== +# https://github.com/wekan/wekan/wiki/Azure +# 1) Register the application with Azure. Make sure you capture +# the application ID as well as generate a secret key. +# 2) Configure the environment variables. This differs slightly +# by installation type, but make sure you have the following: +#OAUTH2_ENABLED=true + +# Application GUID captured during app registration: +#OAUTH2_CLIENT_ID=xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx + +# Secret key generated during app registration: +#OAUTH2_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx +#OAUTH2_SERVER_URL=https://login.microsoftonline.com/ +#OAUTH2_AUTH_ENDPOINT=/oauth2/v2.0/authorize +#OAUTH2_USERINFO_ENDPOINT=https://graph.microsoft.com/oidc/userinfo +#OAUTH2_TOKEN_ENDPOINT=/oauth2/v2.0/token + +# The claim name you want to map to the unique ID field: +#OAUTH2_ID_MAP=email + +# The claim name you want to map to the username field: +#OAUTH2_USERNAME_MAP=email + +# The claim name you want to map to the full name field: +#OAUTH2_FULLNAME_MAP=name + +# The claim name you want to map to the email field: +#OAUTH2_EMAIL_MAP=email + +#----------------------------------------------------------------- +# ==== OAUTH2 KEYCLOAK ==== +# https://github.com/wekan/wekan/wiki/Keycloak <== MAPPING INFO, REQUIRED +#OAUTH2_ENABLED=true +#OAUTH2_CLIENT_ID= +#OAUTH2_SERVER_URL=/auth +#OAUTH2_AUTH_ENDPOINT=/realms//protocol/openid-connect/auth +#OAUTH2_USERINFO_ENDPOINT=/realms//protocol/openid-connect/userinfo +#OAUTH2_TOKEN_ENDPOINT=/realms//protocol/openid-connect/token +#OAUTH2_SECRET= + +#----------------------------------------------------------------- +# ==== OAUTH2 DOORKEEPER ==== +# https://github.com/wekan/wekan/issues/1874 +# https://github.com/wekan/wekan/wiki/OAuth2 +# Enable the OAuth2 connection +#OAUTH2_ENABLED=true + +# OAuth2 docs: https://github.com/wekan/wekan/wiki/OAuth2 +# OAuth2 Client ID. +#OAUTH2_CLIENT_ID=abcde12345 + +# OAuth2 Secret. +#OAUTH2_SECRET=54321abcde + +# OAuth2 Server URL. +#OAUTH2_SERVER_URL=https://chat.example.com + +# OAuth2 Authorization Endpoint. +#OAUTH2_AUTH_ENDPOINT=/oauth/authorize + +# OAuth2 Userinfo Endpoint. +#OAUTH2_USERINFO_ENDPOINT=/oauth/userinfo + +# OAuth2 Token Endpoint. +#OAUTH2_TOKEN_ENDPOINT=/oauth/token + +# OAuth2 ID Mapping +#OAUTH2_ID_MAP= + +# OAuth2 Username Mapping +#OAUTH2_USERNAME_MAP= + +# OAuth2 Fullname Mapping +#OAUTH2_FULLNAME_MAP= + +# OAuth2 Email Mapping +#OAUTH2_EMAIL_MAP= + +#--------------------------------------------- +# LDAP_ENABLE : Enable or not the connection by the LDAP +# example : LDAP_ENABLE=true +#LDAP_ENABLE=false + +# LDAP_PORT : The port of the LDAP server +# example : LDAP_PORT=389 +#LDAP_PORT=389 + +# LDAP_HOST : The host server for the LDAP server +# example : LDAP_HOST=localhost +#LDAP_HOST= + +# LDAP_BASEDN : The base DN for the LDAP Tree +# example : LDAP_BASEDN=ou=user,dc=example,dc=org +#LDAP_BASEDN= + +# LDAP_LOGIN_FALLBACK : Fallback on the default authentication method +# example : LDAP_LOGIN_FALLBACK=true +#LDAP_LOGIN_FALLBACK=false + +# LDAP_RECONNECT : Reconnect to the server if the connection is lost +# example : LDAP_RECONNECT=false +#LDAP_RECONNECT=true + +# LDAP_TIMEOUT : Overall timeout, in milliseconds +# example : LDAP_TIMEOUT=12345 +#LDAP_TIMEOUT=10000 + +# LDAP_IDLE_TIMEOUT : Specifies the timeout for idle LDAP connections in milliseconds +# example : LDAP_IDLE_TIMEOUT=12345 +#LDAP_IDLE_TIMEOUT=10000 + +# LDAP_CONNECT_TIMEOUT : Connection timeout, in milliseconds +# example : LDAP_CONNECT_TIMEOUT=12345 +#LDAP_CONNECT_TIMEOUT=10000 + +# LDAP_AUTHENTIFICATION : If the LDAP needs a user account to search +# example : LDAP_AUTHENTIFICATION=true +#LDAP_AUTHENTIFICATION=false + +# LDAP_AUTHENTIFICATION_USERDN : The search user DN +# example : LDAP_AUTHENTIFICATION_USERDN=cn=admin,dc=example,dc=org +#LDAP_AUTHENTIFICATION_USERDN= + +# LDAP_AUTHENTIFICATION_PASSWORD : The password for the search user +# example : AUTHENTIFICATION_PASSWORD=admin +#LDAP_AUTHENTIFICATION_PASSWORD= + +# LDAP_LOG_ENABLED : Enable logs for the module +# example : LDAP_LOG_ENABLED=true +#LDAP_LOG_ENABLED=false + +# LDAP_BACKGROUND_SYNC : If the sync of the users should be done in the background +# example : LDAP_BACKGROUND_SYNC=true +#LDAP_BACKGROUND_SYNC=false + +# LDAP_BACKGROUND_SYNC_INTERVAL : At which interval does the background task sync in milliseconds +# example : LDAP_BACKGROUND_SYNC_INTERVAL=12345 +#LDAP_BACKGROUND_SYNC_INTERVAL=100 + +# LDAP_BACKGROUND_SYNC_KEEP_EXISTANT_USERS_UPDATED : +# example : LDAP_BACKGROUND_SYNC_KEEP_EXISTANT_USERS_UPDATED=true +#LDAP_BACKGROUND_SYNC_KEEP_EXISTANT_USERS_UPDATED=false + +# LDAP_BACKGROUND_SYNC_IMPORT_NEW_USERS : +# example : LDAP_BACKGROUND_SYNC_IMPORT_NEW_USERS=true +#LDAP_BACKGROUND_SYNC_IMPORT_NEW_USERS=false + +# LDAP_ENCRYPTION : If using LDAPS +# example : LDAP_ENCRYPTION=ssl +#LDAP_ENCRYPTION=false + +# LDAP_CA_CERT : The certification for the LDAPS server. Certificate needs to be included in this docker-compose.yml file. +# example : LDAP_CA_CERT=-----BEGIN CERTIFICATE-----MIIE+zCCA+OgAwIBAgIkAhwR/6TVLmdRY6hHxvUFWc0+Enmu/Hu6cj+G2FIdAgIC...-----END CERTIFICATE----- +#LDAP_CA_CERT= + +# LDAP_REJECT_UNAUTHORIZED : Reject Unauthorized Certificate +# example : LDAP_REJECT_UNAUTHORIZED=true +#LDAP_REJECT_UNAUTHORIZED=false + +# LDAP_USER_SEARCH_FILTER : Optional extra LDAP filters. Don't forget the outmost enclosing parentheses if needed +# example : LDAP_USER_SEARCH_FILTER= +#LDAP_USER_SEARCH_FILTER= + +# LDAP_USER_SEARCH_SCOPE : base (search only in the provided DN), one (search only in the provided DN and one level deep), or sub (search the whole subtree) +# example : LDAP_USER_SEARCH_SCOPE=one +#LDAP_USER_SEARCH_SCOPE= + +# LDAP_USER_SEARCH_FIELD : Which field is used to find the user +# example : LDAP_USER_SEARCH_FIELD=uid +#LDAP_USER_SEARCH_FIELD= + +# LDAP_SEARCH_PAGE_SIZE : Used for pagination (0=unlimited) +# example : LDAP_SEARCH_PAGE_SIZE=12345 +#LDAP_SEARCH_PAGE_SIZE=0 + +# LDAP_SEARCH_SIZE_LIMIT : The limit number of entries (0=unlimited) +# example : LDAP_SEARCH_SIZE_LIMIT=12345 +#LDAP_SEARCH_SIZE_LIMIT=0 + +# LDAP_GROUP_FILTER_ENABLE : Enable group filtering +# example : LDAP_GROUP_FILTER_ENABLE=true +#LDAP_GROUP_FILTER_ENABLE=false + +# LDAP_GROUP_FILTER_OBJECTCLASS : The object class for filtering +# example : LDAP_GROUP_FILTER_OBJECTCLASS=group +#LDAP_GROUP_FILTER_OBJECTCLASS= + +# LDAP_GROUP_FILTER_GROUP_ID_ATTRIBUTE : +# example : +#LDAP_GROUP_FILTER_GROUP_ID_ATTRIBUTE= + +# LDAP_GROUP_FILTER_GROUP_MEMBER_ATTRIBUTE : +# example : +#LDAP_GROUP_FILTER_GROUP_MEMBER_ATTRIBUTE= + +# LDAP_GROUP_FILTER_GROUP_MEMBER_FORMAT : +# example : +#LDAP_GROUP_FILTER_GROUP_MEMBER_FORMAT= + +# LDAP_GROUP_FILTER_GROUP_NAME : +# example : +#LDAP_GROUP_FILTER_GROUP_NAME= + +# LDAP_UNIQUE_IDENTIFIER_FIELD : This field is sometimes class GUID (Globally Unique Identifier) +# example : LDAP_UNIQUE_IDENTIFIER_FIELD=guid +#LDAP_UNIQUE_IDENTIFIER_FIELD= + +# LDAP_UTF8_NAMES_SLUGIFY : Convert the username to utf8 +# example : LDAP_UTF8_NAMES_SLUGIFY=false +#LDAP_UTF8_NAMES_SLUGIFY=true + +# LDAP_USERNAME_FIELD : Which field contains the ldap username +# example : LDAP_USERNAME_FIELD=username +#LDAP_USERNAME_FIELD= + +# LDAP_FULLNAME_FIELD : Which field contains the ldap fullname +# example : LDAP_FULLNAME_FIELD=fullname +#LDAP_FULLNAME_FIELD= + +# LDAP_MERGE_EXISTING_USERS : +# example : LDAP_MERGE_EXISTING_USERS=true +#LDAP_MERGE_EXISTING_USERS=false + +# LDAP_EMAIL_MATCH_ENABLE : allow existing account matching by e-mail address when username does not match +# example: LDAP_EMAIL_MATCH_ENABLE=true +#LDAP_EMAIL_MATCH_ENABLE=false + +# LDAP_EMAIL_MATCH_REQUIRE : require existing account matching by e-mail address when username does match +# example: LDAP_EMAIL_MATCH_REQUIRE=true +#LDAP_EMAIL_MATCH_REQUIRE=false + +# LDAP_EMAIL_MATCH_VERIFIED : require existing account email address to be verified for matching +# example: LDAP_EMAIL_MATCH_VERIFIED=true +#LDAP_EMAIL_MATCH_VERIFIED=false + +# LDAP_EMAIL_FIELD : which field contains the LDAP e-mail address +# example: LDAP_EMAIL_FIELD=mail +#LDAP_EMAIL_FIELD= + +# LDAP_SYNC_USER_DATA : +# example : LDAP_SYNC_USER_DATA=true +#LDAP_SYNC_USER_DATA=false + +# LDAP_SYNC_USER_DATA_FIELDMAP : +# example : LDAP_SYNC_USER_DATA_FIELDMAP={"cn":"name", "mail":"email"} +#LDAP_SYNC_USER_DATA_FIELDMAP= + +# LDAP_SYNC_GROUP_ROLES : +# example : +#LDAP_SYNC_GROUP_ROLES= + +# LDAP_DEFAULT_DOMAIN : The default domain of the ldap it is used to create email if the field is not map correctly with the LDAP_SYNC_USER_DATA_FIELDMAP +# example : +#LDAP_DEFAULT_DOMAIN= + +# Enable/Disable syncing of admin status based on ldap groups: +#LDAP_SYNC_ADMIN_STATUS=true + +# Comma separated list of admin group names to sync. +#LDAP_SYNC_ADMIN_GROUPS=group1,group2 + +# LOGOUT_WITH_TIMER : Enables or not the option logout with timer +# example : LOGOUT_WITH_TIMER=true +#LOGOUT_WITH_TIMER= + +# LOGOUT_IN : The number of days +# example : LOGOUT_IN=1 +#LOGOUT_IN= +#LOGOUT_ON_HOURS= + +# LOGOUT_ON_MINUTES : The number of minutes +# example : LOGOUT_ON_MINUTES=55 +#LOGOUT_ON_MINUTES= From cfd7fbd818ddceff92862d28536bddf4a94ff3d9 Mon Sep 17 00:00:00 2001 From: yalh76 Date: Wed, 6 Mar 2019 05:29:12 +0100 Subject: [PATCH 46/96] Nodejs upgrade from 8.9.3 to 8.15.1 --- scripts/install | 2 +- scripts/restore | 2 +- scripts/upgrade | 5 +++-- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/scripts/install b/scripts/install index 90daf64..a732f08 100755 --- a/scripts/install +++ b/scripts/install @@ -100,7 +100,7 @@ ynh_print_info "Installing dependencies..." ### - And the section "UPGRADE DEPENDENCIES" in the upgrade script ynh_print_info "Installing nodejs ..." -ynh_install_nodejs 8.9.3 +ynh_install_nodejs 8.15.1 ynh_print_info "Installing mongodb dependencies ..." ynh_install_app_dependencies "mongodb mongodb-server" diff --git a/scripts/restore b/scripts/restore index 11c87b7..eeba563 100644 --- a/scripts/restore +++ b/scripts/restore @@ -85,7 +85,7 @@ find "$final_path" -type d -print0 | xargs -0 chmod 750 ynh_print_info "Reinstalling dependencies..." # Define and install dependencies -ynh_install_nodejs 8.9.3 +ynh_install_nodejs 8.15.1 # Install mongodb ynh_install_app_dependencies "mongodb mongodb-server" diff --git a/scripts/upgrade b/scripts/upgrade index 4f48cfa..0a9990f 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -68,8 +68,9 @@ if ynh_version_gt "0.45-3" "${previous_version}" ; then fi if ynh_version_gt "0.77-2" "${previous_version}" ; then - ynh_install_nodejs 8.9.3 - ynh_use_nodejs + ynh_remove_nodejs + ynh_install_nodejs 8.15.1 + ynh_use_nodejs # Create a dedicated systemd config ynh_replace_string "__ENV_PATH__" "$nodejs_path" "../conf/systemd.service" ynh_replace_string "__DB_NAME__" "$db_name" "../conf/systemd.service" From d1ccc3322cb28fbf2ffdb5e2c5f8f2d7f84acec4 Mon Sep 17 00:00:00 2001 From: yalh76 Date: Wed, 6 Mar 2019 05:39:46 +0100 Subject: [PATCH 47/96] upgrade to nodejs 8.14.1 --- scripts/install | 2 +- scripts/restore | 2 +- scripts/upgrade | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/scripts/install b/scripts/install index a732f08..9dff508 100755 --- a/scripts/install +++ b/scripts/install @@ -100,7 +100,7 @@ ynh_print_info "Installing dependencies..." ### - And the section "UPGRADE DEPENDENCIES" in the upgrade script ynh_print_info "Installing nodejs ..." -ynh_install_nodejs 8.15.1 +ynh_install_nodejs 8.14.1 ynh_print_info "Installing mongodb dependencies ..." ynh_install_app_dependencies "mongodb mongodb-server" diff --git a/scripts/restore b/scripts/restore index eeba563..1719c53 100644 --- a/scripts/restore +++ b/scripts/restore @@ -85,7 +85,7 @@ find "$final_path" -type d -print0 | xargs -0 chmod 750 ynh_print_info "Reinstalling dependencies..." # Define and install dependencies -ynh_install_nodejs 8.15.1 +ynh_install_nodejs 8.14.1 # Install mongodb ynh_install_app_dependencies "mongodb mongodb-server" diff --git a/scripts/upgrade b/scripts/upgrade index 0a9990f..fb7948c 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -69,7 +69,7 @@ fi if ynh_version_gt "0.77-2" "${previous_version}" ; then ynh_remove_nodejs - ynh_install_nodejs 8.15.1 + ynh_install_nodejs 8.14.1 ynh_use_nodejs # Create a dedicated systemd config ynh_replace_string "__ENV_PATH__" "$nodejs_path" "../conf/systemd.service" From bb504cbf3d4bd8e1a5403a8ab7857f9d7e4cd800 Mon Sep 17 00:00:00 2001 From: yalh76 Date: Wed, 6 Mar 2019 19:51:22 +0100 Subject: [PATCH 48/96] Upgrade to 2.40 --- README.md | 2 +- conf/app.src | 4 ++-- manifest.json | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 8cae7a8..f929164 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ If you don't have YunoHost, please see [here](https://yunohost.org/#/install) to ## Overview Wekan is an open-source kanban board (task manager and organizer) -**Shipped version:** 2.37 +**Shipped version:** 2.40 ## Screenshots diff --git a/conf/app.src b/conf/app.src index 990cf9d..e608dae 100644 --- a/conf/app.src +++ b/conf/app.src @@ -1,7 +1,7 @@ # This is on YunoHost server just to avoid the file from disappearing # Original source is https://releases.wekan.team/ -SOURCE_URL=https://raw.githubusercontent.com/yalh76/wekan_ynh/2.37/conf/wekan-2.37.tar.gz -SOURCE_SUM=471c3c9190119da0b988a9ae0c28aa80388e07bd8d3720ff44e8a9ecac681c5b +SOURCE_URL=https://raw.githubusercontent.com/yalh76/wekan_ynh/2.40/conf/wekan-2.40.tar.gz +SOURCE_SUM=d49ca72918f979ad1488dfa0f23b099e241eef1eabcbc865fa42f32e6c490018 SOURCE_SUM_PRG=sha256sum ARCH_FORMAT=tar.gz SOURCE_IN_SUBDIR=true diff --git a/manifest.json b/manifest.json index da2e4bc..0c2898b 100644 --- a/manifest.json +++ b/manifest.json @@ -6,7 +6,7 @@ "en": "Trello-like kanban", "fr": "Un kanban similaire à Trello" }, - "version": "2.37~ynh1", + "version": "2.40~ynh1", "url": "https://wekan.io", "license": "MIT", "maintainer": { From 5a8506047763d79177fcb5da0b2778a8fc92f5cc Mon Sep 17 00:00:00 2001 From: yalh76 Date: Wed, 6 Mar 2019 20:26:15 +0100 Subject: [PATCH 49/96] to nodejs 8.15.1 --- scripts/install | 2 +- scripts/restore | 2 +- scripts/upgrade | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/scripts/install b/scripts/install index 9dff508..a732f08 100755 --- a/scripts/install +++ b/scripts/install @@ -100,7 +100,7 @@ ynh_print_info "Installing dependencies..." ### - And the section "UPGRADE DEPENDENCIES" in the upgrade script ynh_print_info "Installing nodejs ..." -ynh_install_nodejs 8.14.1 +ynh_install_nodejs 8.15.1 ynh_print_info "Installing mongodb dependencies ..." ynh_install_app_dependencies "mongodb mongodb-server" diff --git a/scripts/restore b/scripts/restore index 1719c53..eeba563 100644 --- a/scripts/restore +++ b/scripts/restore @@ -85,7 +85,7 @@ find "$final_path" -type d -print0 | xargs -0 chmod 750 ynh_print_info "Reinstalling dependencies..." # Define and install dependencies -ynh_install_nodejs 8.14.1 +ynh_install_nodejs 8.15.1 # Install mongodb ynh_install_app_dependencies "mongodb mongodb-server" diff --git a/scripts/upgrade b/scripts/upgrade index fb7948c..0a9990f 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -69,7 +69,7 @@ fi if ynh_version_gt "0.77-2" "${previous_version}" ; then ynh_remove_nodejs - ynh_install_nodejs 8.14.1 + ynh_install_nodejs 8.15.1 ynh_use_nodejs # Create a dedicated systemd config ynh_replace_string "__ENV_PATH__" "$nodejs_path" "../conf/systemd.service" From 0bd981e7780fc6851dcb3f071751b6c4dec18e03 Mon Sep 17 00:00:00 2001 From: yalh76 Date: Thu, 7 Mar 2019 00:49:05 +0100 Subject: [PATCH 50/96] Provide LDAP variables --- conf/.env | 43 +++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 41 insertions(+), 2 deletions(-) diff --git a/conf/.env b/conf/.env index 17d1c80..73d8daa 100644 --- a/conf/.env +++ b/conf/.env @@ -14,7 +14,7 @@ MONGO_URL=mongodb://127.0.0.1:27017/__DB_NAME__ ROOT_URL=https://__DOMAIN_URI__ # Mail URL -MAIL_URL='smtp://user:pass@mailserver.example.com:25/' +MAIL_URL='smtp://localhost:25/' # This is local port where Wekan Node.js runs PORT=__PORT__ @@ -145,42 +145,52 @@ WEBHOOKS_ATTRIBUTES='' # LDAP_ENABLE : Enable or not the connection by the LDAP # example : LDAP_ENABLE=true #LDAP_ENABLE=false +LDAP_ENABLE=true # LDAP_PORT : The port of the LDAP server # example : LDAP_PORT=389 #LDAP_PORT=389 +LDAP_PORT=389 # LDAP_HOST : The host server for the LDAP server # example : LDAP_HOST=localhost #LDAP_HOST= +LDAP_HOST=localhost # LDAP_BASEDN : The base DN for the LDAP Tree # example : LDAP_BASEDN=ou=user,dc=example,dc=org #LDAP_BASEDN= +LDAP_BASEDN=dc=yunohost,dc=org # LDAP_LOGIN_FALLBACK : Fallback on the default authentication method # example : LDAP_LOGIN_FALLBACK=true #LDAP_LOGIN_FALLBACK=false +LDAP_LOGIN_FALLBACK=false # LDAP_RECONNECT : Reconnect to the server if the connection is lost # example : LDAP_RECONNECT=false #LDAP_RECONNECT=true +LDAP_RECONNECT=true # LDAP_TIMEOUT : Overall timeout, in milliseconds # example : LDAP_TIMEOUT=12345 #LDAP_TIMEOUT=10000 +LDAP_TIMEOUT=10000 # LDAP_IDLE_TIMEOUT : Specifies the timeout for idle LDAP connections in milliseconds # example : LDAP_IDLE_TIMEOUT=12345 #LDAP_IDLE_TIMEOUT=10000 +LDAP_IDLE_TIMEOUT=10000 # LDAP_CONNECT_TIMEOUT : Connection timeout, in milliseconds # example : LDAP_CONNECT_TIMEOUT=12345 #LDAP_CONNECT_TIMEOUT=10000 +LDAP_CONNECT_TIMEOUT=10000 # LDAP_AUTHENTIFICATION : If the LDAP needs a user account to search # example : LDAP_AUTHENTIFICATION=true #LDAP_AUTHENTIFICATION=false +LDAP_AUTHENTIFICATION=false # LDAP_AUTHENTIFICATION_USERDN : The search user DN # example : LDAP_AUTHENTIFICATION_USERDN=cn=admin,dc=example,dc=org @@ -193,22 +203,27 @@ WEBHOOKS_ATTRIBUTES='' # LDAP_LOG_ENABLED : Enable logs for the module # example : LDAP_LOG_ENABLED=true #LDAP_LOG_ENABLED=false +LDAP_LOG_ENABLED=true # LDAP_BACKGROUND_SYNC : If the sync of the users should be done in the background # example : LDAP_BACKGROUND_SYNC=true #LDAP_BACKGROUND_SYNC=false +LDAP_BACKGROUND_SYNC=true # LDAP_BACKGROUND_SYNC_INTERVAL : At which interval does the background task sync in milliseconds # example : LDAP_BACKGROUND_SYNC_INTERVAL=12345 #LDAP_BACKGROUND_SYNC_INTERVAL=100 +LDAP_BACKGROUND_SYNC_INTERVAL=100 # LDAP_BACKGROUND_SYNC_KEEP_EXISTANT_USERS_UPDATED : # example : LDAP_BACKGROUND_SYNC_KEEP_EXISTANT_USERS_UPDATED=true #LDAP_BACKGROUND_SYNC_KEEP_EXISTANT_USERS_UPDATED=false +LDAP_BACKGROUND_SYNC_KEEP_EXISTANT_USERS_UPDATED=true # LDAP_BACKGROUND_SYNC_IMPORT_NEW_USERS : # example : LDAP_BACKGROUND_SYNC_IMPORT_NEW_USERS=true #LDAP_BACKGROUND_SYNC_IMPORT_NEW_USERS=false +LDAP_BACKGROUND_SYNC_IMPORT_NEW_USERS=true # LDAP_ENCRYPTION : If using LDAPS # example : LDAP_ENCRYPTION=ssl @@ -225,90 +240,112 @@ WEBHOOKS_ATTRIBUTES='' # LDAP_USER_SEARCH_FILTER : Optional extra LDAP filters. Don't forget the outmost enclosing parentheses if needed # example : LDAP_USER_SEARCH_FILTER= #LDAP_USER_SEARCH_FILTER= +LDAP_USER_SEARCH_FILTER="(&(|(objectclass=posixAccount))(uid=%uid))" # LDAP_USER_SEARCH_SCOPE : base (search only in the provided DN), one (search only in the provided DN and one level deep), or sub (search the whole subtree) # example : LDAP_USER_SEARCH_SCOPE=one #LDAP_USER_SEARCH_SCOPE= +LDAP_USER_SEARCH_SCOPE=sub # LDAP_USER_SEARCH_FIELD : Which field is used to find the user # example : LDAP_USER_SEARCH_FIELD=uid #LDAP_USER_SEARCH_FIELD= +LDAP_USER_SEARCH_FIELD=uid # LDAP_SEARCH_PAGE_SIZE : Used for pagination (0=unlimited) # example : LDAP_SEARCH_PAGE_SIZE=12345 #LDAP_SEARCH_PAGE_SIZE=0 +LDAP_SEARCH_PAGE_SIZE=0 # LDAP_SEARCH_SIZE_LIMIT : The limit number of entries (0=unlimited) # example : LDAP_SEARCH_SIZE_LIMIT=12345 #LDAP_SEARCH_SIZE_LIMIT=0 +LDAP_SEARCH_SIZE_LIMIT=0 # LDAP_GROUP_FILTER_ENABLE : Enable group filtering # example : LDAP_GROUP_FILTER_ENABLE=true #LDAP_GROUP_FILTER_ENABLE=false +LDAP_GROUP_FILTER_ENABLE=true # LDAP_GROUP_FILTER_OBJECTCLASS : The object class for filtering # example : LDAP_GROUP_FILTER_OBJECTCLASS=group #LDAP_GROUP_FILTER_OBJECTCLASS= +LDAP_GROUP_FILTER_OBJECTCLASS=posixGroup # LDAP_GROUP_FILTER_GROUP_ID_ATTRIBUTE : # example : #LDAP_GROUP_FILTER_GROUP_ID_ATTRIBUTE= +LDAP_GROUP_FILTER_GROUP_ID_ATTRIBUTE=gidNumber # LDAP_GROUP_FILTER_GROUP_MEMBER_ATTRIBUTE : # example : #LDAP_GROUP_FILTER_GROUP_MEMBER_ATTRIBUTE= +LDAP_GROUP_FILTER_GROUP_MEMBER_ATTRIBUTE=memberUid # LDAP_GROUP_FILTER_GROUP_MEMBER_FORMAT : # example : #LDAP_GROUP_FILTER_GROUP_MEMBER_FORMAT= +LDAP_GROUP_FILTER_GROUP_MEMBER_FORMAT=dn # LDAP_GROUP_FILTER_GROUP_NAME : -# example : +# example : LDAP_GROUP_FILTER_GROUP_NAME=yourwekangroup #LDAP_GROUP_FILTER_GROUP_NAME= + # LDAP_UNIQUE_IDENTIFIER_FIELD : This field is sometimes class GUID (Globally Unique Identifier) # example : LDAP_UNIQUE_IDENTIFIER_FIELD=guid #LDAP_UNIQUE_IDENTIFIER_FIELD= +LDAP_UNIQUE_IDENTIFIER_FIELD=entryUUID # LDAP_UTF8_NAMES_SLUGIFY : Convert the username to utf8 # example : LDAP_UTF8_NAMES_SLUGIFY=false #LDAP_UTF8_NAMES_SLUGIFY=true +LDAP_UTF8_NAMES_SLUGIFY=true # LDAP_USERNAME_FIELD : Which field contains the ldap username # example : LDAP_USERNAME_FIELD=username #LDAP_USERNAME_FIELD= +LDAP_USERNAME_FIELD=uid # LDAP_FULLNAME_FIELD : Which field contains the ldap fullname # example : LDAP_FULLNAME_FIELD=fullname #LDAP_FULLNAME_FIELD= +LDAP_FULLNAME_FIELD=cn # LDAP_MERGE_EXISTING_USERS : # example : LDAP_MERGE_EXISTING_USERS=true #LDAP_MERGE_EXISTING_USERS=false +LDAP_MERGE_EXISTING_USERS=true # LDAP_EMAIL_MATCH_ENABLE : allow existing account matching by e-mail address when username does not match # example: LDAP_EMAIL_MATCH_ENABLE=true #LDAP_EMAIL_MATCH_ENABLE=false +LDAP_EMAIL_MATCH_ENABLE=true # LDAP_EMAIL_MATCH_REQUIRE : require existing account matching by e-mail address when username does match # example: LDAP_EMAIL_MATCH_REQUIRE=true #LDAP_EMAIL_MATCH_REQUIRE=false +LDAP_EMAIL_MATCH_REQUIRE=true # LDAP_EMAIL_MATCH_VERIFIED : require existing account email address to be verified for matching # example: LDAP_EMAIL_MATCH_VERIFIED=true #LDAP_EMAIL_MATCH_VERIFIED=false +LDAP_EMAIL_MATCH_VERIFIED=true # LDAP_EMAIL_FIELD : which field contains the LDAP e-mail address # example: LDAP_EMAIL_FIELD=mail #LDAP_EMAIL_FIELD= +LDAP_EMAIL_FIELD=mail # LDAP_SYNC_USER_DATA : # example : LDAP_SYNC_USER_DATA=true #LDAP_SYNC_USER_DATA=false +LDAP_SYNC_USER_DATA=true # LDAP_SYNC_USER_DATA_FIELDMAP : # example : LDAP_SYNC_USER_DATA_FIELDMAP={"cn":"name", "mail":"email"} #LDAP_SYNC_USER_DATA_FIELDMAP= +LDAP_SYNC_USER_DATA_FIELDMAP={"cn":"name","displayName":"Full name"} # LDAP_SYNC_GROUP_ROLES : # example : @@ -320,9 +357,11 @@ WEBHOOKS_ATTRIBUTES='' # Enable/Disable syncing of admin status based on ldap groups: #LDAP_SYNC_ADMIN_STATUS=true +LDAP_SYNC_ADMIN_STATUS=true # Comma separated list of admin group names to sync. #LDAP_SYNC_ADMIN_GROUPS=group1,group2 +LDAP_SYNC_ADMIN_GROUPS=admins # LOGOUT_WITH_TIMER : Enables or not the option logout with timer # example : LOGOUT_WITH_TIMER=true From ca68f74e37271ce96f39f968fc85257a25267a68 Mon Sep 17 00:00:00 2001 From: yalh76 Date: Thu, 7 Mar 2019 01:42:22 +0100 Subject: [PATCH 51/96] Ldap First Step --- conf/.env | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/conf/.env b/conf/.env index 73d8daa..88c0a52 100644 --- a/conf/.env +++ b/conf/.env @@ -213,7 +213,7 @@ LDAP_BACKGROUND_SYNC=true # LDAP_BACKGROUND_SYNC_INTERVAL : At which interval does the background task sync in milliseconds # example : LDAP_BACKGROUND_SYNC_INTERVAL=12345 #LDAP_BACKGROUND_SYNC_INTERVAL=100 -LDAP_BACKGROUND_SYNC_INTERVAL=100 +LDAP_BACKGROUND_SYNC_INTERVAL=600000 # LDAP_BACKGROUND_SYNC_KEEP_EXISTANT_USERS_UPDATED : # example : LDAP_BACKGROUND_SYNC_KEEP_EXISTANT_USERS_UPDATED=true @@ -240,7 +240,7 @@ LDAP_BACKGROUND_SYNC_IMPORT_NEW_USERS=true # LDAP_USER_SEARCH_FILTER : Optional extra LDAP filters. Don't forget the outmost enclosing parentheses if needed # example : LDAP_USER_SEARCH_FILTER= #LDAP_USER_SEARCH_FILTER= -LDAP_USER_SEARCH_FILTER="(&(|(objectclass=posixAccount))(uid=%uid))" +LDAP_USER_SEARCH_FILTER="" # LDAP_USER_SEARCH_SCOPE : base (search only in the provided DN), one (search only in the provided DN and one level deep), or sub (search the whole subtree) # example : LDAP_USER_SEARCH_SCOPE=one @@ -265,7 +265,7 @@ LDAP_SEARCH_SIZE_LIMIT=0 # LDAP_GROUP_FILTER_ENABLE : Enable group filtering # example : LDAP_GROUP_FILTER_ENABLE=true #LDAP_GROUP_FILTER_ENABLE=false -LDAP_GROUP_FILTER_ENABLE=true +LDAP_GROUP_FILTER_ENABLE=false # LDAP_GROUP_FILTER_OBJECTCLASS : The object class for filtering # example : LDAP_GROUP_FILTER_OBJECTCLASS=group @@ -288,9 +288,9 @@ LDAP_GROUP_FILTER_GROUP_MEMBER_ATTRIBUTE=memberUid LDAP_GROUP_FILTER_GROUP_MEMBER_FORMAT=dn # LDAP_GROUP_FILTER_GROUP_NAME : -# example : LDAP_GROUP_FILTER_GROUP_NAME=yourwekangroup +# example : #LDAP_GROUP_FILTER_GROUP_NAME= - +LDAP_GROUP_FILTER_GROUP_NAME=cn # LDAP_UNIQUE_IDENTIFIER_FIELD : This field is sometimes class GUID (Globally Unique Identifier) # example : LDAP_UNIQUE_IDENTIFIER_FIELD=guid @@ -300,7 +300,6 @@ LDAP_UNIQUE_IDENTIFIER_FIELD=entryUUID # LDAP_UTF8_NAMES_SLUGIFY : Convert the username to utf8 # example : LDAP_UTF8_NAMES_SLUGIFY=false #LDAP_UTF8_NAMES_SLUGIFY=true -LDAP_UTF8_NAMES_SLUGIFY=true # LDAP_USERNAME_FIELD : Which field contains the ldap username # example : LDAP_USERNAME_FIELD=username @@ -345,7 +344,7 @@ LDAP_SYNC_USER_DATA=true # LDAP_SYNC_USER_DATA_FIELDMAP : # example : LDAP_SYNC_USER_DATA_FIELDMAP={"cn":"name", "mail":"email"} #LDAP_SYNC_USER_DATA_FIELDMAP= -LDAP_SYNC_USER_DATA_FIELDMAP={"cn":"name","displayName":"Full name"} +LDAP_SYNC_USER_DATA_FIELDMAP={"cn":"name"} # LDAP_SYNC_GROUP_ROLES : # example : @@ -354,14 +353,13 @@ LDAP_SYNC_USER_DATA_FIELDMAP={"cn":"name","displayName":"Full name"} # LDAP_DEFAULT_DOMAIN : The default domain of the ldap it is used to create email if the field is not map correctly with the LDAP_SYNC_USER_DATA_FIELDMAP # example : #LDAP_DEFAULT_DOMAIN= +LDAP_DEFAULT_DOMAIN=yh03.yh.yalh.net # Enable/Disable syncing of admin status based on ldap groups: #LDAP_SYNC_ADMIN_STATUS=true -LDAP_SYNC_ADMIN_STATUS=true # Comma separated list of admin group names to sync. #LDAP_SYNC_ADMIN_GROUPS=group1,group2 -LDAP_SYNC_ADMIN_GROUPS=admins # LOGOUT_WITH_TIMER : Enables or not the option logout with timer # example : LOGOUT_WITH_TIMER=true @@ -374,4 +372,4 @@ LDAP_SYNC_ADMIN_GROUPS=admins # LOGOUT_ON_MINUTES : The number of minutes # example : LOGOUT_ON_MINUTES=55 -#LOGOUT_ON_MINUTES= +#LOGOUT_ON_MINUTES= \ No newline at end of file From a5378a6bafd9415225693c55bed601fa10aeda3f Mon Sep 17 00:00:00 2001 From: yalh76 Date: Thu, 7 Mar 2019 02:46:44 +0100 Subject: [PATCH 52/96] Configure LDAP for Yunohost --- conf/.env | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/conf/.env b/conf/.env index 88c0a52..3a664d8 100644 --- a/conf/.env +++ b/conf/.env @@ -165,7 +165,7 @@ LDAP_BASEDN=dc=yunohost,dc=org # LDAP_LOGIN_FALLBACK : Fallback on the default authentication method # example : LDAP_LOGIN_FALLBACK=true #LDAP_LOGIN_FALLBACK=false -LDAP_LOGIN_FALLBACK=false +LDAP_LOGIN_FALLBACK=true # LDAP_RECONNECT : Reconnect to the server if the connection is lost # example : LDAP_RECONNECT=false @@ -213,7 +213,7 @@ LDAP_BACKGROUND_SYNC=true # LDAP_BACKGROUND_SYNC_INTERVAL : At which interval does the background task sync in milliseconds # example : LDAP_BACKGROUND_SYNC_INTERVAL=12345 #LDAP_BACKGROUND_SYNC_INTERVAL=100 -LDAP_BACKGROUND_SYNC_INTERVAL=600000 +LDAP_BACKGROUND_SYNC_INTERVAL=100 # LDAP_BACKGROUND_SYNC_KEEP_EXISTANT_USERS_UPDATED : # example : LDAP_BACKGROUND_SYNC_KEEP_EXISTANT_USERS_UPDATED=true @@ -240,7 +240,7 @@ LDAP_BACKGROUND_SYNC_IMPORT_NEW_USERS=true # LDAP_USER_SEARCH_FILTER : Optional extra LDAP filters. Don't forget the outmost enclosing parentheses if needed # example : LDAP_USER_SEARCH_FILTER= #LDAP_USER_SEARCH_FILTER= -LDAP_USER_SEARCH_FILTER="" +LDAP_USER_SEARCH_FILTER="(objectclass=posixAccount)" # LDAP_USER_SEARCH_SCOPE : base (search only in the provided DN), one (search only in the provided DN and one level deep), or sub (search the whole subtree) # example : LDAP_USER_SEARCH_SCOPE=one @@ -265,7 +265,7 @@ LDAP_SEARCH_SIZE_LIMIT=0 # LDAP_GROUP_FILTER_ENABLE : Enable group filtering # example : LDAP_GROUP_FILTER_ENABLE=true #LDAP_GROUP_FILTER_ENABLE=false -LDAP_GROUP_FILTER_ENABLE=false +LDAP_GROUP_FILTER_ENABLE=true # LDAP_GROUP_FILTER_OBJECTCLASS : The object class for filtering # example : LDAP_GROUP_FILTER_OBJECTCLASS=group @@ -275,7 +275,7 @@ LDAP_GROUP_FILTER_OBJECTCLASS=posixGroup # LDAP_GROUP_FILTER_GROUP_ID_ATTRIBUTE : # example : #LDAP_GROUP_FILTER_GROUP_ID_ATTRIBUTE= -LDAP_GROUP_FILTER_GROUP_ID_ATTRIBUTE=gidNumber +LDAP_GROUP_FILTER_GROUP_ID_ATTRIBUTE=cn # LDAP_GROUP_FILTER_GROUP_MEMBER_ATTRIBUTE : # example : @@ -285,12 +285,12 @@ LDAP_GROUP_FILTER_GROUP_MEMBER_ATTRIBUTE=memberUid # LDAP_GROUP_FILTER_GROUP_MEMBER_FORMAT : # example : #LDAP_GROUP_FILTER_GROUP_MEMBER_FORMAT= -LDAP_GROUP_FILTER_GROUP_MEMBER_FORMAT=dn +LDAP_GROUP_FILTER_GROUP_MEMBER_FORMAT=uid # LDAP_GROUP_FILTER_GROUP_NAME : -# example : +# example : LDAP_GROUP_FILTER_GROUP_NAME=wekan_user #LDAP_GROUP_FILTER_GROUP_NAME= -LDAP_GROUP_FILTER_GROUP_NAME=cn +LDAP_GROUP_FILTER_GROUP_NAME=sftpusers # LDAP_UNIQUE_IDENTIFIER_FIELD : This field is sometimes class GUID (Globally Unique Identifier) # example : LDAP_UNIQUE_IDENTIFIER_FIELD=guid @@ -300,6 +300,7 @@ LDAP_UNIQUE_IDENTIFIER_FIELD=entryUUID # LDAP_UTF8_NAMES_SLUGIFY : Convert the username to utf8 # example : LDAP_UTF8_NAMES_SLUGIFY=false #LDAP_UTF8_NAMES_SLUGIFY=true +LDAP_UTF8_NAMES_SLUGIFY=true # LDAP_USERNAME_FIELD : Which field contains the ldap username # example : LDAP_USERNAME_FIELD=username @@ -324,12 +325,12 @@ LDAP_EMAIL_MATCH_ENABLE=true # LDAP_EMAIL_MATCH_REQUIRE : require existing account matching by e-mail address when username does match # example: LDAP_EMAIL_MATCH_REQUIRE=true #LDAP_EMAIL_MATCH_REQUIRE=false -LDAP_EMAIL_MATCH_REQUIRE=true +LDAP_EMAIL_MATCH_REQUIRE=false # LDAP_EMAIL_MATCH_VERIFIED : require existing account email address to be verified for matching # example: LDAP_EMAIL_MATCH_VERIFIED=true #LDAP_EMAIL_MATCH_VERIFIED=false -LDAP_EMAIL_MATCH_VERIFIED=true +LDAP_EMAIL_MATCH_VERIFIED=false # LDAP_EMAIL_FIELD : which field contains the LDAP e-mail address # example: LDAP_EMAIL_FIELD=mail @@ -349,6 +350,7 @@ LDAP_SYNC_USER_DATA_FIELDMAP={"cn":"name"} # LDAP_SYNC_GROUP_ROLES : # example : #LDAP_SYNC_GROUP_ROLES= +LDAP_SYNC_GROUP_ROLES=admins # LDAP_DEFAULT_DOMAIN : The default domain of the ldap it is used to create email if the field is not map correctly with the LDAP_SYNC_USER_DATA_FIELDMAP # example : @@ -357,9 +359,11 @@ LDAP_DEFAULT_DOMAIN=yh03.yh.yalh.net # Enable/Disable syncing of admin status based on ldap groups: #LDAP_SYNC_ADMIN_STATUS=true +LDAP_SYNC_ADMIN_STATUS=true # Comma separated list of admin group names to sync. #LDAP_SYNC_ADMIN_GROUPS=group1,group2 +LDAP_SYNC_ADMIN_GROUPS=admins # LOGOUT_WITH_TIMER : Enables or not the option logout with timer # example : LOGOUT_WITH_TIMER=true From c0657961f82277e9405cedbaa6ef128c8897347f Mon Sep 17 00:00:00 2001 From: yalh76 Date: Thu, 7 Mar 2019 03:08:27 +0100 Subject: [PATCH 53/96] Update according LDAP implementation --- README.md | 7 ++++--- check_process | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 8cae7a8..99fbc2d 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,7 @@ Wekan is an open-source kanban board (task manager and organizer) - This app **only works on x86, 64bits architecture** ! In particular, it won't work on 32 bit machines or ARM. See the discussion [here](https://github.com/YunoHost-Apps/wekan_ynh/issues/1#issuecomment-401612500). On the long term, [support for ARM64 might happen](https://blog.wekan.team/2018/01/wekan-progress-on-x64-and-arm/index.html)... -- There is currently **no SSO/LDAP integration** though it might be integrated at some point in the app, now that it's supported in Meteor/Wekan. c.f. discussion in [here](https://github.com/YunoHost-Apps/wekan_ynh/issues/4). In the meantime, users can create accounts (in fact, they can create infinite number of accounts) manually, and need to login manually specifically in Wekan. +- There is currently **no SSO integration** though it might be integrated at some point in the app, now that it's supported in Meteor/Wekan. In the meantime, users can create accounts (in fact, they can create infinite number of accounts) manually, and need to login manually specifically in Wekan. ## Infos @@ -33,8 +33,6 @@ Wekan is an open-source kanban board (task manager and organizer) **Private/Public mode:** In private mode, only authorized YunoHost members can access to the wekan. -**SSO/LDAP:** SSO and LDAP are not configured. - ## Configuration First registered user will be admin, and next ones normal users. If you want other admins too, you can change their permission to admin at Wekan Admin Panel. @@ -45,6 +43,9 @@ First registered user will be admin, and next ones normal users. If you want oth ## YunoHost specific features +#### Multi-users support + +LDAP is supported but and HTTP auth is stil not supported #### Supported architectures * x86-64b - [![Build Status](https://ci-apps.yunohost.org/ci/logs/wekan%20%28Community%29.svg)](https://ci-apps.yunohost.org/ci/apps/wekan/) diff --git a/check_process b/check_process index 26fa846..6a85be0 100644 --- a/check_process +++ b/check_process @@ -22,7 +22,7 @@ Level 3=auto # Level 4: If the app supports LDAP and SSOwat, turn level 4 to '1' and add a link to an issue or a part of your code to show it. # If the app does not use LDAP nor SSOwat, and can't use them, turn level 4 to 'na' and explain as well. - #LDAP to be implemented in wekan_ynh: https://github.com/wekan/wekan/wiki/LDAP + #LDAP Implemented but not SSOwat Level 4=0 Level 5=auto Level 6=auto From 7dad072155fd728c49ce5379964307f578fd9b81 Mon Sep 17 00:00:00 2001 From: yalh76 Date: Thu, 7 Mar 2019 03:29:14 +0100 Subject: [PATCH 54/96] Add change_url script --- scripts/change_url | 111 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 111 insertions(+) create mode 100644 scripts/change_url diff --git a/scripts/change_url b/scripts/change_url new file mode 100644 index 0000000..93a67da --- /dev/null +++ b/scripts/change_url @@ -0,0 +1,111 @@ +#!/bin/bash + +#================================================= +# GENERIC STARTING +#================================================= +# IMPORT GENERIC HELPERS +#================================================= + +source _common.sh +source /usr/share/yunohost/helpers + +#================================================= +# RETRIEVE ARGUMENTS +#================================================= + +old_domain=$YNH_APP_OLD_DOMAIN +old_path=$YNH_APP_OLD_PATH + +new_domain=$YNH_APP_NEW_DOMAIN +new_path=$YNH_APP_NEW_PATH + +app=$YNH_APP_INSTANCE_NAME + +#================================================= +# LOAD SETTINGS +#================================================= +ynh_print_info "Loading installation settings..." + +# Needed for helper "ynh_add_nginx_config" +final_path=$(ynh_app_setting_get $app 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) + +#================================================= +# CHECK THE SYNTAX OF THE PATHS +#================================================= + +test -n "$old_path" || old_path="/" +test -n "$new_path" || new_path="/" +new_path=$(ynh_normalize_url_path $new_path) +old_path=$(ynh_normalize_url_path $old_path) + +#================================================= +# CHECK WHICH PARTS SHOULD BE CHANGED +#================================================= + +change_domain=0 +if [ "$old_domain" != "$new_domain" ] +then + change_domain=1 +fi + +change_path=0 +if [ "$old_path" != "$new_path" ] +then + change_path=1 +fi + +#================================================= +# STANDARD MODIFICATIONS +#================================================= +# MODIFY URL IN NGINX CONF +#================================================= +ynh_print_info "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 +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" + # Set global variables for nginx helper + domain="$old_domain" + path_url="$new_path" + # Create a dedicated nginx config + ynh_add_nginx_config +fi + +# Change the domain for nginx +if [ $change_domain -eq 1 ] +then + # Delete file checksum for the old conf file location + ynh_delete_file_checksum "$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" +fi + +#================================================= +# SPECIFIC MODIFICATIONS +#================================================= +# ... +#================================================= + +#================================================= +# GENERIC FINALISATION +#================================================= +# RELOAD NGINX +#================================================= +ynh_print_info "Reloading nginx web server..." + +systemctl reload nginx + +#================================================= +# END OF SCRIPT +#================================================= + +ynh_print_info "Change of URL completed for $app" From c6fd2bf9af60624f229e47b2a00a45d59ac09424 Mon Sep 17 00:00:00 2001 From: yalh76 Date: Thu, 7 Mar 2019 03:58:49 +0100 Subject: [PATCH 55/96] fix node --- conf/systemd.service | 2 +- scripts/install | 1 + scripts/upgrade | 1 + 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/conf/systemd.service b/conf/systemd.service index 5abbcbf..9fbf394 100644 --- a/conf/systemd.service +++ b/conf/systemd.service @@ -9,7 +9,7 @@ User=__APP__ Group=__APP__ EnvironmentFile=__FINALPATH__/.env WorkingDirectory=__FINALPATH__ -ExecStart=/opt/node_n/bin/node __FINALPATH__/main.js +ExecStart=__NODEJS_PATH__/node __FINALPATH__/main.js Restart=on-failure #StartLimitInterval=86400 #StartLimitBurst=5 diff --git a/scripts/install b/scripts/install index 972a8a2..d08fd8f 100755 --- a/scripts/install +++ b/scripts/install @@ -189,6 +189,7 @@ ynh_print_info "Configuring a systemd service..." ### - And the section "SETUP SYSTEMD" in the upgrade script # Create a dedicated systemd config +ynh_replace_string "__NODEJS_PATH__" "$nodejs_path" "../conf/systemd.service" ynh_add_systemd_config #================================================= diff --git a/scripts/upgrade b/scripts/upgrade index 89329c1..067e9b3 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -72,6 +72,7 @@ if ynh_version_gt "0.77-2" "${previous_version}" ; then ynh_install_nodejs 8.15.1 ynh_use_nodejs # Create a dedicated systemd config + ynh_replace_string "__NODEJS_PATH__" "$nodejs_path" "../conf/systemd.service" ynh_add_systemd_config # Create a dedicated .env config ynh_backup_if_checksum_is_different "$final_path/.env" From 47225aa0b5add4617ec10803f471d294d8518e41 Mon Sep 17 00:00:00 2001 From: yalh76 Date: Thu, 7 Mar 2019 11:52:49 +0100 Subject: [PATCH 56/96] update mail url --- conf/.env | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/.env b/conf/.env index 3a664d8..dbf037d 100644 --- a/conf/.env +++ b/conf/.env @@ -14,7 +14,7 @@ MONGO_URL=mongodb://127.0.0.1:27017/__DB_NAME__ ROOT_URL=https://__DOMAIN_URI__ # Mail URL -MAIL_URL='smtp://localhost:25/' +MAIL_URL=smtp://localhost # This is local port where Wekan Node.js runs PORT=__PORT__ From 8ae6b881fbc7c6ad0f9268a0cb2469c19b1b7de5 Mon Sep 17 00:00:00 2001 From: yalh76 Date: Thu, 7 Mar 2019 11:55:12 +0100 Subject: [PATCH 57/96] Upgarde to 2.42 --- README.md | 2 +- conf/app.src | 4 ++-- manifest.json | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index f929164..b41543d 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ If you don't have YunoHost, please see [here](https://yunohost.org/#/install) to ## Overview Wekan is an open-source kanban board (task manager and organizer) -**Shipped version:** 2.40 +**Shipped version:** 2.42 ## Screenshots diff --git a/conf/app.src b/conf/app.src index e608dae..8cce057 100644 --- a/conf/app.src +++ b/conf/app.src @@ -1,7 +1,7 @@ # This is on YunoHost server just to avoid the file from disappearing # Original source is https://releases.wekan.team/ -SOURCE_URL=https://raw.githubusercontent.com/yalh76/wekan_ynh/2.40/conf/wekan-2.40.tar.gz -SOURCE_SUM=d49ca72918f979ad1488dfa0f23b099e241eef1eabcbc865fa42f32e6c490018 +SOURCE_URL=https://raw.githubusercontent.com/yalh76/wekan_ynh/2.42/conf/wekan-2.42.tar.gz +SOURCE_SUM=7fe258fee129dfbea86db20f63ad0729a4c2bd8870796e89880a525942034c37 SOURCE_SUM_PRG=sha256sum ARCH_FORMAT=tar.gz SOURCE_IN_SUBDIR=true diff --git a/manifest.json b/manifest.json index 0c2898b..fbf2b4a 100644 --- a/manifest.json +++ b/manifest.json @@ -6,7 +6,7 @@ "en": "Trello-like kanban", "fr": "Un kanban similaire à Trello" }, - "version": "2.40~ynh1", + "version": "2.42~ynh1", "url": "https://wekan.io", "license": "MIT", "maintainer": { From 743021283c90d23ccc190e1370165be50daa2193 Mon Sep 17 00:00:00 2001 From: yalh76 Date: Thu, 7 Mar 2019 12:12:10 +0100 Subject: [PATCH 58/96] Fix change URL --- check_process | 2 +- scripts/change_url | 8 +++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/check_process b/check_process index 6a85be0..d97cd59 100644 --- a/check_process +++ b/check_process @@ -15,7 +15,7 @@ multi_instance=1 incorrect_path=1 port_already_use=1 - change_url=0 + change_url=1 ;;; Levels Level 1=auto Level 2=auto diff --git a/scripts/change_url b/scripts/change_url index 93a67da..7f39e9c 100644 --- a/scripts/change_url +++ b/scripts/change_url @@ -92,8 +92,14 @@ fi #================================================= # SPECIFIC MODIFICATIONS #================================================= -# ... +# MODIFY URL IN .ENV #================================================= +ynh_print_info "Updating .env configuration..." + +ynh_replace_string "__NODEJS_PATH__" "$nodejs_path" "$final_path/.env" +ynh_replace_string "__DB_NAME__" "$db_name" "$final_path/.env" +ynh_replace_string "__DOMAIN_URI__" "$new_domain$new_path" "$final_path/.env" +ynh_replace_string "__PORT__" "$port" "$final_path/.env" #================================================= # GENERIC FINALISATION From b2c572811212914be31ba066fdba38818aee3ab1 Mon Sep 17 00:00:00 2001 From: yalh76 Date: Thu, 7 Mar 2019 13:47:05 +0100 Subject: [PATCH 59/96] reboot services --- scripts/change_url | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/scripts/change_url b/scripts/change_url index 7f39e9c..453358f 100644 --- a/scripts/change_url +++ b/scripts/change_url @@ -7,6 +7,7 @@ #================================================= source _common.sh +source ynh_systemd_action source /usr/share/yunohost/helpers #================================================= @@ -96,10 +97,13 @@ fi #================================================= ynh_print_info "Updating .env configuration..." +ynh_systemd_action --action=stop --service_name=$app --log_path="systemd" ynh_replace_string "__NODEJS_PATH__" "$nodejs_path" "$final_path/.env" ynh_replace_string "__DB_NAME__" "$db_name" "$final_path/.env" ynh_replace_string "__DOMAIN_URI__" "$new_domain$new_path" "$final_path/.env" ynh_replace_string "__PORT__" "$port" "$final_path/.env" +ynh_systemd_action --action=start --service_name=$app --log_path="systemd" --line_match="Finishing add-custom-html-before-body-end migration" +sleep 10 #================================================= # GENERIC FINALISATION From f3582c9169cfd8f5ca8dba9826429e2455619333 Mon Sep 17 00:00:00 2001 From: yalh76 Date: Thu, 7 Mar 2019 17:54:57 +0100 Subject: [PATCH 60/96] fix service start --- scripts/change_url | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/change_url b/scripts/change_url index 453358f..776135c 100644 --- a/scripts/change_url +++ b/scripts/change_url @@ -102,7 +102,7 @@ ynh_replace_string "__NODEJS_PATH__" "$nodejs_path" "$final_path/.env" ynh_replace_string "__DB_NAME__" "$db_name" "$final_path/.env" ynh_replace_string "__DOMAIN_URI__" "$new_domain$new_path" "$final_path/.env" ynh_replace_string "__PORT__" "$port" "$final_path/.env" -ynh_systemd_action --action=start --service_name=$app --log_path="systemd" --line_match="Finishing add-custom-html-before-body-end migration" +ynh_systemd_action --action=start --service_name=$app --log_path="systemd" --line_match="Kadira: completed instrumenting the app" sleep 10 #================================================= From 10b14700d871a7ad087ad08e5a904f57960e254b Mon Sep 17 00:00:00 2001 From: yalh76 Date: Thu, 7 Mar 2019 17:59:51 +0100 Subject: [PATCH 61/96] Fix service startup --- scripts/install | 2 +- scripts/restore | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/install b/scripts/install index d08fd8f..771a341 100755 --- a/scripts/install +++ b/scripts/install @@ -269,7 +269,7 @@ systemctl reload nginx # START SERVICE #================================================= -ynh_systemd_action --action=start --service_name=$app --log_path="systemd" --line_match="Finishing add-custom-html-before-body-end migration" +ynh_systemd_action --action=start --service_name=$app --log_path="systemd" --line_match="Kadira: completed instrumenting the app" sleep 10 #================================================= diff --git a/scripts/restore b/scripts/restore index eeba563..52f8756 100644 --- a/scripts/restore +++ b/scripts/restore @@ -128,7 +128,7 @@ systemctl reload nginx # START SERVICE #================================================= -ynh_systemd_action --action=start --service_name=$app --log_path="systemd" +ynh_systemd_action --action=start --service_name=$app --log_path="systemd" --line_match="Kadira: completed instrumenting the app" sleep 10 #================================================= From dccac47828db059ca6e206a3dd06abc8bc68a10a Mon Sep 17 00:00:00 2001 From: yalh76 Date: Thu, 7 Mar 2019 18:05:44 +0100 Subject: [PATCH 62/96] Fix upgrade --- scripts/change_url | 5 ++++- scripts/install | 1 + scripts/restore | 1 + 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/scripts/change_url b/scripts/change_url index 776135c..30d2896 100644 --- a/scripts/change_url +++ b/scripts/change_url @@ -20,6 +20,9 @@ old_path=$YNH_APP_OLD_PATH new_domain=$YNH_APP_NEW_DOMAIN new_path=$YNH_APP_NEW_PATH +db_name=$(ynh_app_setting_get $app db_name) +port=$(ynh_app_setting_get $app port) + app=$YNH_APP_INSTANCE_NAME #================================================= @@ -98,12 +101,12 @@ fi ynh_print_info "Updating .env configuration..." ynh_systemd_action --action=stop --service_name=$app --log_path="systemd" +ynh_use_nodejs ynh_replace_string "__NODEJS_PATH__" "$nodejs_path" "$final_path/.env" ynh_replace_string "__DB_NAME__" "$db_name" "$final_path/.env" ynh_replace_string "__DOMAIN_URI__" "$new_domain$new_path" "$final_path/.env" ynh_replace_string "__PORT__" "$port" "$final_path/.env" ynh_systemd_action --action=start --service_name=$app --log_path="systemd" --line_match="Kadira: completed instrumenting the app" -sleep 10 #================================================= # GENERIC FINALISATION diff --git a/scripts/install b/scripts/install index 771a341..32199e9 100755 --- a/scripts/install +++ b/scripts/install @@ -101,6 +101,7 @@ ynh_print_info "Installing dependencies..." ynh_print_info "Installing nodejs ..." ynh_install_nodejs 8.15.1 +ynh_use_nodejs ynh_print_info "Installing mongodb dependencies ..." ynh_install_app_dependencies "mongodb mongodb-server" diff --git a/scripts/restore b/scripts/restore index 52f8756..67f0303 100644 --- a/scripts/restore +++ b/scripts/restore @@ -86,6 +86,7 @@ ynh_print_info "Reinstalling dependencies..." # Define and install dependencies ynh_install_nodejs 8.15.1 +ynh_use_nodejs # Install mongodb ynh_install_app_dependencies "mongodb mongodb-server" From 60fc6d9993298514ee30d04106b226bb90155233 Mon Sep 17 00:00:00 2001 From: yalh76 Date: Thu, 7 Mar 2019 18:23:00 +0100 Subject: [PATCH 63/96] Fix path --- conf/nginx.conf | 2 +- scripts/change_url | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/conf/nginx.conf b/conf/nginx.conf index d8cfae8..dd7559e 100644 --- a/conf/nginx.conf +++ b/conf/nginx.conf @@ -22,7 +22,7 @@ location __PATH__ # on every applicaiton update the name of CSS and JS file is different, # so they can be cache infinitely (here: 30 days) # the root path MUST NOT be cached - if ($uri != '/wekan') + if ($uri != '/__PATH__') { expires 30d; } diff --git a/scripts/change_url b/scripts/change_url index 30d2896..f0e667b 100644 --- a/scripts/change_url +++ b/scripts/change_url @@ -80,7 +80,7 @@ then domain="$old_domain" path_url="$new_path" # Create a dedicated nginx config - ynh_add_nginx_config + ynh_add_nginx_config port fi # Change the domain for nginx From c23ea33bd3f8314d99187ac42daa5b79dbaebd35 Mon Sep 17 00:00:00 2001 From: yalh76 Date: Thu, 7 Mar 2019 18:30:47 +0100 Subject: [PATCH 64/96] fix nginx --- scripts/change_url | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/scripts/change_url b/scripts/change_url index f0e667b..f8b9da0 100644 --- a/scripts/change_url +++ b/scripts/change_url @@ -20,9 +20,6 @@ old_path=$YNH_APP_OLD_PATH new_domain=$YNH_APP_NEW_DOMAIN new_path=$YNH_APP_NEW_PATH -db_name=$(ynh_app_setting_get $app db_name) -port=$(ynh_app_setting_get $app port) - app=$YNH_APP_INSTANCE_NAME #================================================= @@ -36,6 +33,8 @@ final_path=$(ynh_app_setting_get $app 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 db_name) +port=$(ynh_app_setting_get $app port) #================================================= # CHECK THE SYNTAX OF THE PATHS @@ -80,7 +79,7 @@ then domain="$old_domain" path_url="$new_path" # Create a dedicated nginx config - ynh_add_nginx_config port + ynh_add_nginx_config fi # Change the domain for nginx From fd4bf2330a0a70f2f856e0959b8cc69700c9a140 Mon Sep 17 00:00:00 2001 From: yalh76 Date: Thu, 7 Mar 2019 18:35:30 +0100 Subject: [PATCH 65/96] fix nginx port --- scripts/change_url | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/change_url b/scripts/change_url index f8b9da0..4ac44f9 100644 --- a/scripts/change_url +++ b/scripts/change_url @@ -79,7 +79,7 @@ then domain="$old_domain" path_url="$new_path" # Create a dedicated nginx config - ynh_add_nginx_config + ynh_add_nginx_config port fi # Change the domain for nginx From c21f2dba105366d93eaa72673ec1e71dd4631a4e Mon Sep 17 00:00:00 2001 From: yalh76 Date: Thu, 7 Mar 2019 18:36:41 +0100 Subject: [PATCH 66/96] Fix change_url --- scripts/change_url | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/change_url b/scripts/change_url index 4ac44f9..f8b9da0 100644 --- a/scripts/change_url +++ b/scripts/change_url @@ -79,7 +79,7 @@ then domain="$old_domain" path_url="$new_path" # Create a dedicated nginx config - ynh_add_nginx_config port + ynh_add_nginx_config fi # Change the domain for nginx From 1944b69fd3b59e9c47cf7a26bb72d609c00d151b Mon Sep 17 00:00:00 2001 From: yalh76 Date: Thu, 7 Mar 2019 18:43:06 +0100 Subject: [PATCH 67/96] Fix Path --- conf/nginx.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/nginx.conf b/conf/nginx.conf index dd7559e..f89a679 100644 --- a/conf/nginx.conf +++ b/conf/nginx.conf @@ -22,7 +22,7 @@ location __PATH__ # on every applicaiton update the name of CSS and JS file is different, # so they can be cache infinitely (here: 30 days) # the root path MUST NOT be cached - if ($uri != '/__PATH__') + if ($uri != '__PATH__') { expires 30d; } From 24bccaab754c84c08540710fb5d0f995056bd722 Mon Sep 17 00:00:00 2001 From: yalh76 Date: Thu, 7 Mar 2019 18:52:06 +0100 Subject: [PATCH 68/96] Fix change url --- scripts/change_url | 6 +----- scripts/install | 1 - scripts/restore | 1 - scripts/upgrade | 3 +-- 4 files changed, 2 insertions(+), 9 deletions(-) diff --git a/scripts/change_url b/scripts/change_url index f8b9da0..80fa5af 100644 --- a/scripts/change_url +++ b/scripts/change_url @@ -100,11 +100,7 @@ fi ynh_print_info "Updating .env configuration..." ynh_systemd_action --action=stop --service_name=$app --log_path="systemd" -ynh_use_nodejs -ynh_replace_string "__NODEJS_PATH__" "$nodejs_path" "$final_path/.env" -ynh_replace_string "__DB_NAME__" "$db_name" "$final_path/.env" -ynh_replace_string "__DOMAIN_URI__" "$new_domain$new_path" "$final_path/.env" -ynh_replace_string "__PORT__" "$port" "$final_path/.env" +ynh_replace_string "$old_domain$old_path" "$new_domain$new_path" "$final_path/.env" ynh_systemd_action --action=start --service_name=$app --log_path="systemd" --line_match="Kadira: completed instrumenting the app" #================================================= diff --git a/scripts/install b/scripts/install index 32199e9..28e424c 100755 --- a/scripts/install +++ b/scripts/install @@ -271,7 +271,6 @@ systemctl reload nginx #================================================= ynh_systemd_action --action=start --service_name=$app --log_path="systemd" --line_match="Kadira: completed instrumenting the app" -sleep 10 #================================================= # END OF SCRIPT diff --git a/scripts/restore b/scripts/restore index 67f0303..3a728d6 100644 --- a/scripts/restore +++ b/scripts/restore @@ -130,7 +130,6 @@ systemctl reload nginx #================================================= ynh_systemd_action --action=start --service_name=$app --log_path="systemd" --line_match="Kadira: completed instrumenting the app" -sleep 10 #================================================= # END OF SCRIPT diff --git a/scripts/upgrade b/scripts/upgrade index 067e9b3..a72141a 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -162,8 +162,7 @@ systemctl reload nginx # START SERVICE #================================================= -ynh_systemd_action --action=restart --service_name=$app --log_path="systemd" -sleep 10 +ynh_systemd_action --action=restart --service_name=$app --log_path="systemd" --line_match="Kadira: completed instrumenting the app" #================================================= # END OF SCRIPT From 679db476ad9677a4e87acabbfdeb07ec06092307 Mon Sep 17 00:00:00 2001 From: yalh76 Date: Thu, 7 Mar 2019 20:19:25 +0100 Subject: [PATCH 70/96] Fix panel --- conf/nginx.conf | 1 + 1 file changed, 1 insertion(+) diff --git a/conf/nginx.conf b/conf/nginx.conf index f89a679..86ded79 100644 --- a/conf/nginx.conf +++ b/conf/nginx.conf @@ -6,6 +6,7 @@ location __PATH__ proxy_pass http://127.0.0.1:__PORT__; proxy_http_version 1.1; + proxy_set_header Accept-Encoding ""; # allow websockets proxy_set_header Upgrade $http_upgrade; From daaf7b9e5d90334b06248751cd98118fc6420e2d Mon Sep 17 00:00:00 2001 From: yalh76 Date: Thu, 7 Mar 2019 20:56:56 +0100 Subject: [PATCH 71/96] Fix release source --- conf/app.src | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/app.src b/conf/app.src index 8cce057..42e1328 100644 --- a/conf/app.src +++ b/conf/app.src @@ -1,6 +1,6 @@ # This is on YunoHost server just to avoid the file from disappearing # Original source is https://releases.wekan.team/ -SOURCE_URL=https://raw.githubusercontent.com/yalh76/wekan_ynh/2.42/conf/wekan-2.42.tar.gz +SOURCE_URL=https://github.com/yalh76/wekan_ynh/releases/download/v2.42/wekan-2.42.tar.gz SOURCE_SUM=7fe258fee129dfbea86db20f63ad0729a4c2bd8870796e89880a525942034c37 SOURCE_SUM_PRG=sha256sum ARCH_FORMAT=tar.gz From 3379872d17d384fb3ad9548f745ad0caa8795220 Mon Sep 17 00:00:00 2001 From: yalh76 Date: Thu, 7 Mar 2019 21:26:59 +0100 Subject: [PATCH 72/96] Add additional time for service to start --- scripts/change_url | 1 + scripts/install | 1 + scripts/restore | 1 + 3 files changed, 3 insertions(+) diff --git a/scripts/change_url b/scripts/change_url index 80fa5af..b7a7530 100644 --- a/scripts/change_url +++ b/scripts/change_url @@ -102,6 +102,7 @@ ynh_print_info "Updating .env configuration..." ynh_systemd_action --action=stop --service_name=$app --log_path="systemd" ynh_replace_string "$old_domain$old_path" "$new_domain$new_path" "$final_path/.env" ynh_systemd_action --action=start --service_name=$app --log_path="systemd" --line_match="Kadira: completed instrumenting the app" +sleep 10 #================================================= # GENERIC FINALISATION diff --git a/scripts/install b/scripts/install index 28e424c..32199e9 100755 --- a/scripts/install +++ b/scripts/install @@ -271,6 +271,7 @@ systemctl reload nginx #================================================= ynh_systemd_action --action=start --service_name=$app --log_path="systemd" --line_match="Kadira: completed instrumenting the app" +sleep 10 #================================================= # END OF SCRIPT diff --git a/scripts/restore b/scripts/restore index 3a728d6..67f0303 100644 --- a/scripts/restore +++ b/scripts/restore @@ -130,6 +130,7 @@ systemctl reload nginx #================================================= ynh_systemd_action --action=start --service_name=$app --log_path="systemd" --line_match="Kadira: completed instrumenting the app" +sleep 10 #================================================= # END OF SCRIPT From b18df666e756ddc57a52780c4cdcba31a3e31118 Mon Sep 17 00:00:00 2001 From: Alexandre Aubin Date: Fri, 8 Mar 2019 00:46:02 +0100 Subject: [PATCH 73/96] Misc tweaks --- scripts/install | 87 ++++++++++--------------------------------------- scripts/remove | 10 ------ scripts/restore | 2 ++ scripts/upgrade | 20 ++++++------ 4 files changed, 30 insertions(+), 89 deletions(-) diff --git a/scripts/install b/scripts/install index 90daf64..4501493 100755 --- a/scripts/install +++ b/scripts/install @@ -25,22 +25,11 @@ ynh_abort_if_errors # RETRIEVE ARGUMENTS FROM THE MANIFEST #================================================= +app=$YNH_APP_INSTANCE_NAME 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 - #================================================= # CHECK IF THE APP CAN BE INSTALLED WITH THESE ARGS #================================================= @@ -54,9 +43,6 @@ ynh_print_info "Validating installation parameters..." final_path=/var/www/$app test ! -e "$final_path" || ynh_die "This path already contains a folder" -# Normalize the url path syntax -path_url=$(ynh_normalize_url_path $path_url) - # Register (book) web path ynh_webpath_register $app $domain $path_url @@ -68,37 +54,21 @@ 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 - -#================================================= -# STANDARD MODIFICATIONS -#================================================= -# FIND AND OPEN A PORT -#================================================= -ynh_print_info "Configuring firewall..." - -### Use these lines if you have to open a port for the application -### `ynh_find_port` will find the first available port starting from the given port. -### If you're not using these lines: -### - Remove the section "CLOSE A PORT" in the remove script +ynh_app_setting_set $app final_path $final_path # Find a free port port=$(ynh_find_port 8095) -# Open this port -#ynh_exec_warn_less yunohost firewall allow --no-upnp TCP $port ynh_app_setting_set $app port $port +# Registering db name +db_name=$(ynh_sanitize_dbid $app) +ynh_app_setting_set $app db_name $db_name + #================================================= # INSTALL DEPENDENCIES #================================================= ynh_print_info "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 -### - As well as the section "REINSTALL DEPENDENCIES" in the restore script -### - And the section "UPGRADE DEPENDENCIES" in the upgrade script - ynh_print_info "Installing nodejs ..." ynh_install_nodejs 8.9.3 @@ -114,37 +84,27 @@ ynh_print_info "Starting mongodb ..." systemctl enable mongodb systemctl restart mongodb -#================================================= -# CREATE A MONGODB DATABASE -#================================================= -ynh_print_info "Creating a MongoDB database..." - -### Use these lines if you need a database for the application. -### `ynh_mysql_setup_db` will create a database, an associated user and a ramdom password. -### The password will be stored as 'mysqlpwd' into the app settings, -### and will be available as $db_pwd -### If you're not using these lines: -### - Remove the section "BACKUP THE MYSQL DATABASE" in the backup script -### - Remove also the section "REMOVE THE MYSQL DATABASE" in the remove script -### - As well as the section "RESTORE THE MYSQL DATABASE" in the restore script - -db_name=$(ynh_sanitize_dbid $app) -ynh_app_setting_set $app db_name $db_name -#ynh_mysql_setup_db $db_name $db_name - #================================================= # DOWNLOAD, CHECK AND UNPACK SOURCE #================================================= -ynh_print_info "Setting up source files..." +ynh_print_info "Setting up wekan 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 # Download, check integrity, uncompress and patch the source from app.src ynh_setup_source "$final_path" +ynh_print_info "Installing wekan npm dependencies ..." + +# Install wekan dependencies +chown -R $app $final_path +pushd $final_path/programs/server + ynh_use_nodejs + npm install +popd + #================================================= # NGINX CONFIGURATION #================================================= @@ -165,18 +125,6 @@ ynh_system_user_create $app "$final_path" #================================================= # SPECIFIC SETUP -#================================================= -# INSTALL WEKAN NPM DEPENDENCIES -#================================================= -ynh_print_info "Installing wekan npm dependencies ..." - -# Install wekan dependencies -chown -R $app $final_path -pushd $final_path/programs/server - ynh_use_nodejs - npm install -popd - #================================================= # SETUP SYSTEMD #================================================= @@ -206,7 +154,7 @@ ynh_add_systemd_config #================================================= # SECURE FILES AND DIRECTORIES #================================================= -ynh_print_info "Fixing permissions ..." +ynh_print_info "Configuring file permissions ..." ### For security reason, any app should set the permissions to root: before anything else. ### Then, if write authorization is needed, any access should be given only to directories @@ -253,6 +201,7 @@ systemctl reload nginx #================================================= # START SERVICE #================================================= +ynh_print_info "Now starting Wekan service..." ynh_systemd_action --action=start --service_name=$app --log_path="systemd" --line_match="Finishing add-custom-html-before-body-end migration" sleep 10 diff --git a/scripts/remove b/scripts/remove index f08fad7..9e7b861 100755 --- a/scripts/remove +++ b/scripts/remove @@ -82,16 +82,6 @@ ynh_print_info "Removing nginx web server configuration" # Remove the dedicated nginx config ynh_remove_nginx_config -#================================================= -# CLOSE A PORT -#================================================= - -if yunohost firewall list | grep -q "\- $port$" -then - ynh_print_info "Closing port $port" - ynh_exec_warn_less yunohost firewall disallow TCP $port -fi - #================================================= # GENERIC FINALIZATION #================================================= diff --git a/scripts/restore b/scripts/restore index 11c87b7..837b197 100644 --- a/scripts/restore +++ b/scripts/restore @@ -106,6 +106,7 @@ mongorestore --db $db_name ./dump/$db_name ynh_print_info "Restoring the systemd configuration..." ynh_restore_file "/etc/systemd/system/$app.service" +systemctl daemon-reload systemctl enable $app.service #================================================= @@ -127,6 +128,7 @@ systemctl reload nginx #================================================= # START SERVICE #================================================= +ynh_print_info "Now starting Wekan service..." ynh_systemd_action --action=start --service_name=$app --log_path="systemd" sleep 10 diff --git a/scripts/upgrade b/scripts/upgrade index 4f48cfa..be075db 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -25,6 +25,7 @@ final_path=$(ynh_app_setting_get $app final_path) db_name=$(ynh_app_setting_get $app db_name) port=$(ynh_app_setting_get $app port) +# Previous versions of the app did not have the db_name setting if [ -z "$db_name" ] then db_name=$app @@ -69,12 +70,11 @@ fi if ynh_version_gt "0.77-2" "${previous_version}" ; then ynh_install_nodejs 8.9.3 - ynh_use_nodejs # Create a dedicated systemd config - ynh_replace_string "__ENV_PATH__" "$nodejs_path" "../conf/systemd.service" - ynh_replace_string "__DB_NAME__" "$db_name" "../conf/systemd.service" - ynh_replace_string "__DOMAIN_URI__" "$domain$path_url" "../conf/systemd.service" - ynh_replace_string "__PORT__" "$port" "../conf/systemd.service" + ynh_replace_string "__ENV_PATH__" "$nodejs_path" "../conf/systemd.service" + ynh_replace_string "__DB_NAME__" "$db_name" "../conf/systemd.service" + ynh_replace_string "__DOMAIN_URI__" "$domain$path_url" "../conf/systemd.service" + ynh_replace_string "__PORT__" "$port" "../conf/systemd.service" ynh_add_systemd_config fi @@ -87,13 +87,12 @@ if ynh_version_gt "1.07~ynh2" "${previous_version}" ; then ynh_install_app_dependencies "mongodb mongodb-server" yunohost service remove mongod yunohost service add mongodb --log "/var/log/mongodb/mongodb.log" - ynh_use_nodejs # Gotta regen the systemd config because mongodb service name changed - ynh_replace_string "__ENV_PATH__" "$nodejs_path" "../conf/systemd.service" - ynh_replace_string "__DB_NAME__" "$db_name" "../conf/systemd.service" - ynh_replace_string "__DOMAIN_URI__" "$domain$path_url" "../conf/systemd.service" - ynh_replace_string "__PORT__" "$port" "../conf/systemd.service" + ynh_replace_string "__ENV_PATH__" "$nodejs_path" "../conf/systemd.service" + ynh_replace_string "__DB_NAME__" "$db_name" "../conf/systemd.service" + ynh_replace_string "__DOMAIN_URI__" "$domain$path_url" "../conf/systemd.service" + ynh_replace_string "__PORT__" "$port" "../conf/systemd.service" ynh_add_systemd_config fi @@ -166,6 +165,7 @@ systemctl reload nginx #================================================= # START SERVICE #================================================= +ynh_print_info "Now restarting Wekan service..." ynh_systemd_action --action=restart --service_name=$app --log_path="systemd" sleep 10 From b0b47eacd03854315842cd44876a6ef359a1a14f Mon Sep 17 00:00:00 2001 From: yalh76 Date: Fri, 8 Mar 2019 01:41:31 +0100 Subject: [PATCH 74/96] reorder --- scripts/upgrade | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/upgrade b/scripts/upgrade index 4f48cfa..b7ac660 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -87,12 +87,12 @@ if ynh_version_gt "1.07~ynh2" "${previous_version}" ; then ynh_install_app_dependencies "mongodb mongodb-server" yunohost service remove mongod yunohost service add mongodb --log "/var/log/mongodb/mongodb.log" - ynh_use_nodejs # Gotta regen the systemd config because mongodb service name changed + ynh_use_nodejs ynh_replace_string "__ENV_PATH__" "$nodejs_path" "../conf/systemd.service" ynh_replace_string "__DB_NAME__" "$db_name" "../conf/systemd.service" - ynh_replace_string "__DOMAIN_URI__" "$domain$path_url" "../conf/systemd.service" + ynh_replace_string "__DOMAIN_URI__" "$domain$path_url" "../conf/systemd.service" ynh_replace_string "__PORT__" "$port" "../conf/systemd.service" ynh_add_systemd_config fi From aaaec38da5ed61323d3021176cf65f7cb4e838d6 Mon Sep 17 00:00:00 2001 From: yalh76 Date: Fri, 8 Mar 2019 12:03:00 +0100 Subject: [PATCH 75/96] fix LDAP_DEFAULT_DOMAIN --- conf/.env | 1 - 1 file changed, 1 deletion(-) diff --git a/conf/.env b/conf/.env index dbf037d..f5164ee 100644 --- a/conf/.env +++ b/conf/.env @@ -355,7 +355,6 @@ LDAP_SYNC_GROUP_ROLES=admins # LDAP_DEFAULT_DOMAIN : The default domain of the ldap it is used to create email if the field is not map correctly with the LDAP_SYNC_USER_DATA_FIELDMAP # example : #LDAP_DEFAULT_DOMAIN= -LDAP_DEFAULT_DOMAIN=yh03.yh.yalh.net # Enable/Disable syncing of admin status based on ldap groups: #LDAP_SYNC_ADMIN_STATUS=true From 5bee6a9e84368460884f416138602c6e2b690b7b Mon Sep 17 00:00:00 2001 From: yalh76 Date: Fri, 8 Mar 2019 12:35:31 +0100 Subject: [PATCH 76/96] fix upgrade step for 2.42~ynh1 --- scripts/upgrade | 36 ++++++++++++++++++++++++------------ 1 file changed, 24 insertions(+), 12 deletions(-) diff --git a/scripts/upgrade b/scripts/upgrade index 1b37f5b..3c9fbe0 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -68,20 +68,15 @@ if ynh_version_gt "0.45-3" "${previous_version}" ; then fi if ynh_version_gt "0.77-2" "${previous_version}" ; then - ynh_remove_nodejs - ynh_install_nodejs 8.15.1 - ynh_use_nodejs + ynh_install_nodejs 8.9.3 # Create a dedicated systemd config - ynh_replace_string "__NODEJS_PATH__" "$nodejs_path" "../conf/systemd.service" + ynh_replace_string "__NODEJS__" "$nodejs_use_version" "../conf/systemd.service" + ynh_replace_string "__ENV_PATH__" "$PATH" "../conf/systemd.service" + ynh_replace_string "__DB_NAME__" "$app" "../conf/systemd.service" + ynh_replace_string "__URI__" "$path_url/" "../conf/systemd.service" + ynh_replace_string "__PORT__" "$port" "../conf/systemd.service" + ynh_replace_string "__DOMAIN__" "$domain" "../conf/systemd.service" ynh_add_systemd_config - # Create a dedicated .env config - ynh_backup_if_checksum_is_different "$final_path/.env" - cp "../conf/.env" "$final_path/.env" - ynh_replace_string "__NODEJS_PATH__" "$nodejs_path" "$final_path/.env" - ynh_replace_string "__DB_NAME__" "$db_name" "$final_path/.env" - ynh_replace_string "__DOMAIN_URI__" "$domain$path_url" "$final_path/.env" - ynh_replace_string "__PORT__" "$port" "$final_path/.env" - ynh_store_file_checksum "$final_path/.env" fi if ynh_version_gt "1.07~ynh2" "${previous_version}" ; then @@ -103,6 +98,23 @@ if ynh_version_gt "1.07~ynh2" "${previous_version}" ; then ynh_add_systemd_config fi +if ynh_version_gt "2.42~ynh1" "${previous_version}" ; then + ynh_remove_nodejs + ynh_install_nodejs 8.15.1 + ynh_use_nodejs + # Create a dedicated systemd config + ynh_replace_string "__NODEJS_PATH__" "$nodejs_path" "../conf/systemd.service" + ynh_add_systemd_config + # Create a dedicated .env config + ynh_backup_if_checksum_is_different "$final_path/.env" + cp "../conf/.env" "$final_path/.env" + ynh_replace_string "__NODEJS_PATH__" "$nodejs_path" "$final_path/.env" + ynh_replace_string "__DB_NAME__" "$db_name" "$final_path/.env" + ynh_replace_string "__DOMAIN_URI__" "$domain$path_url" "$final_path/.env" + ynh_replace_string "__PORT__" "$port" "$final_path/.env" + ynh_store_file_checksum "$final_path/.env" +fi + #================================================= # CHECK THE PATH #================================================= From 0c6b777ca3ea7c554627bc6ce66a8a7640b1f870 Mon Sep 17 00:00:00 2001 From: yalh76 Date: Wed, 13 Mar 2019 06:55:55 +0100 Subject: [PATCH 77/96] remove limitations from readme --- README.md | 4 ---- 1 file changed, 4 deletions(-) diff --git a/README.md b/README.md index ff06768..5a4a386 100644 --- a/README.md +++ b/README.md @@ -51,10 +51,6 @@ First registered user will be admin, and next ones normal users. If you want oth * ARMv8-A - Not supported * Jessie x86-64b - [![Build Status](https://ci-stretch.nohost.me/ci/logs/wekan%20%28Community%29.svg)](https://ci-stretch.nohost.me/ci/apps/wekan/) -## Limitations - -* Any known limitations. - ## Links * Report a bug: https://github.com/YunoHost-Apps/wekan_ynh/issues From dd7cb7857d43737d03cdc4b56312cd85e5333cad Mon Sep 17 00:00:00 2001 From: yalh76 Date: Wed, 13 Mar 2019 23:32:18 +0100 Subject: [PATCH 78/96] Update install Remove dependencies installation as they are included in the package --- scripts/install | 9 --------- 1 file changed, 9 deletions(-) diff --git a/scripts/install b/scripts/install index 4501493..68ac907 100755 --- a/scripts/install +++ b/scripts/install @@ -96,15 +96,6 @@ ynh_print_info "Setting up wekan source files..." # Download, check integrity, uncompress and patch the source from app.src ynh_setup_source "$final_path" -ynh_print_info "Installing wekan npm dependencies ..." - -# Install wekan dependencies -chown -R $app $final_path -pushd $final_path/programs/server - ynh_use_nodejs - npm install -popd - #================================================= # NGINX CONFIGURATION #================================================= From b432a036515f0b8df0516df8947aedeafcf63873 Mon Sep 17 00:00:00 2001 From: yalh76 Date: Thu, 14 Mar 2019 00:57:24 +0100 Subject: [PATCH 79/96] Add needed ynh_use_nodejs to be abble to use $nodejs_path variable --- scripts/upgrade | 2 ++ 1 file changed, 2 insertions(+) diff --git a/scripts/upgrade b/scripts/upgrade index be075db..a68fa6d 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -71,6 +71,7 @@ fi if ynh_version_gt "0.77-2" "${previous_version}" ; then ynh_install_nodejs 8.9.3 # Create a dedicated systemd config + ynh_use_nodejs ynh_replace_string "__ENV_PATH__" "$nodejs_path" "../conf/systemd.service" ynh_replace_string "__DB_NAME__" "$db_name" "../conf/systemd.service" ynh_replace_string "__DOMAIN_URI__" "$domain$path_url" "../conf/systemd.service" @@ -89,6 +90,7 @@ if ynh_version_gt "1.07~ynh2" "${previous_version}" ; then yunohost service add mongodb --log "/var/log/mongodb/mongodb.log" # Gotta regen the systemd config because mongodb service name changed + ynh_use_nodejs ynh_replace_string "__ENV_PATH__" "$nodejs_path" "../conf/systemd.service" ynh_replace_string "__DB_NAME__" "$db_name" "../conf/systemd.service" ynh_replace_string "__DOMAIN_URI__" "$domain$path_url" "../conf/systemd.service" From 8493cc60e1f44a8fabb67ab03a2f076d97757ccf Mon Sep 17 00:00:00 2001 From: yalh76 Date: Thu, 14 Mar 2019 01:04:59 +0100 Subject: [PATCH 80/96] Update to last example_ynh --- scripts/_common.sh | 7 +++++++ scripts/install | 8 +++----- scripts/restore | 3 +-- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/scripts/_common.sh b/scripts/_common.sh index b905339..000bced 100644 --- a/scripts/_common.sh +++ b/scripts/_common.sh @@ -1,5 +1,12 @@ #!/bin/bash +#================================================= +# COMMON VARIABLES +#================================================= + +# dependencies used by the app +pkg_dependencies="mongodb mongodb-server" + #================================================= # PERSONAL HELPERS #================================================= diff --git a/scripts/install b/scripts/install index 32199e9..4ab5fe7 100755 --- a/scripts/install +++ b/scripts/install @@ -99,19 +99,17 @@ ynh_print_info "Installing dependencies..." ### - As well as the section "REINSTALL DEPENDENCIES" in the restore script ### - And the section "UPGRADE DEPENDENCIES" in the upgrade script -ynh_print_info "Installing nodejs ..." ynh_install_nodejs 8.15.1 ynh_use_nodejs -ynh_print_info "Installing mongodb dependencies ..." -ynh_install_app_dependencies "mongodb mongodb-server" +ynh_install_app_dependencies $pkg_dependencies #================================================= -# Start MONGODB +# START MONGODB #================================================= +ynh_print_info "Starting mongodb ..." # Start mogodb -ynh_print_info "Starting mongodb ..." systemctl enable mongodb systemctl restart mongodb diff --git a/scripts/restore b/scripts/restore index 67f0303..6998671 100644 --- a/scripts/restore +++ b/scripts/restore @@ -88,8 +88,7 @@ ynh_print_info "Reinstalling dependencies..." ynh_install_nodejs 8.15.1 ynh_use_nodejs -# Install mongodb -ynh_install_app_dependencies "mongodb mongodb-server" +ynh_install_app_dependencies $pkg_dependencies #================================================= # RESTORE THE MONGODB DATABASE From d466cf7bfd6249ddbb5cd3ebd28ccb6d82ba4e68 Mon Sep 17 00:00:00 2001 From: Alexandre Aubin Date: Fri, 15 Mar 2019 16:15:57 +0100 Subject: [PATCH 81/96] Typo in helper --- scripts/ynh_package_version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/ynh_package_version b/scripts/ynh_package_version index 816f97a..d6cdc4d 100644 --- a/scripts/ynh_package_version +++ b/scripts/ynh_package_version @@ -15,7 +15,7 @@ abort_if_up_to_date () { version=$(read_json "/etc/yunohost/apps/$YNH_APP_INSTANCE_NAME/manifest.json" 'version' 2> /dev/null || echo '20160501-7') last_version=$(read_manifest 'version') if [ "${version}" = "${last_version}" ]; then - info "Up-to-date, nothing to do" + ynh_print_info "Up-to-date, nothing to do" ynh_die "" 0 fi } From b32099ffa3d5dcaf0d8a71e6c6d4b8c7f52e40e9 Mon Sep 17 00:00:00 2001 From: yalh76 Date: Fri, 15 Mar 2019 19:26:47 +0100 Subject: [PATCH 82/96] Apply last example_ynh --- scripts/backup | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/backup b/scripts/backup index 6f2744f..9db7830 100644 --- a/scripts/backup +++ b/scripts/backup @@ -6,6 +6,7 @@ # IMPORT GENERIC HELPERS #================================================= +#Keep this path for calling _common.sh inside the execution's context of backup and restore scripts source ../settings/scripts/_common.sh source /usr/share/yunohost/helpers From 7b86821972b0a5c827adcb6a0af81cdb77616225 Mon Sep 17 00:00:00 2001 From: yalh76 Date: Fri, 15 Mar 2019 19:27:33 +0100 Subject: [PATCH 83/96] Remove already started mongodb --- scripts/install | 7 ------- 1 file changed, 7 deletions(-) diff --git a/scripts/install b/scripts/install index 4ab5fe7..001e544 100755 --- a/scripts/install +++ b/scripts/install @@ -164,13 +164,6 @@ ynh_system_user_create $app "$final_path" #================================================= # SPECIFIC SETUP -#================================================= - -# Start mogodb -ynh_print_info "Starting mongodb ..." -systemctl enable mongodb -systemctl restart mongodb - #================================================= # SETUP SYSTEMD #================================================= From 25161d4bb9f04bd51765d587a650e000a72da928 Mon Sep 17 00:00:00 2001 From: yalh76 Date: Fri, 15 Mar 2019 19:29:38 +0100 Subject: [PATCH 84/96] Spelling --- scripts/install | 2 +- scripts/restore | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/install b/scripts/install index 001e544..78ea13f 100755 --- a/scripts/install +++ b/scripts/install @@ -109,7 +109,7 @@ ynh_install_app_dependencies $pkg_dependencies #================================================= ynh_print_info "Starting mongodb ..." -# Start mogodb +# Start mongodb systemctl enable mongodb systemctl restart mongodb diff --git a/scripts/restore b/scripts/restore index 6998671..cccd9a3 100644 --- a/scripts/restore +++ b/scripts/restore @@ -95,7 +95,7 @@ ynh_install_app_dependencies $pkg_dependencies #================================================= ynh_print_info "Restoring the MongoDB database..." -# Start mogodb +# Start mongodb systemctl enable mongodb systemctl start mongodb mongorestore --db $db_name ./dump/$db_name From 891e8e86310432f84d18289b8b1ca72a614f11db Mon Sep 17 00:00:00 2001 From: yalh76 Date: Sat, 16 Mar 2019 02:46:20 +0100 Subject: [PATCH 85/96] upgrade to 2.48 --- README.md | 2 +- conf/app.src | 2 +- manifest.json | 2 +- scripts/upgrade | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 1b655da..b76ef2a 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ If you don't have YunoHost, please see [here](https://yunohost.org/#/install) to ## Overview Wekan is an open-source kanban board (task manager and organizer) -**Shipped version:** 2.42 +**Shipped version:** 2.48 ## Screenshots diff --git a/conf/app.src b/conf/app.src index 42e1328..aecdd90 100644 --- a/conf/app.src +++ b/conf/app.src @@ -1,6 +1,6 @@ # This is on YunoHost server just to avoid the file from disappearing # Original source is https://releases.wekan.team/ -SOURCE_URL=https://github.com/yalh76/wekan_ynh/releases/download/v2.42/wekan-2.42.tar.gz +SOURCE_URL=https://github.com/yalh76/wekan_ynh/releases/download/v2.48/wekan-2.48.tar.gz SOURCE_SUM=7fe258fee129dfbea86db20f63ad0729a4c2bd8870796e89880a525942034c37 SOURCE_SUM_PRG=sha256sum ARCH_FORMAT=tar.gz diff --git a/manifest.json b/manifest.json index fbf2b4a..24cee81 100644 --- a/manifest.json +++ b/manifest.json @@ -6,7 +6,7 @@ "en": "Trello-like kanban", "fr": "Un kanban similaire à Trello" }, - "version": "2.42~ynh1", + "version": "2.48~ynh1", "url": "https://wekan.io", "license": "MIT", "maintainer": { diff --git a/scripts/upgrade b/scripts/upgrade index c312b7b..c9b23c7 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -99,7 +99,7 @@ if ynh_version_gt "1.07~ynh2" "${previous_version}" ; then ynh_add_systemd_config fi -if ynh_version_gt "2.42~ynh1" "${previous_version}" ; then +if ynh_version_gt "2.48~ynh1" "${previous_version}" ; then ynh_remove_nodejs ynh_install_nodejs 8.15.1 ynh_use_nodejs From 0474e861ae34e0e0ee8acd02fb8719ce8ad81edd Mon Sep 17 00:00:00 2001 From: yalh76 Date: Sat, 16 Mar 2019 02:49:09 +0100 Subject: [PATCH 86/96] Fix source sum --- conf/app.src | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/app.src b/conf/app.src index aecdd90..4be1016 100644 --- a/conf/app.src +++ b/conf/app.src @@ -1,7 +1,7 @@ # This is on YunoHost server just to avoid the file from disappearing # Original source is https://releases.wekan.team/ SOURCE_URL=https://github.com/yalh76/wekan_ynh/releases/download/v2.48/wekan-2.48.tar.gz -SOURCE_SUM=7fe258fee129dfbea86db20f63ad0729a4c2bd8870796e89880a525942034c37 +SOURCE_SUM=1d6ae104487cb29029e6187531432a9c3dd2d9c4e1aef4f848ae48286010b0e8 SOURCE_SUM_PRG=sha256sum ARCH_FORMAT=tar.gz SOURCE_IN_SUBDIR=true From 6c3a8ca9b48dec09378d9b71aef9cf5419e6704d Mon Sep 17 00:00:00 2001 From: yalh76 Date: Sat, 23 Mar 2019 04:26:50 +0100 Subject: [PATCH 88/96] Update install --- scripts/install | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/scripts/install b/scripts/install index a8afc96..08952c6 100755 --- a/scripts/install +++ b/scripts/install @@ -38,11 +38,12 @@ ynh_print_info "Validating installation parameters..." # Check machine architecture (in particular, we don't support ARM and 32bit machines) [[ $(uname -m) == "x86_64" ]] || ynh_die "Sorry, but this app can only be installed on a x86, 64 bits machine :(" -### 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" +# Normalize the url path syntax +path_url=$(ynh_normalize_url_path $path_url) + # Register (book) web path ynh_webpath_register $app $domain $path_url From 437f1836b9628ef3bc9bf3ad7a07906ade821a44 Mon Sep 17 00:00:00 2001 From: yalh76 Date: Sat, 23 Mar 2019 04:27:40 +0100 Subject: [PATCH 89/96] Update manifest.json --- manifest.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manifest.json b/manifest.json index 24cee81..df397cd 100644 --- a/manifest.json +++ b/manifest.json @@ -15,7 +15,7 @@ "url": "https://github.com/alexAubin/" }, "requirements": { - "yunohost": ">= 3.0.0" + "yunohost": ">= 3.4" }, "multi_instance": true, "services": [ From 31661c183dc0c74fdeac7ed6cea618942a49e219 Mon Sep 17 00:00:00 2001 From: yalh76 Date: Sat, 23 Mar 2019 04:36:31 +0100 Subject: [PATCH 90/96] Cleaning --- check_process | 1 + scripts/backup | 4 --- scripts/change_url | 3 +-- scripts/install | 65 ++++++++++------------------------------------ scripts/remove | 2 +- scripts/restore | 4 --- 6 files changed, 17 insertions(+), 62 deletions(-) diff --git a/check_process b/check_process index d97cd59..b249208 100644 --- a/check_process +++ b/check_process @@ -11,6 +11,7 @@ setup_private=1 setup_public=1 upgrade=1 + upgrade=1 from_commit=4fe78843712dc1adc189830d2dde5f78bb17d747 backup_restore=1 multi_instance=1 incorrect_path=1 diff --git a/scripts/backup b/scripts/backup index 9db7830..e79f044 100644 --- a/scripts/backup +++ b/scripts/backup @@ -14,10 +14,6 @@ source /usr/share/yunohost/helpers # MANAGE SCRIPT FAILURE #================================================= -ynh_clean_setup () { - ### Remove this function if there's nothing to clean before calling the remove script. - true -} # Exit if an error occurs during the execution of the script ynh_abort_if_errors diff --git a/scripts/change_url b/scripts/change_url index b7a7530..4278d43 100644 --- a/scripts/change_url +++ b/scripts/change_url @@ -31,8 +31,7 @@ ynh_print_info "Loading installation settings..." final_path=$(ynh_app_setting_get $app 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 db_name) port=$(ynh_app_setting_get $app port) diff --git a/scripts/install b/scripts/install index 08952c6..e56e461 100755 --- a/scripts/install +++ b/scripts/install @@ -14,10 +14,6 @@ source /usr/share/yunohost/helpers # MANAGE SCRIPT FAILURE #================================================= -ynh_clean_setup () { - ### Remove this function if there's nothing to clean before calling the remove script. - true -} # Exit if an error occurs during the execution of the script ynh_abort_if_errors @@ -25,11 +21,12 @@ ynh_abort_if_errors # RETRIEVE ARGUMENTS FROM THE MANIFEST #================================================= -app=$YNH_APP_INSTANCE_NAME domain=$YNH_APP_ARG_DOMAIN path_url=$YNH_APP_ARG_PATH is_public=$YNH_APP_ARG_IS_PUBLIC +app=$YNH_APP_INSTANCE_NAME + #================================================= # CHECK IF THE APP CAN BE INSTALLED WITH THESE ARGS #================================================= @@ -55,28 +52,23 @@ 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 final_path $final_path + +#================================================= +# STANDARD MODIFICATIONS +#================================================= +# FIND AND OPEN A PORT +#================================================= +ynh_print_info "Configuring firewall..." # Find a free port port=$(ynh_find_port 8095) ynh_app_setting_set $app port $port -# Registering db name -db_name=$(ynh_sanitize_dbid $app) -ynh_app_setting_set $app db_name $db_name - #================================================= # INSTALL DEPENDENCIES #================================================= ynh_print_info "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 -### - As well as the section "REINSTALL DEPENDENCIES" in the restore script -### - And the section "UPGRADE DEPENDENCIES" in the upgrade script - ynh_install_nodejs 8.15.1 ynh_use_nodejs @@ -91,15 +83,16 @@ ynh_print_info "Starting mongodb ..." systemctl enable mongodb systemctl restart mongodb +# Registering db name +db_name=$(ynh_sanitize_dbid $app) +ynh_app_setting_set $app db_name $db_name + #================================================= # DOWNLOAD, CHECK AND UNPACK SOURCE #================================================= ynh_print_info "Setting up wekan 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 # Download, check integrity, uncompress and patch the source from app.src ynh_setup_source "$final_path" @@ -108,8 +101,6 @@ ynh_setup_source "$final_path" #================================================= ynh_print_info "Configuring nginx web server..." -### `ynh_add_nginx_config` will use the file conf/nginx.conf - # Create a dedicated nginx config ynh_add_nginx_config @@ -128,17 +119,6 @@ ynh_system_user_create $app "$final_path" #================================================= ynh_print_info "Configuring a systemd service..." -### `ynh_systemd_config` is used to configure a systemd script for an app. -### It can be used for apps that use sysvinit (with adaptation) or systemd. -### Have a look at the app to be sure this app needs a systemd script. -### `ynh_systemd_config` will use the file conf/systemd.service -### If you're not using these lines: -### - You can remove those files in conf/. -### - Remove the section "BACKUP SYSTEMD" in the backup script -### - Remove also the section "STOP AND REMOVE SERVICE" in the remove script -### - As well as the section "RESTORE SYSTEMD" in the restore script -### - And the section "SETUP SYSTEMD" in the upgrade script - # Create a dedicated systemd config ynh_replace_string "__NODEJS_PATH__" "$nodejs_path" "../conf/systemd.service" ynh_add_systemd_config @@ -147,8 +127,6 @@ ynh_add_systemd_config # MODIFY A CONFIG FILE #================================================= -### `ynh_replace_string` is used to replace a string in a file. -### (It's compatible with sed regular expressions syntax) cp "../conf/.env" "$final_path/.env" ynh_replace_string "__NODEJS_PATH__" "$nodejs_path" "$final_path/.env" @@ -160,10 +138,6 @@ ynh_replace_string "__PORT__" "$port" "$final_path/.env" # STORE THE CONFIG FILE CHECKSUM #================================================= -### `ynh_store_file_checksum` is used to store the checksum of a file. -### That way, during the upgrade script, by using `ynh_backup_if_checksum_is_different`, -### you can make a backup of this file before modifying it again if the admin had modified it. - # Calculate and store the config file checksum into the app settings ynh_store_file_checksum "$final_path/.env" @@ -174,9 +148,6 @@ ynh_store_file_checksum "$final_path/.env" #================================================= ynh_print_info "Configuring file permissions ..." -### For security reason, any app should set the permissions to root: before anything else. -### Then, if write authorization is needed, any access should be given only to directories -### that really need such authorization. # Set strong right permissions to app files chown -R $app: "$final_path" chmod -R 640 "$final_path" @@ -186,14 +157,6 @@ find "$final_path" -type d -print0 | xargs -0 chmod 750 # ADVERTISE SERVICE IN ADMIN PANEL #================================================= -### `yunohost service add` is a CLI yunohost command to add a service in the admin panel. -### You'll find the service in the 'services' section of YunoHost admin panel. -### This CLI command would be useless if the app does not have any services (systemd or sysvinit) -### If you're not using these lines: -### - You can remove these files in conf/. -### - Remove the section "REMOVE SERVICE FROM ADMIN PANEL" in the remove script -### - As well as the section ADVERTISE SERVICE IN ADMIN PANEL" in the restore script - yunohost service add mongodb --log "/var/log/mongodb/mongodb.log" yunohost service add $app diff --git a/scripts/remove b/scripts/remove index 9e7b861..61ab06e 100755 --- a/scripts/remove +++ b/scripts/remove @@ -29,7 +29,7 @@ final_path=$(ynh_app_setting_get $app final_path) #================================================= # Remove a service from the admin panel, added by `yunohost service add` -if yunohost service status | grep -q $app +if yunohost service status $app >/dev/null 2>&1 then ynh_print_info "Removing $app service" yunohost service remove $app diff --git a/scripts/restore b/scripts/restore index 9f0b9c1..c036dea 100644 --- a/scripts/restore +++ b/scripts/restore @@ -14,10 +14,6 @@ source /usr/share/yunohost/helpers # MANAGE SCRIPT FAILURE #================================================= -ynh_clean_setup () { - #### Remove this function if there's nothing to clean before calling the remove script. - true -} # Exit if an error occurs during the execution of the script ynh_abort_if_errors From 2d40624eec04472ac3e383a5ce170608f1108674 Mon Sep 17 00:00:00 2001 From: yalh76 Date: Sat, 23 Mar 2019 13:03:03 +0100 Subject: [PATCH 91/96] Update check_process --- check_process | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/check_process b/check_process index b249208..860b802 100644 --- a/check_process +++ b/check_process @@ -15,7 +15,7 @@ backup_restore=1 multi_instance=1 incorrect_path=1 - port_already_use=1 + port_already_use=0 change_url=1 ;;; Levels Level 1=auto From 72e7df88acde19494a9116e7d4a160a6f6d4ef1f Mon Sep 17 00:00:00 2001 From: yalh76 Date: Tue, 26 Mar 2019 22:02:39 +0100 Subject: [PATCH 92/96] Cleanup install script --- scripts/install | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/scripts/install b/scripts/install index e56e461..c8da7cb 100755 --- a/scripts/install +++ b/scripts/install @@ -38,9 +38,6 @@ ynh_print_info "Validating installation parameters..." final_path=/var/www/$app test ! -e "$final_path" || ynh_die "This path already contains a folder" -# Normalize the url path syntax -path_url=$(ynh_normalize_url_path $path_url) - # Register (book) web path ynh_webpath_register $app $domain $path_url @@ -81,7 +78,7 @@ ynh_print_info "Starting mongodb ..." # Start mongodb systemctl enable mongodb -systemctl restart mongodb +systemctl start mongodb # Registering db name db_name=$(ynh_sanitize_dbid $app) @@ -90,7 +87,7 @@ ynh_app_setting_set $app db_name $db_name #================================================= # DOWNLOAD, CHECK AND UNPACK SOURCE #================================================= -ynh_print_info "Setting up wekan source files..." +ynh_print_info "Setting up source files..." ynh_app_setting_set $app final_path $final_path # Download, check integrity, uncompress and patch the source from app.src From 63afcc460ee6dfa8245c6e94d5eeb78d61a958a4 Mon Sep 17 00:00:00 2001 From: yalh76 Date: Tue, 26 Mar 2019 22:03:01 +0100 Subject: [PATCH 93/96] remove not needed settings --- scripts/restore | 2 -- 1 file changed, 2 deletions(-) diff --git a/scripts/restore b/scripts/restore index c036dea..9a957a3 100644 --- a/scripts/restore +++ b/scripts/restore @@ -26,10 +26,8 @@ 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) db_name=$(ynh_app_setting_get $app db_name) -port=$(ynh_app_setting_get $app final_path) #================================================= # CHECK IF THE APP CAN BE RESTORED From d4ef2dc6b2f93f0522b38a19d6b1b6f00584660e Mon Sep 17 00:00:00 2001 From: yalh76 Date: Tue, 26 Mar 2019 22:10:40 +0100 Subject: [PATCH 94/96] cleanup change_url script --- scripts/change_url | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/scripts/change_url b/scripts/change_url index 4278d43..0c0f4af 100644 --- a/scripts/change_url +++ b/scripts/change_url @@ -32,18 +32,8 @@ final_path=$(ynh_app_setting_get $app final_path) # Add settings here as needed by your application -db_name=$(ynh_app_setting_get $app db_name) port=$(ynh_app_setting_get $app port) -#================================================= -# CHECK THE SYNTAX OF THE PATHS -#================================================= - -test -n "$old_path" || old_path="/" -test -n "$new_path" || new_path="/" -new_path=$(ynh_normalize_url_path $new_path) -old_path=$(ynh_normalize_url_path $old_path) - #================================================= # CHECK WHICH PARTS SHOULD BE CHANGED #================================================= From 768a9890413e8dbd00ac154eebfc58a619034898 Mon Sep 17 00:00:00 2001 From: yalh76 Date: Wed, 27 Mar 2019 11:13:37 +0100 Subject: [PATCH 95/96] Spelling --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b76ef2a..acc19e8 100644 --- a/README.md +++ b/README.md @@ -45,7 +45,7 @@ First registered user will be admin, and next ones normal users. If you want oth #### Multi-users support -LDAP is supported but and HTTP auth is stil not supported +LDAP is supported but HTTP auth is still not supported #### Supported architectures * x86-64b - [![Build Status](https://ci-apps.yunohost.org/ci/logs/wekan%20%28Community%29.svg)](https://ci-apps.yunohost.org/ci/apps/wekan/) From 0ae6669c3bd7a25bc2ff47dedb51e436a57534e1 Mon Sep 17 00:00:00 2001 From: yalh76 Date: Thu, 28 Mar 2019 01:21:28 +0100 Subject: [PATCH 96/96] Add time to start after upgrade --- scripts/upgrade | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/upgrade b/scripts/upgrade index c9b23c7..ff33c5c 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -177,6 +177,7 @@ systemctl reload nginx ynh_print_info "Now restarting Wekan service..." ynh_systemd_action --action=restart --service_name=$app --log_path="systemd" --line_match="Kadira: completed instrumenting the app" +sleep 10 #================================================= # END OF SCRIPT