diff --git a/CHANGELOG.md b/CHANGELOG.md
index b576e7262..8595dc3b7 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,43 @@
+# v4.87 2021-01-26 Wekan release
+
+This release fixes the following bugs:
+
+- [Reject by default LDAP connections not authorized via CA trust store](https://github.com/wekan/wekan/pull/3483).
+ Thanks to robert-scheck.
+- [Handle '\n' line breaks in PEM-encoded SSL/TLS certificates](https://github.com/wekan/wekan/pull/3485).
+ Thanks to robert-scheck.
+
+and adds the following improvements
+
+- [Try parallel build of releases, does it work](https://github.com/wekan/wekan/commit/be238ac7439ce38b4403d9a611dec9bb421a856f).
+ Thanks to xet7.
+
+Thanks to above GitHub users for their contributions and translators for their translations.
+
+# v4.86 2021-01-25 Wekan release
+
+This release adds the following improvements:
+
+- [Added PWA related category, orientation, screenshots, maskable icon and
+ IARC rating ID](https://github.com/wekan/wekan/commit/027771b3021a709d9049015e7d7e6faccf1ad7f3).
+ Thanks to xet7.
+- [Added PWA related monochrome icon](https://github.com/wekan/wekan/commit/2977f7cf47626b429159cb7b7496919c07ece914).
+ Thanks to xet7.
+- [Mention Wekan GitHub Discussions at readme](https://github.com/wekan/wekan/commit/4c0bd359f921ae0ea722f78946fcc1168e8b939e).
+ Thanks to xet7.
+
+and adds the following updates:
+
+- [Use Node 12.20.1 in rebuild-wekan.sh](https://github.com/wekan/wekan/commit/37d76e9e061d31c11fca8e704e9b4c54f17c0023).
+ Thanks to xet7.
+
+and fixes the following bugs:
+
+- [Move call to URL search to onRendered](https://github.com/wekan/wekan/pull/3478).
+ Thanks to jrsupplee.
+
+Thanks to above GitHub users for their contributions and translators for their translations.
+
# v4.85 2021-01-23 Wekan release
This release adds the following new features:
diff --git a/README.md b/README.md
index e340bc6ad..3c384785c 100644
--- a/README.md
+++ b/README.md
@@ -20,13 +20,12 @@ New English strings of new features can be added as PRs to edge branch file weka
## [Wekan feature requests and bugs](https://github.com/wekan/wekan/issues)
-Please add most of your questions as GitHub issue: [Wekan feature requests and bugs](https://github.com/wekan/wekan/issues).
+Please add most of your questions as GitHub issue: [Wekan Feature Requests and Bugs](https://github.com/wekan/wekan/issues).
It's better than at chat where details get lost when chat scrolls up.
## Chat
-[![Wekan Chat][vanila_badge]][wekan_chat] - Most Wekan community and developers are here. Works on webbrowser
-and PWA app that can be added as icon on Android and bookmark on iOS, used like native app.
+[Discussions][discussions] - Wekan Community GitHub Discussions, that are not [Feature Requests and Bugs](https://github.com/wekan/wekan/issues).
[Wekan IRC FAQ](https://github.com/wekan/wekan/wiki/IRC-FAQ)
@@ -114,8 +113,6 @@ with [Meteor](https://www.meteor.com).
[translate_wekan]: https://www.transifex.com/wekan/wekan/
[open_source]: https://en.wikipedia.org/wiki/Open-source_software
[free_software]: https://en.wikipedia.org/wiki/Free_software
-[vanila_badge]: https://vanila.io/img/join-chat-button2.png
-[wekan_chat]: https://community.vanila.io/wekan
-
+[discussions]: https://github.com/wekan/wekan/discussions
[](https://app.fossa.io/projects/git%2Bgithub.com%2Fwekan%2Fwekan?ref=badge_large)
diff --git a/Stackerfile.yml b/Stackerfile.yml
index 70ba308e4..4fe04aaf7 100644
--- a/Stackerfile.yml
+++ b/Stackerfile.yml
@@ -1,5 +1,5 @@
appId: wekan-public/apps/77b94f60-dec9-0136-304e-16ff53095928
-appVersion: "v4.85.0"
+appVersion: "v4.87.0"
files:
userUploads:
- README.md
diff --git a/i18n/de.i18n.json b/i18n/de.i18n.json
index 4e60448e9..70a6b884d 100644
--- a/i18n/de.i18n.json
+++ b/i18n/de.i18n.json
@@ -902,7 +902,7 @@
"operator-number-expected": "Operator „__operator__“ erwartete eine Zahl, bekam aber „__value__“",
"heading-notes": "Bemerkungen",
"globalSearch-instructions-heading": "Hinweise zur Suche",
- "globalSearch-instructions-description": "Suchanfragen können Operatoren enthalten, um die Suche zu verfeinern. Operatoren bestehen aus ihrem Namen und ihrem Wert, getrennt durch einen Doppelpunkt. Beispielsweise würde die Operatorangabe `list:Blockiert` die Suche beschränken auf Karten in einer Liste namens *Blockiert*. Wenn der Wet Leerschritte oder andere Spezialzeichen enthält, muss er in Anführungszeichen gesetzt sein (z.B. `__operator_list__:\"Im Review\"`).",
+ "globalSearch-instructions-description": "Suchanfragen können Operatoren enthalten, um die Suche zu verfeinern. Operatoren bestehen aus ihrem Namen und ihrem Wert, getrennt durch einen Doppelpunkt. Beispielsweise würde die Operatorangabe `Liste:Blockiert` die Suche beschränken auf Karten in einer Liste namens *Blockiert*. Wenn der Wert Leerschritte oder andere Spezialzeichen enthält, muss er in Anführungszeichen gesetzt sein (z.B. `__operator_list__:\"Im Review\"`).",
"globalSearch-instructions-operators": "Mögliche Operatoren:",
"globalSearch-instructions-operator-board": "`__operator_board__:Titel` – Karten in Boards mit dem angegebenen Titel",
"globalSearch-instructions-operator-list": "`__operator_list__:Titel` – Karten in Listen, auf die der angegebene Titel passt",
@@ -910,12 +910,12 @@
"globalSearch-instructions-operator-label": "`__operator_label__:Farbe` `__operator_label__:Name` – Karten, die ein Label haben, auf das die angegebene Farbe oder Name passt",
"globalSearch-instructions-operator-hash": "`__operator_label_abbrev__Label` – Kurzform von `__operator_label__:Label`",
"globalSearch-instructions-operator-user": "`__operator_user__:Nutzername` – Karten, für die der angegebene Nutzer ein *Mitglied* oder ein *Zugewiesener* ist",
- "globalSearch-instructions-operator-at": "`__operator_user_abbrev__Nutzername` – Kurzform von `user:Nutzername`",
+ "globalSearch-instructions-operator-at": "`__operator_user_abbrev__Nutzername` – Kurzform von `Nutzer:Nutzername`",
"globalSearch-instructions-operator-member": "`__operator_member__:Nutzername` – Karten, für die der angegebene Nutzer ein *Mitglied* ist",
- "globalSearch-instructions-operator-assignee": "`__operator_member__:Nutzername` – Karten, für die der angegebene Nutzer ein *Zugewiesener* ist",
+ "globalSearch-instructions-operator-assignee": "`__operator_assignee__:Nutzername` – Karten, für die der angegebene Nutzer ein *Zugewiesener* ist",
"globalSearch-instructions-notes-1": "Mehrere Operatoren können angegeben werden.",
"globalSearch-instructions-notes-2": "Gleichartige Operatoren werden Oder-verknüpft. Karten, für die eine Bedingung zutrifft, werden ausgegeben.\n`__operator_list__:Verfügbar __operator_list__:Blockiert` würde alle Karten ausgeben, die in irgendwelchen Listen mit den Namen *Verfügbar* oder *Blockiert* stehen.",
- "globalSearch-instructions-notes-3": "Verschiedenartige Operatoren werden Und-verknüpft. Karten, für die alle Bedingungen zutreffen, werden ausgegeben.\n`__operator_list__:Verfügbar __operator_label__:red` würde alle Karten ausgeben, die in der Liste *Verfügbar* mit einem *roten* Label stehen.",
+ "globalSearch-instructions-notes-3": "Verschiedenartige Operatoren werden Und-verknüpft. Karten, für die alle Bedingungen zutreffen, werden ausgegeben.\n`__operator_list__:Verfügbar __operator_label__:rot` würde alle Karten ausgeben, die in der Liste *Verfügbar* mit einem *roten* Label stehen.",
"globalSearch-instructions-notes-4": "Bei Suchen in Texten ist die Groß-/Kleinschreibung egal.",
"globalSearch-instructions-notes-5": "Zur Zeit werden keine archivierten Karten gefunden.",
"link-to-search": "Link auf diese Suche",
diff --git a/i18n/fr.i18n.json b/i18n/fr.i18n.json
index 92ce63a9e..c924a9e82 100644
--- a/i18n/fr.i18n.json
+++ b/i18n/fr.i18n.json
@@ -601,8 +601,8 @@
"minutes": "minutes",
"seconds": "secondes",
"show-field-on-card": "Afficher ce champ sur la carte",
- "automatically-field-on-card": "Add field to new cards",
- "always-field-on-card": "Add field to all cards",
+ "automatically-field-on-card": "Ajouter le champ aux cartes nouvellement créées",
+ "always-field-on-card": "Ajouter le champ à toutes les cartes",
"showLabel-field-on-card": "Indiquer l'étiquette du champ sur la mini-carte",
"yes": "Oui",
"no": "Non",
diff --git a/i18n/he.i18n.json b/i18n/he.i18n.json
index 01561e2eb..bfe9eef85 100644
--- a/i18n/he.i18n.json
+++ b/i18n/he.i18n.json
@@ -601,8 +601,8 @@
"minutes": "דקות",
"seconds": "שניות",
"show-field-on-card": "הצגת שדה זה בכרטיס",
- "automatically-field-on-card": "Add field to new cards",
- "always-field-on-card": "Add field to all cards",
+ "automatically-field-on-card": "הוספת שדה לכרטיסים חדשים",
+ "always-field-on-card": "הוספת שדה לכל הכרטיסים",
"showLabel-field-on-card": "הצגת תווית של השדה בכרטיס מוקטן",
"yes": "כן",
"no": "לא",
diff --git a/i18n/pl.i18n.json b/i18n/pl.i18n.json
index b40e92152..173fcb833 100644
--- a/i18n/pl.i18n.json
+++ b/i18n/pl.i18n.json
@@ -601,8 +601,8 @@
"minutes": "minut",
"seconds": "sekund",
"show-field-on-card": "Pokaż te pole na karcie",
- "automatically-field-on-card": "Add field to new cards",
- "always-field-on-card": "Add field to all cards",
+ "automatically-field-on-card": "Dodaj pole do nowych kart",
+ "always-field-on-card": "Dodaj pole do wszystkich kart",
"showLabel-field-on-card": "Pokaż pole etykiety w minikarcie",
"yes": "Tak",
"no": "Nie",
@@ -896,10 +896,10 @@
"operator-assignee-abbrev": "p",
"operator-is": "jest",
"operator-due": "wykonania",
- "operator-created": "created",
- "operator-modified": "modified",
+ "operator-created": "stworzono",
+ "operator-modified": "zmodyfikowano",
"operator-unknown-error": "%s nie jest operatorem",
- "operator-number-expected": "operator __operator__ expected a number, got '__value__'",
+ "operator-number-expected": "operator __operator__ oczekiwał wartości cyfrowej, otrzymał '__value__'",
"heading-notes": "Notatki",
"globalSearch-instructions-heading": "Instrukcja wyszukiwania",
"globalSearch-instructions-description": "W wyszukiwanym ciągu można umieszczać specjalne klucze, aby doprecyzować zapytanie. Klucz składa się z operatora i argumentu, rozdzielonych dwukropkiem. Na przykład klucz `lista:Wstrzymane` zawęża wyszukiwanie do kart znajdujących się na listach o nazwie *Wstrzymane*. Jeśli argument zawiera spacje lub znaki specjalne, należy go umieścić w cudzysłowie, np. `__operator_list__:\"Do uzgodnienia\"`.",
@@ -921,6 +921,6 @@
"link-to-search": "Link do tego wyszukiwania",
"excel-font": "Arial",
"number": "Numer",
- "label-colors": "Label Colors",
- "label-names": "Label Names"
+ "label-colors": "Kolory etykiet",
+ "label-names": "Nazwy etykiet"
}
diff --git a/package-lock.json b/package-lock.json
index 5d6a605d9..ab2ea22b0 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,6 +1,6 @@
{
"name": "wekan",
- "version": "v4.85.0",
+ "version": "v4.87.0",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
diff --git a/package.json b/package.json
index d4737b4dc..cf65d567c 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "wekan",
- "version": "v4.85.0",
+ "version": "v4.87.0",
"description": "Open-Source kanban",
"private": true,
"scripts": {
diff --git a/packages/wekan-ldap/server/ldap.js b/packages/wekan-ldap/server/ldap.js
index f2d9a7b72..fb522e2f3 100644
--- a/packages/wekan-ldap/server/ldap.js
+++ b/packages/wekan-ldap/server/ldap.js
@@ -19,7 +19,7 @@ export default class LDAP {
idle_timeout : this.constructor.settings_get('LDAP_IDLE_TIMEOUT'),
encryption : this.constructor.settings_get('LDAP_ENCRYPTION'),
ca_cert : this.constructor.settings_get('LDAP_CA_CERT'),
- reject_unauthorized : this.constructor.settings_get('LDAP_REJECT_UNAUTHORIZED') || false,
+ reject_unauthorized : this.constructor.settings_get('LDAP_REJECT_UNAUTHORIZED') || true,
Authentication : this.constructor.settings_get('LDAP_AUTHENTIFICATION'),
Authentication_UserDN : this.constructor.settings_get('LDAP_AUTHENTIFICATION_USERDN'),
Authentication_Password : this.constructor.settings_get('LDAP_AUTHENTIFICATION_PASSWORD'),
@@ -100,7 +100,7 @@ export default class LDAP {
if (this.options.ca_cert && this.options.ca_cert !== '') {
// Split CA cert into array of strings
- const chainLines = this.constructor.settings_get('LDAP_CA_CERT').split('\n');
+ const chainLines = this.constructor.settings_get('LDAP_CA_CERT').replace(/\\n/g,'\n').split('\n');
let cert = [];
const ca = [];
chainLines.forEach((line) => {
diff --git a/public/api/wekan.html b/public/api/wekan.html
index 993fc5a1c..723e6aa29 100644
--- a/public/api/wekan.html
+++ b/public/api/wekan.html
@@ -1524,7 +1524,7 @@ var n=this.pipeline.run(e.tokenizer(t)),r=new e.Vector,i=[],o=this._fields.reduc
-
- Wekan REST API v4.85
+ Wekan REST API v4.87
@@ -1982,7 +1982,7 @@ var n=this.pipeline.run(e.tokenizer(t)),r=new e.Vector,i=[],o=this._fields.reduc
-
Wekan REST API v4.85
+
Wekan REST API v4.87
Scroll down for code samples, example requests and responses. Select a language for code samples from the tabs above or the mobile navigation menu.
diff --git a/public/api/wekan.yml b/public/api/wekan.yml
index 98dcae9f1..123d892d7 100644
--- a/public/api/wekan.yml
+++ b/public/api/wekan.yml
@@ -1,7 +1,7 @@
swagger: '2.0'
info:
title: Wekan REST API
- version: v4.85
+ version: v4.87
description: |
The REST API allows you to control and extend Wekan with ease.
diff --git a/public/maskable_icon.png b/public/maskable_icon.png
new file mode 100644
index 000000000..cc8818a43
Binary files /dev/null and b/public/maskable_icon.png differ
diff --git a/public/monochrome-icon-512x512.png b/public/monochrome-icon-512x512.png
new file mode 100644
index 000000000..feba2ac7d
Binary files /dev/null and b/public/monochrome-icon-512x512.png differ
diff --git a/public/screenshot1.webp b/public/screenshot1.webp
new file mode 100644
index 000000000..c023b5774
Binary files /dev/null and b/public/screenshot1.webp differ
diff --git a/public/screenshot2.webp b/public/screenshot2.webp
new file mode 100644
index 000000000..e7fc25e2d
Binary files /dev/null and b/public/screenshot2.webp differ
diff --git a/public/site.webmanifest b/public/site.webmanifest
index 1be969896..4017ee3b1 100644
--- a/public/site.webmanifest
+++ b/public/site.webmanifest
@@ -26,10 +26,37 @@
"src": "/StoreLogo.scale-100.png",
"sizes": "50x50",
"type": "image/png"
+ },
+ {
+ "src": "/maskable_icon.png",
+ "sizes": "474x474",
+ "type": "image/png",
+ "purpose": "maskable"
+ },
+ {
+ "src": "/monochrome-icon-512x512.png",
+ "sizes": "512x512",
+ "type": "image/png",
+ "purpose": "monochrome"
}
],
+ "screenshots" : [
+ {
+ "src": "/screenshot1.webp",
+ "sizes": "1280x720",
+ "type": "image/webp"
+ },
+ {
+ "src": "/screenshot2.webp",
+ "sizes": "1280x720",
+ "type": "image/webp"
+ }
+ ],
"theme_color": "#ffffff",
"background_color": "#ffffff",
"start_url": "/sign-in",
- "display": "standalone"
+ "display": "standalone",
+ "orientation": "any",
+ "categories": ["productivity"],
+ "iarc_rating_id": "70d7c4a4-3e5a-4714-a7dc-fa006613ba96"
}
diff --git a/rebuild-wekan.sh b/rebuild-wekan.sh
index a40ef53df..053a192ef 100755
--- a/rebuild-wekan.sh
+++ b/rebuild-wekan.sh
@@ -28,7 +28,7 @@ do
#curl -0 -L https://npmjs.org/install.sh | sudo sh
#sudo chown -R $(id -u):$(id -g) $HOME/.npm
sudo npm -g install n
- sudo n 12.20.0
+ sudo n 12.20.1
#curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
#sudo apt-get install -y nodejs
elif [[ "$OSTYPE" == "darwin"* ]]; then
diff --git a/releases/release-bundle.sh b/releases/release-bundle.sh
index b309ee829..78eff8d01 100755
--- a/releases/release-bundle.sh
+++ b/releases/release-bundle.sh
@@ -1,7 +1,16 @@
cd ~/repos/wekan
+sudo apt -y install parallel
./releases/rebuild-release.sh
#./releases/delete-phantomjs.sh
cd ~/repos/wekan/.build
zip -r wekan-$1.zip bundle
-scp wekan-$1.zip x2:/var/snap/wekan/common/releases.wekan.team/
+
+{
+ scp wekan-$1.zip x2:/var/snap/wekan/common/releases.wekan.team/
+ scp wekan-$1.zip a:/home/wekan/repos/ && ssh a ' sudo npm -g install npm' && ssh a './maintainer-make-release.sh $1' && scp a:/home/wekan/repos/wekan-$1-arm64.zip . && scp wekan-$1-arm64.zip x2:/var/snap/wekan/common/releases.wekan.team/raspi3/
+ scp wekan-$1.zip s:/home/linux1/ && ssh s 'sudo npm -g install npm ' && ssh s './maintainer-make-release.sh $1' && scp s:/home/linux1/wekan-$1-s390x.zip . && scp wekan-$1-s390x.zip x2:/var/snap/wekan/common/releases.wekan.team/s390x/
+ scp wekan-$1.zip openpower:/home/ubuntu/ && ssh openpower './maintainer-make-release.sh $1' && scp openpower:/home/ubuntu/wekan-$1-ppc64le.zip . && scp wekan-$1-ppc64le.zip x2:/var/snap/wekan/common/releases.wekan.team/ppc64le/
+ sudo systemctl enable sandstorm && sudo sandstorm start && rm -rf ~/sandbuild && sudo mkdir -p /usr/local/lib/node_modules/fibers/.node-gyp && mkdir -p ~/sandbuild && cp -pR ~/repos/wekan ~/sandbuild/ && rm -rf ~/sandbuild/wekan/.meteor-spk && cd ~/sandbuild/wekan/.build/bundle/programs/server && npm install node-gyp node-pre-gyp fibers && cd ~/sandbuild/wekan && meteor-spk pack wekan-$1.spk && spk publish wekan-$1.spk && cd ~/repos/wekan && sudo sandstorm stop && sudo systemctl disable sandstorm && cd ~/repos/wekan
+} | parallel -k
+
cd ..
diff --git a/sandstorm-pkgdef.capnp b/sandstorm-pkgdef.capnp
index 1e06c2ef7..5ef4f465f 100644
--- a/sandstorm-pkgdef.capnp
+++ b/sandstorm-pkgdef.capnp
@@ -22,10 +22,10 @@ const pkgdef :Spk.PackageDefinition = (
appTitle = (defaultText = "Wekan"),
# The name of the app as it is displayed to the user.
- appVersion = 485,
+ appVersion = 487,
# Increment this for every release.
- appMarketingVersion = (defaultText = "4.85.0~2021-01-23"),
+ appMarketingVersion = (defaultText = "4.87.0~2021-01-26"),
# Human-readable presentation of the app version.
minUpgradableAppVersion = 0,