summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.meteor/packages2
-rw-r--r--.meteor/versions6
-rw-r--r--CHANGELOG.md20
-rw-r--r--Dockerfile12
-rw-r--r--Stackerfile.yml2
-rw-r--r--client/components/boards/boardsList.js5
-rw-r--r--docker-compose.yml10
-rw-r--r--i18n/ar.i18n.json2
-rw-r--r--i18n/bg.i18n.json2
-rw-r--r--i18n/br.i18n.json2
-rw-r--r--i18n/ca.i18n.json2
-rw-r--r--i18n/cs.i18n.json2
-rw-r--r--i18n/da.i18n.json2
-rw-r--r--i18n/de.i18n.json2
-rw-r--r--i18n/el.i18n.json2
-rw-r--r--i18n/en-GB.i18n.json2
-rw-r--r--i18n/eo.i18n.json2
-rw-r--r--i18n/es-AR.i18n.json2
-rw-r--r--i18n/es.i18n.json2
-rw-r--r--i18n/eu.i18n.json2
-rw-r--r--i18n/fa.i18n.json2
-rw-r--r--i18n/fi.i18n.json2
-rw-r--r--i18n/fr.i18n.json2
-rw-r--r--i18n/gl.i18n.json2
-rw-r--r--i18n/he.i18n.json2
-rw-r--r--i18n/hi.i18n.json2
-rw-r--r--i18n/hu.i18n.json2
-rw-r--r--i18n/hy.i18n.json2
-rw-r--r--i18n/id.i18n.json2
-rw-r--r--i18n/ig.i18n.json2
-rw-r--r--i18n/it.i18n.json2
-rw-r--r--i18n/ja.i18n.json2
-rw-r--r--i18n/ka.i18n.json2
-rw-r--r--i18n/km.i18n.json2
-rw-r--r--i18n/ko.i18n.json2
-rw-r--r--i18n/lv.i18n.json2
-rw-r--r--i18n/mk.i18n.json2
-rw-r--r--i18n/mn.i18n.json2
-rw-r--r--i18n/nb.i18n.json2
-rw-r--r--i18n/nl.i18n.json2
-rw-r--r--i18n/oc.i18n.json220
-rw-r--r--i18n/pl.i18n.json2
-rw-r--r--i18n/pt-BR.i18n.json2
-rw-r--r--i18n/pt.i18n.json2
-rw-r--r--i18n/ro.i18n.json2
-rw-r--r--i18n/ru.i18n.json2
-rw-r--r--i18n/sr.i18n.json2
-rw-r--r--i18n/sv.i18n.json2
-rw-r--r--i18n/sw.i18n.json2
-rw-r--r--i18n/ta.i18n.json2
-rw-r--r--i18n/th.i18n.json2
-rw-r--r--i18n/tr.i18n.json2
-rw-r--r--i18n/uk.i18n.json2
-rw-r--r--i18n/vi.i18n.json2
-rw-r--r--i18n/zh-CN.i18n.json2
-rw-r--r--i18n/zh-TW.i18n.json2
-rw-r--r--models/cards.js2
-rw-r--r--models/import.js8
-rw-r--r--models/wekanCreator.js8
-rw-r--r--package.json2
-rwxr-xr-xreleases/virtualbox/start-wekan.sh10
-rw-r--r--sandstorm-pkgdef.capnp4
-rw-r--r--server/accounts-lockout.js16
-rwxr-xr-xsnap-src/bin/config26
-rwxr-xr-xsnap-src/bin/wekan-help18
-rwxr-xr-xstart-wekan.bat10
-rwxr-xr-xstart-wekan.sh10
67 files changed, 358 insertions, 129 deletions
diff --git a/.meteor/packages b/.meteor/packages
index 0b43cbef..9a3f9bca 100644
--- a/.meteor/packages
+++ b/.meteor/packages
@@ -82,7 +82,6 @@ staringatlights:fast-render
mixmax:smart-disconnect
accounts-password@1.5.0
cfs:gridfs
-eluck:accounts-lockout
rzymek:fullcalendar
momentjs:moment@2.22.2
browser-policy-framing
@@ -92,3 +91,4 @@ wekan-scrollbar
mquandalle:perfect-scrollbar
mdg:meteor-apm-agent
meteorhacks:unblock
+lucasantoniassi:accounts-lockout
diff --git a/.meteor/versions b/.meteor/versions
index 239ddb37..390cda63 100644
--- a/.meteor/versions
+++ b/.meteor/versions
@@ -60,7 +60,6 @@ ecmascript-runtime@0.5.0
ecmascript-runtime-client@0.5.0
ecmascript-runtime-server@0.5.0
ejson@1.1.0
-eluck:accounts-lockout@0.9.0
email@1.2.3
es5-shim@4.6.15
fastclick@1.0.13
@@ -82,6 +81,7 @@ launch-screen@1.1.1
livedata@1.0.18
localstorage@1.2.0
logging@1.1.19
+lucasantoniassi:accounts-lockout@1.0.0
matb33:collection-hooks@0.8.4
matteodem:easy-search@1.6.4
mdg:meteor-apm-agent@3.1.2
@@ -145,8 +145,6 @@ reload@1.1.11
retry@1.0.9
routepolicy@1.0.12
rzymek:fullcalendar@3.8.0
-wekan-accounts-oidc@1.0.10
-wekan-oidc@1.0.12
service-configuration@1.0.11
session@1.1.7
sha@1.0.9
@@ -181,6 +179,8 @@ useraccounts:unstyled@1.14.2
verron:autosize@3.0.8
webapp@1.4.0
webapp-hashing@1.0.9
+wekan-accounts-oidc@1.0.10
+wekan-oidc@1.0.12
wekan-scrollbar@3.1.3
wekan:accounts-cas@0.1.0
wekan:wekan-ldap@0.0.2
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 8057e0d8..e54ac9bc 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,13 +1,29 @@
-# Upcoming Wekan release
+# v2.44 2019-03-11 Wekan release
-This release adds the following new features with Apache I-CLA, thanks to bentiss:
+This release adds the following new features and fixes with Apache I-CLA, thanks to bentiss:
- [Activities: register customFields changes in the activities](https://github.com/wekan/wekan/pull/2239).
+- [customFields: fix leftover from lint](https://github.com/wekan/wekan/commit/4c72479d1206850d436261dc5c6a4127f246f6da).
+ Looks like I forgot to use the camelCase notation here, and this leads to an exception while updating a custom field.
+- [Fix imports](https://github.com/wekan/wekan/pull/2245).
and adds the following new features:
- Add language: Occitan. Thanks to translators.
+and fixes the following bugs:
+
+- [Fix removed checklistItem activity => dangling activities created](https://github.com/wekan/wekan/commit/2ec1664408d9515b5ca77fbb46ef99208eb8cff0).
+ Closes #2240. Thanks to andresmanelli.
+- [Avoid set self as parent card to cause circular reference, for real](https://github.com/wekan/commit/97822f35fd6365e5631c5488e8ee595f76ab4e34).
+ Thanks to andresmanelli.
+- Try to fix [Order All Boards by starred, color, board name and board description. Part 2](https://github.com/wekan/wekan/commit/8f337f17e45f8af8d96b6043d54466e5878b7e0b).
+ Works on new Wekan install. Could still have boards keeping reording happening all the time on old Wekan installs.
+ Thanks to xet7.
+- [Changed brute force protection package from eluck:accounts-lockout to lucasantoniassi:accounts-lockout that is maintained and works.
+ Added Snap/Docker/Source settings](https://github.com/wekan/wekan/commit/b7c000b78b9af253fb115bbfa5ef0d4c0681abbb).
+ Thanks to xet7.
+
Thanks to above Wekan contributors for their contributions.
# v2.43 2019-03-08 Wekan release
diff --git a/Dockerfile b/Dockerfile
index c833bc17..326b8101 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -12,6 +12,12 @@ ARG FIBERS_VERSION
ARG ARCHITECTURE
ARG SRC_PATH
ARG WITH_API
+ARG ACCOUNTS_LOCKOUT_KNOWN_USERS_FAILURES_BEFORE
+ARG ACCOUNTS_LOCKOUT_KNOWN_USERS_PERIOD
+ARG ACCOUNTS_LOCKOUT_KNOWN_USERS_FAILURE_WINDOW
+ARG ACCOUNTS_LOCKOUT_UNKNOWN_USERS_FAILURES_BERORE
+ARG ACCOUNTS_LOCKOUT_UNKNOWN_USERS_LOCKOUT_PERIOD
+ARG ACCOUNTS_LOCKOUT_UNKNOWN_USERS_FAILURE_WINDOW
ARG EMAIL_NOTIFICATION_TIMEOUT
ARG MATOMO_ADDRESS
ARG MATOMO_SITE_ID
@@ -102,6 +108,12 @@ ENV BUILD_DEPS="apt-utils bsdtar gnupg gosu wget curl bzip2 build-essential pyth
ARCHITECTURE=linux-x64 \
SRC_PATH=./ \
WITH_API=true \
+ ACCOUNTS_LOCKOUT_KNOWN_USERS_FAILURES_BEFORE=3 \
+ ACCOUNTS_LOCKOUT_KNOWN_USERS_PERIOD=60 \
+ ACCOUNTS_LOCKOUT_KNOWN_USERS_FAILURE_WINDOW=15 \
+ ACCOUNTS_LOCKOUT_UNKNOWN_USERS_FAILURES_BERORE=3 \
+ ACCOUNTS_LOCKOUT_UNKNOWN_USERS_LOCKOUT_PERIOD=60 \
+ ACCOUNTS_LOCKOUT_UNKNOWN_USERS_FAILURE_WINDOW=15 \
EMAIL_NOTIFICATION_TIMEOUT=30000 \
MATOMO_ADDRESS="" \
MATOMO_SITE_ID="" \
diff --git a/Stackerfile.yml b/Stackerfile.yml
index ec766564..e7d6b3c2 100644
--- a/Stackerfile.yml
+++ b/Stackerfile.yml
@@ -1,5 +1,5 @@
appId: wekan-public/apps/77b94f60-dec9-0136-304e-16ff53095928
-appVersion: "v2.43.0"
+appVersion: "v2.44.0"
files:
userUploads:
- README.md
diff --git a/client/components/boards/boardsList.js b/client/components/boards/boardsList.js
index 74a8e4d4..3a49a8bf 100644
--- a/client/components/boards/boardsList.js
+++ b/client/components/boards/boardsList.js
@@ -26,11 +26,8 @@ BlazeComponent.extendComponent({
'members.userId': Meteor.userId(),
type: 'board',
subtasksDefaultListId: null,
- }, {
- sort: { stars: -1, color: 1, title: 1, description: 1 },
- });
+ }, { sort: [['stars', 'desc'], ['color', 'asc'], ['title', 'asc'], ['description', 'asc'], ['_id', 'asc']] });
},
-
isStarred() {
const user = Meteor.user();
return user && user.hasStarred(this.currentData()._id);
diff --git a/docker-compose.yml b/docker-compose.yml
index 454964e8..ef1580aa 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -221,6 +221,16 @@ services:
# If you disable Wekan API with false, Export Board does not work.
- WITH_API=true
#---------------------------------------------------------------
+ # ==== PASSWORD BRUTE FORCE PROTECTION ====
+ #https://atmospherejs.com/lucasantoniassi/accounts-lockout
+ #Defaults below. Uncomment to change. wekan/server/accounts-lockout.js
+ #- ACCOUNTS_LOCKOUT_KNOWN_USERS_FAILURES_BEFORE=3
+ #- ACCOUNTS_LOCKOUT_KNOWN_USERS_PERIOD=60
+ #- ACCOUNTS_LOCKOUT_KNOWN_USERS_FAILURE_WINDOW=15
+ #- ACCOUNTS_LOCKOUT_UNKNOWN_USERS_FAILURES_BERORE=3
+ #- ACCOUNTS_LOCKOUT_UNKNOWN_USERS_LOCKOUT_PERIOD=60
+ #- ACCOUNTS_LOCKOUT_UNKNOWN_USERS_FAILURE_WINDOW=15
+ #---------------------------------------------------------------
# ==== EMAIL NOTIFICATION TIMEOUT, ms =====
# Defaut: 30000 ms = 30s
#- EMAIL_NOTIFICATION_TIMEOUT=30000
diff --git a/i18n/ar.i18n.json b/i18n/ar.i18n.json
index 6576c293..f5c44f8d 100644
--- a/i18n/ar.i18n.json
+++ b/i18n/ar.i18n.json
@@ -567,6 +567,8 @@
"activity-added-label-card": "added label '%s'",
"activity-removed-label-card": "removed label '%s'",
"activity-delete-attach-card": "deleted an attachment",
+ "activity-set-customfield": "set custom field '%s' to '%s' in %s",
+ "activity-unset-customfield": "unset custom field '%s' in %s",
"r-rule": "Rule",
"r-add-trigger": "Add trigger",
"r-add-action": "Add action",
diff --git a/i18n/bg.i18n.json b/i18n/bg.i18n.json
index 2889110d..6bad3ab2 100644
--- a/i18n/bg.i18n.json
+++ b/i18n/bg.i18n.json
@@ -567,6 +567,8 @@
"activity-added-label-card": "добави етикет '%s'",
"activity-removed-label-card": "премахна етикет '%s'",
"activity-delete-attach-card": "изтри прикачения файл",
+ "activity-set-customfield": "set custom field '%s' to '%s' in %s",
+ "activity-unset-customfield": "unset custom field '%s' in %s",
"r-rule": "Правило",
"r-add-trigger": "Добави спусък",
"r-add-action": "Добави действие",
diff --git a/i18n/br.i18n.json b/i18n/br.i18n.json
index 1148909e..c5e01719 100644
--- a/i18n/br.i18n.json
+++ b/i18n/br.i18n.json
@@ -567,6 +567,8 @@
"activity-added-label-card": "added label '%s'",
"activity-removed-label-card": "removed label '%s'",
"activity-delete-attach-card": "deleted an attachment",
+ "activity-set-customfield": "set custom field '%s' to '%s' in %s",
+ "activity-unset-customfield": "unset custom field '%s' in %s",
"r-rule": "Rule",
"r-add-trigger": "Add trigger",
"r-add-action": "Add action",
diff --git a/i18n/ca.i18n.json b/i18n/ca.i18n.json
index 809e4298..8a095ba8 100644
--- a/i18n/ca.i18n.json
+++ b/i18n/ca.i18n.json
@@ -567,6 +567,8 @@
"activity-added-label-card": "added label '%s'",
"activity-removed-label-card": "removed label '%s'",
"activity-delete-attach-card": "deleted an attachment",
+ "activity-set-customfield": "set custom field '%s' to '%s' in %s",
+ "activity-unset-customfield": "unset custom field '%s' in %s",
"r-rule": "Rule",
"r-add-trigger": "Add trigger",
"r-add-action": "Add action",
diff --git a/i18n/cs.i18n.json b/i18n/cs.i18n.json
index 54a39350..7ab1e05e 100644
--- a/i18n/cs.i18n.json
+++ b/i18n/cs.i18n.json
@@ -567,6 +567,8 @@
"activity-added-label-card": "přidán štítek '%s'",
"activity-removed-label-card": "odstraněn štítek '%s'",
"activity-delete-attach-card": "odstraněna příloha",
+ "activity-set-customfield": "set custom field '%s' to '%s' in %s",
+ "activity-unset-customfield": "unset custom field '%s' in %s",
"r-rule": "Pravidlo",
"r-add-trigger": "Přidat spoštěč",
"r-add-action": "Přidat akci",
diff --git a/i18n/da.i18n.json b/i18n/da.i18n.json
index 71e610ad..61b6c4ac 100644
--- a/i18n/da.i18n.json
+++ b/i18n/da.i18n.json
@@ -567,6 +567,8 @@
"activity-added-label-card": "added label '%s'",
"activity-removed-label-card": "removed label '%s'",
"activity-delete-attach-card": "deleted an attachment",
+ "activity-set-customfield": "set custom field '%s' to '%s' in %s",
+ "activity-unset-customfield": "unset custom field '%s' in %s",
"r-rule": "Rule",
"r-add-trigger": "Add trigger",
"r-add-action": "Add action",
diff --git a/i18n/de.i18n.json b/i18n/de.i18n.json
index 2d89faaa..8701c9d4 100644
--- a/i18n/de.i18n.json
+++ b/i18n/de.i18n.json
@@ -567,6 +567,8 @@
"activity-added-label-card": "Label hinzugefügt '%s'",
"activity-removed-label-card": "Label entfernt '%s'",
"activity-delete-attach-card": "hat einen Anhang gelöscht",
+ "activity-set-customfield": "setze benutzerdefiniertes Feld '%s' zu '%s' in %s",
+ "activity-unset-customfield": "entferne benutzerdefiniertes Feld '%s' in %s",
"r-rule": "Regel",
"r-add-trigger": "Auslöser hinzufügen",
"r-add-action": "Aktion hinzufügen",
diff --git a/i18n/el.i18n.json b/i18n/el.i18n.json
index ffeb7447..44173f52 100644
--- a/i18n/el.i18n.json
+++ b/i18n/el.i18n.json
@@ -567,6 +567,8 @@
"activity-added-label-card": "added label '%s'",
"activity-removed-label-card": "removed label '%s'",
"activity-delete-attach-card": "deleted an attachment",
+ "activity-set-customfield": "set custom field '%s' to '%s' in %s",
+ "activity-unset-customfield": "unset custom field '%s' in %s",
"r-rule": "Rule",
"r-add-trigger": "Add trigger",
"r-add-action": "Add action",
diff --git a/i18n/en-GB.i18n.json b/i18n/en-GB.i18n.json
index 62a2a2b1..5e24cfd3 100644
--- a/i18n/en-GB.i18n.json
+++ b/i18n/en-GB.i18n.json
@@ -567,6 +567,8 @@
"activity-added-label-card": "added label '%s'",
"activity-removed-label-card": "removed label '%s'",
"activity-delete-attach-card": "deleted an attachment",
+ "activity-set-customfield": "set custom field '%s' to '%s' in %s",
+ "activity-unset-customfield": "unset custom field '%s' in %s",
"r-rule": "Rule",
"r-add-trigger": "Add trigger",
"r-add-action": "Add action",
diff --git a/i18n/eo.i18n.json b/i18n/eo.i18n.json
index 8d2ab591..d8f8c1cc 100644
--- a/i18n/eo.i18n.json
+++ b/i18n/eo.i18n.json
@@ -567,6 +567,8 @@
"activity-added-label-card": "added label '%s'",
"activity-removed-label-card": "removed label '%s'",
"activity-delete-attach-card": "deleted an attachment",
+ "activity-set-customfield": "set custom field '%s' to '%s' in %s",
+ "activity-unset-customfield": "unset custom field '%s' in %s",
"r-rule": "Rule",
"r-add-trigger": "Add trigger",
"r-add-action": "Add action",
diff --git a/i18n/es-AR.i18n.json b/i18n/es-AR.i18n.json
index b33303fe..08af58ae 100644
--- a/i18n/es-AR.i18n.json
+++ b/i18n/es-AR.i18n.json
@@ -567,6 +567,8 @@
"activity-added-label-card": "added label '%s'",
"activity-removed-label-card": "removed label '%s'",
"activity-delete-attach-card": "deleted an attachment",
+ "activity-set-customfield": "set custom field '%s' to '%s' in %s",
+ "activity-unset-customfield": "unset custom field '%s' in %s",
"r-rule": "Rule",
"r-add-trigger": "Add trigger",
"r-add-action": "Add action",
diff --git a/i18n/es.i18n.json b/i18n/es.i18n.json
index 2e741473..24d5f379 100644
--- a/i18n/es.i18n.json
+++ b/i18n/es.i18n.json
@@ -567,6 +567,8 @@
"activity-added-label-card": "añadida etiqueta '%s'",
"activity-removed-label-card": "eliminada etiqueta '%s'",
"activity-delete-attach-card": "eliminado un adjunto",
+ "activity-set-customfield": "set custom field '%s' to '%s' in %s",
+ "activity-unset-customfield": "unset custom field '%s' in %s",
"r-rule": "Regla",
"r-add-trigger": "Añadir disparador",
"r-add-action": "Añadir acción",
diff --git a/i18n/eu.i18n.json b/i18n/eu.i18n.json
index fbb10452..6ef06e29 100644
--- a/i18n/eu.i18n.json
+++ b/i18n/eu.i18n.json
@@ -567,6 +567,8 @@
"activity-added-label-card": "added label '%s'",
"activity-removed-label-card": "removed label '%s'",
"activity-delete-attach-card": "deleted an attachment",
+ "activity-set-customfield": "set custom field '%s' to '%s' in %s",
+ "activity-unset-customfield": "unset custom field '%s' in %s",
"r-rule": "Rule",
"r-add-trigger": "Add trigger",
"r-add-action": "Add action",
diff --git a/i18n/fa.i18n.json b/i18n/fa.i18n.json
index 7b1724b6..f440fc48 100644
--- a/i18n/fa.i18n.json
+++ b/i18n/fa.i18n.json
@@ -567,6 +567,8 @@
"activity-added-label-card": "افزودن لیبل '%s'",
"activity-removed-label-card": "حذف لیبل '%s'",
"activity-delete-attach-card": "حذف ضمیمه",
+ "activity-set-customfield": "set custom field '%s' to '%s' in %s",
+ "activity-unset-customfield": "unset custom field '%s' in %s",
"r-rule": "نقش",
"r-add-trigger": "افزودن گیره",
"r-add-action": "افزودن عملیات",
diff --git a/i18n/fi.i18n.json b/i18n/fi.i18n.json
index 7954d31c..594c55c6 100644
--- a/i18n/fi.i18n.json
+++ b/i18n/fi.i18n.json
@@ -567,6 +567,8 @@
"activity-added-label-card": "lisätty tunniste '%s'",
"activity-removed-label-card": "poistettu tunniste '%s'",
"activity-delete-attach-card": "poistettu liitetiedosto",
+ "activity-set-customfield": "asetettu mukautettu kentän '%s' sisällöksi '%s' kortilla %s",
+ "activity-unset-customfield": "poistettu mukautettu kenttä '%s' kortilla %s",
"r-rule": "Sääntö",
"r-add-trigger": "Lisää liipaisin",
"r-add-action": "Lisää toimi",
diff --git a/i18n/fr.i18n.json b/i18n/fr.i18n.json
index 2c942ed1..73a89c01 100644
--- a/i18n/fr.i18n.json
+++ b/i18n/fr.i18n.json
@@ -567,6 +567,8 @@
"activity-added-label-card": "a ajouté l'étiquette '%s'",
"activity-removed-label-card": "a supprimé l'étiquette '%s'",
"activity-delete-attach-card": "a supprimé une pièce jointe",
+ "activity-set-customfield": "set custom field '%s' to '%s' in %s",
+ "activity-unset-customfield": "unset custom field '%s' in %s",
"r-rule": "Règle",
"r-add-trigger": "Ajouter un déclencheur",
"r-add-action": "Ajouter une action",
diff --git a/i18n/gl.i18n.json b/i18n/gl.i18n.json
index 0a32480f..b896e400 100644
--- a/i18n/gl.i18n.json
+++ b/i18n/gl.i18n.json
@@ -567,6 +567,8 @@
"activity-added-label-card": "added label '%s'",
"activity-removed-label-card": "removed label '%s'",
"activity-delete-attach-card": "deleted an attachment",
+ "activity-set-customfield": "set custom field '%s' to '%s' in %s",
+ "activity-unset-customfield": "unset custom field '%s' in %s",
"r-rule": "Rule",
"r-add-trigger": "Add trigger",
"r-add-action": "Add action",
diff --git a/i18n/he.i18n.json b/i18n/he.i18n.json
index 636f0638..0389299b 100644
--- a/i18n/he.i18n.json
+++ b/i18n/he.i18n.json
@@ -567,6 +567,8 @@
"activity-added-label-card": "התווית ‚%s’ נוספה",
"activity-removed-label-card": "התווית ‚%s’ הוסרה",
"activity-delete-attach-card": "קובץ מצורף נמחק",
+ "activity-set-customfield": "set custom field '%s' to '%s' in %s",
+ "activity-unset-customfield": "unset custom field '%s' in %s",
"r-rule": "כלל",
"r-add-trigger": "הוספת הקפצה",
"r-add-action": "הוספת פעולה",
diff --git a/i18n/hi.i18n.json b/i18n/hi.i18n.json
index 599d24bd..b121e3b5 100644
--- a/i18n/hi.i18n.json
+++ b/i18n/hi.i18n.json
@@ -567,6 +567,8 @@
"activity-added-label-card": "संकलित label '%s'",
"activity-removed-label-card": "हटा दिया label '%s'",
"activity-delete-attach-card": "deleted an संलग्नक",
+ "activity-set-customfield": "set custom field '%s' to '%s' in %s",
+ "activity-unset-customfield": "unset custom field '%s' in %s",
"r-rule": "Rule",
"r-add-trigger": "जोड़ें trigger",
"r-add-action": "जोड़ें action",
diff --git a/i18n/hu.i18n.json b/i18n/hu.i18n.json
index 8011115d..0f10daf1 100644
--- a/i18n/hu.i18n.json
+++ b/i18n/hu.i18n.json
@@ -567,6 +567,8 @@
"activity-added-label-card": "added label '%s'",
"activity-removed-label-card": "removed label '%s'",
"activity-delete-attach-card": "deleted an attachment",
+ "activity-set-customfield": "set custom field '%s' to '%s' in %s",
+ "activity-unset-customfield": "unset custom field '%s' in %s",
"r-rule": "Rule",
"r-add-trigger": "Add trigger",
"r-add-action": "Add action",
diff --git a/i18n/hy.i18n.json b/i18n/hy.i18n.json
index d961fd68..4068520c 100644
--- a/i18n/hy.i18n.json
+++ b/i18n/hy.i18n.json
@@ -567,6 +567,8 @@
"activity-added-label-card": "added label '%s'",
"activity-removed-label-card": "removed label '%s'",
"activity-delete-attach-card": "deleted an attachment",
+ "activity-set-customfield": "set custom field '%s' to '%s' in %s",
+ "activity-unset-customfield": "unset custom field '%s' in %s",
"r-rule": "Rule",
"r-add-trigger": "Add trigger",
"r-add-action": "Add action",
diff --git a/i18n/id.i18n.json b/i18n/id.i18n.json
index 1f28a05e..926623e1 100644
--- a/i18n/id.i18n.json
+++ b/i18n/id.i18n.json
@@ -567,6 +567,8 @@
"activity-added-label-card": "added label '%s'",
"activity-removed-label-card": "removed label '%s'",
"activity-delete-attach-card": "deleted an attachment",
+ "activity-set-customfield": "set custom field '%s' to '%s' in %s",
+ "activity-unset-customfield": "unset custom field '%s' in %s",
"r-rule": "Rule",
"r-add-trigger": "Add trigger",
"r-add-action": "Add action",
diff --git a/i18n/ig.i18n.json b/i18n/ig.i18n.json
index 69458c99..789e6e14 100644
--- a/i18n/ig.i18n.json
+++ b/i18n/ig.i18n.json
@@ -567,6 +567,8 @@
"activity-added-label-card": "added label '%s'",
"activity-removed-label-card": "removed label '%s'",
"activity-delete-attach-card": "deleted an attachment",
+ "activity-set-customfield": "set custom field '%s' to '%s' in %s",
+ "activity-unset-customfield": "unset custom field '%s' in %s",
"r-rule": "Rule",
"r-add-trigger": "Add trigger",
"r-add-action": "Add action",
diff --git a/i18n/it.i18n.json b/i18n/it.i18n.json
index b64ee2b9..ec354c94 100644
--- a/i18n/it.i18n.json
+++ b/i18n/it.i18n.json
@@ -567,6 +567,8 @@
"activity-added-label-card": "aggiunta etichetta '%s'",
"activity-removed-label-card": "L' etichetta '%s' è stata rimossa.",
"activity-delete-attach-card": "Cancella un allegato",
+ "activity-set-customfield": "set custom field '%s' to '%s' in %s",
+ "activity-unset-customfield": "unset custom field '%s' in %s",
"r-rule": "Ruolo",
"r-add-trigger": "Aggiungi trigger",
"r-add-action": "Aggiungi azione",
diff --git a/i18n/ja.i18n.json b/i18n/ja.i18n.json
index c34cba01..6b1fcf1c 100644
--- a/i18n/ja.i18n.json
+++ b/i18n/ja.i18n.json
@@ -567,6 +567,8 @@
"activity-added-label-card": "added label '%s'",
"activity-removed-label-card": "removed label '%s'",
"activity-delete-attach-card": "deleted an attachment",
+ "activity-set-customfield": "set custom field '%s' to '%s' in %s",
+ "activity-unset-customfield": "unset custom field '%s' in %s",
"r-rule": "Rule",
"r-add-trigger": "Add trigger",
"r-add-action": "Add action",
diff --git a/i18n/ka.i18n.json b/i18n/ka.i18n.json
index f0aa40ce..4fe0f734 100644
--- a/i18n/ka.i18n.json
+++ b/i18n/ka.i18n.json
@@ -567,6 +567,8 @@
"activity-added-label-card": "added label '%s'",
"activity-removed-label-card": "removed label '%s'",
"activity-delete-attach-card": "deleted an attachment",
+ "activity-set-customfield": "set custom field '%s' to '%s' in %s",
+ "activity-unset-customfield": "unset custom field '%s' in %s",
"r-rule": "Rule",
"r-add-trigger": "Add trigger",
"r-add-action": "Add action",
diff --git a/i18n/km.i18n.json b/i18n/km.i18n.json
index de3fb43f..e234ee75 100644
--- a/i18n/km.i18n.json
+++ b/i18n/km.i18n.json
@@ -567,6 +567,8 @@
"activity-added-label-card": "added label '%s'",
"activity-removed-label-card": "removed label '%s'",
"activity-delete-attach-card": "deleted an attachment",
+ "activity-set-customfield": "set custom field '%s' to '%s' in %s",
+ "activity-unset-customfield": "unset custom field '%s' in %s",
"r-rule": "Rule",
"r-add-trigger": "Add trigger",
"r-add-action": "Add action",
diff --git a/i18n/ko.i18n.json b/i18n/ko.i18n.json
index cea93883..4e6835e0 100644
--- a/i18n/ko.i18n.json
+++ b/i18n/ko.i18n.json
@@ -567,6 +567,8 @@
"activity-added-label-card": "added label '%s'",
"activity-removed-label-card": "removed label '%s'",
"activity-delete-attach-card": "deleted an attachment",
+ "activity-set-customfield": "set custom field '%s' to '%s' in %s",
+ "activity-unset-customfield": "unset custom field '%s' in %s",
"r-rule": "Rule",
"r-add-trigger": "Add trigger",
"r-add-action": "Add action",
diff --git a/i18n/lv.i18n.json b/i18n/lv.i18n.json
index bfaf55f8..d4ded323 100644
--- a/i18n/lv.i18n.json
+++ b/i18n/lv.i18n.json
@@ -567,6 +567,8 @@
"activity-added-label-card": "added label '%s'",
"activity-removed-label-card": "removed label '%s'",
"activity-delete-attach-card": "deleted an attachment",
+ "activity-set-customfield": "set custom field '%s' to '%s' in %s",
+ "activity-unset-customfield": "unset custom field '%s' in %s",
"r-rule": "Rule",
"r-add-trigger": "Add trigger",
"r-add-action": "Add action",
diff --git a/i18n/mk.i18n.json b/i18n/mk.i18n.json
index ecdf8ad6..3170c6d2 100644
--- a/i18n/mk.i18n.json
+++ b/i18n/mk.i18n.json
@@ -567,6 +567,8 @@
"activity-added-label-card": "добави етикет '%s'",
"activity-removed-label-card": "премахна етикет '%s'",
"activity-delete-attach-card": "изтри прикачения файл",
+ "activity-set-customfield": "set custom field '%s' to '%s' in %s",
+ "activity-unset-customfield": "unset custom field '%s' in %s",
"r-rule": "Правило",
"r-add-trigger": "Добави спусък",
"r-add-action": "Добави действие",
diff --git a/i18n/mn.i18n.json b/i18n/mn.i18n.json
index b7dcb121..a255469c 100644
--- a/i18n/mn.i18n.json
+++ b/i18n/mn.i18n.json
@@ -567,6 +567,8 @@
"activity-added-label-card": "added label '%s'",
"activity-removed-label-card": "removed label '%s'",
"activity-delete-attach-card": "deleted an attachment",
+ "activity-set-customfield": "set custom field '%s' to '%s' in %s",
+ "activity-unset-customfield": "unset custom field '%s' in %s",
"r-rule": "Rule",
"r-add-trigger": "Add trigger",
"r-add-action": "Add action",
diff --git a/i18n/nb.i18n.json b/i18n/nb.i18n.json
index e60378a7..4ebb4c5f 100644
--- a/i18n/nb.i18n.json
+++ b/i18n/nb.i18n.json
@@ -567,6 +567,8 @@
"activity-added-label-card": "added label '%s'",
"activity-removed-label-card": "removed label '%s'",
"activity-delete-attach-card": "deleted an attachment",
+ "activity-set-customfield": "set custom field '%s' to '%s' in %s",
+ "activity-unset-customfield": "unset custom field '%s' in %s",
"r-rule": "Rule",
"r-add-trigger": "Add trigger",
"r-add-action": "Add action",
diff --git a/i18n/nl.i18n.json b/i18n/nl.i18n.json
index 09e6cbe1..2f02d194 100644
--- a/i18n/nl.i18n.json
+++ b/i18n/nl.i18n.json
@@ -567,6 +567,8 @@
"activity-added-label-card": "added label '%s'",
"activity-removed-label-card": "removed label '%s'",
"activity-delete-attach-card": "deleted an attachment",
+ "activity-set-customfield": "set custom field '%s' to '%s' in %s",
+ "activity-unset-customfield": "unset custom field '%s' in %s",
"r-rule": "Rule",
"r-add-trigger": "Add trigger",
"r-add-action": "Add action",
diff --git a/i18n/oc.i18n.json b/i18n/oc.i18n.json
index da28d1a0..97332502 100644
--- a/i18n/oc.i18n.json
+++ b/i18n/oc.i18n.json
@@ -1,109 +1,109 @@
{
- "accept": "Accept",
- "act-activity-notify": "Activity Notification",
- "act-addAttachment": "added attachment __attachment__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
- "act-deleteAttachment": "deleted attachment __attachment__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
- "act-addSubtask": "added subtask __subtask__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
- "act-addLabel": "Added label __label__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
- "act-removeLabel": "Removed label __label__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
- "act-addChecklist": "added checklist __checklist__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
- "act-addChecklistItem": "added checklist item __checklistItem__ to checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
- "act-removeChecklist": "removed checklist __checklist__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
- "act-removeChecklistItem": "removed checklist item __checklistItem__ from checklist __checkList__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
- "act-checkedItem": "checked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
- "act-uncheckedItem": "unchecked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
- "act-completeChecklist": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
- "act-uncompleteChecklist": "uncompleted checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
- "act-addComment": "commented on card __card__: __comment__ at list __list__ at swimlane __swimlane__ at board __board__",
- "act-createBoard": "created board __board__",
- "act-createCard": "created card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
- "act-createCustomField": "created custom field __customField__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
- "act-createList": "added list __list__ to board __board__",
- "act-addBoardMember": "added member __member__ to board __board__",
- "act-archivedBoard": "Board __board__ moved to Archive",
- "act-archivedCard": "Card __card__ at list __list__ at swimlane __swimlane__ at board __board__ moved to Archive",
- "act-archivedList": "List __list__ at swimlane __swimlane__ at board __board__ moved to Archive",
- "act-archivedSwimlane": "Swimlane __swimlane__ at board __board__ moved to Archive",
- "act-importBoard": "imported board __board__",
- "act-importCard": "imported card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
- "act-importList": "imported list __list__ to swimlane __swimlane__ at board __board__",
- "act-joinMember": "added member __member__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
- "act-moveCard": "moved card __card__ from list __oldList__ at swimlane __oldSwimlane__ at board __oldBoard__ to list __list__ at swimlane __swimlane__ at board __board__",
- "act-removeBoardMember": "removed member __member__ from board __board__",
- "act-restoredCard": "restored card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
- "act-unjoinMember": "removed member __member__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "accept": "Acceptar",
+ "act-activity-notify": "Notificacion d'activitat",
+ "act-addAttachment": "as apondut una pèça jonch __attachment__ de la carta __card__ de la tièra __list__ del corredor __swimlane__ del tablèu __board__",
+ "act-deleteAttachment": "as tirat una pèça jonch __attachment__ de la carta __card__ de la tièra __list__ del corredor __swimlane__ del tablèu __board__",
+ "act-addSubtask": "as apondut una jos-tasca __subtask__ de la carta __card__ de la tièra __list__ del corredor __swimlane__ del tablèu __board__",
+ "act-addLabel": "as apondut un labèl __label__ de la carta __card__ a la tièra __list__ del corredor __swimlane__ del tablèu __board__",
+ "act-removeLabel": "as tirat lo labèl __label__ de la carta __card__ de la tièra __list__ del corredor __swimlane__ del tablèu __board__",
+ "act-addChecklist": "as apondut la checklist __checklist__ de la carta __card__ de la tièra __list__ del corredor __swimlane__ del tablèu __board__",
+ "act-addChecklistItem": " as apondut l'element __checklistItem__ de la checklist __checklist__ de la carta __card__ de la tièra __list__ del corredor __swimlane__ del tablèu __board__",
+ "act-removeChecklist": "as tirat la checklist __checklist__ de la carta __card__ de la tièra __list__ del corredor __swimlane__ del tablèu __board__",
+ "act-removeChecklistItem": " as tirat l'element __checklistItem__ de la checklist __checklist__ de la carta __card__ de la tièra __list__ del corredor __swimlane__ del tablèu __board__",
+ "act-checkedItem": "as croiar __checklistItem__ de la checklist __checklist__ de la carta __card__ de la tièra __list__ del corredor __swimlane__ del tablèu __board__",
+ "act-uncheckedItem": "as descroiar __checklistItem__ de la checklist __checklist__ de la carta __card__ de la tièra __list__ del corredor __swimlane__ del tablèu __board__",
+ "act-completeChecklist": "as completat la checklist __checklist__ de la carta __card__ de la tièra __list__ del corredor __swimlane__ del tablèu __board__",
+ "act-uncompleteChecklist": "as rendut incomplet la checklist __checklist__ de la carta __card__ de la tièra __list__ del corredor __swimlane__ del tablèu __board__",
+ "act-addComment": "as comentat la carta __card__: __comment__ de la tièra __list__ del corredor __swimlane__ del tablèu __board__",
+ "act-createBoard": "as creat lo tablèu __board__",
+ "act-createCard": "as creat la carta __card__ de la tièra __list__ del corredor __swimlane__ del tablèu __board__",
+ "act-createCustomField": "as creat lo camp personalizat __customField__ a la carta __card__ de la tièra __list__ del corredor __swimlane__ del tablèu __board__",
+ "act-createList": "as apondut la tièra __list__ al tablèu __board__",
+ "act-addBoardMember": "as apondut un participant __member__ al tablèu __board__",
+ "act-archivedBoard": "Lo tablèu __board__ es estat desplaçar cap als Archius",
+ "act-archivedCard": "La carta __card__ de la tièra __list__ del corredor __swimlane__ del tablèu __board__ es estat desplaçar cap als Archius",
+ "act-archivedList": "La tièra __list__ del corredor __swimlane__ del tablèu __board__ es estat desplaçar cap a Archius",
+ "act-archivedSwimlane": "Lo corredor __swimlane__ del tablèu __board__ es estat desplaçar cap a Archius",
+ "act-importBoard": "as importat lo tablèu __board__",
+ "act-importCard": "as importat la carta __card__ de la tièra __list__ del corredor __swimlane__ del tablèu __board__",
+ "act-importList": "as importat la tièra __list__ del corredor __swimlane__ del tablèu __board__",
+ "act-joinMember": "as apondut un participant __member__ a la carta __card__ de la tièra __list__ del corredor __swimlane__ del tablèu __board__",
+ "act-moveCard": "as desplaçat la carta __card__ de la tièra __oldList__ del corredor __oldSwimlane__ del tablèu __oldBoard__ cap a la tièra __list__ del corredor __swimlane__ del tablèu __board__",
+ "act-removeBoardMember": "as tirat lo participant __member__ del tablèu __board__",
+ "act-restoredCard": "restorat la carta __card__ de la tièra __list__ del corredor __swimlane__ del tablèu __board__",
+ "act-unjoinMember": "as tirat lo participant __member__ de la carta __card__ de la tièra __list__ del corredor __swimlane__ del tablèu __board__",
"act-withBoardTitle": "__board__",
"act-withCardTitle": "[__board__] __card__",
- "actions": "Actions",
- "activities": "Activities",
- "activity": "Activity",
- "activity-added": "added %s to %s",
- "activity-archived": "%s moved to Archive",
- "activity-attached": "attached %s to %s",
- "activity-created": "created %s",
- "activity-customfield-created": "created custom field %s",
- "activity-excluded": "excluded %s from %s",
- "activity-imported": "imported %s into %s from %s",
- "activity-imported-board": "imported %s from %s",
- "activity-joined": "joined %s",
- "activity-moved": "moved %s from %s to %s",
- "activity-on": "on %s",
- "activity-removed": "removed %s from %s",
- "activity-sent": "sent %s to %s",
- "activity-unjoined": "unjoined %s",
- "activity-subtask-added": "added subtask to %s",
- "activity-checked-item": "checked %s in checklist %s of %s",
- "activity-unchecked-item": "unchecked %s in checklist %s of %s",
- "activity-checklist-added": "added checklist to %s",
- "activity-checklist-removed": "removed a checklist from %s",
- "activity-checklist-completed": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
- "activity-checklist-uncompleted": "uncompleted the checklist %s of %s",
- "activity-checklist-item-added": "added checklist item to '%s' in %s",
- "activity-checklist-item-removed": "removed a checklist item from '%s' in %s",
- "add": "Add",
- "activity-checked-item-card": "checked %s in checklist %s",
- "activity-unchecked-item-card": "unchecked %s in checklist %s",
- "activity-checklist-completed-card": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
- "activity-checklist-uncompleted-card": "uncompleted the checklist %s",
- "add-attachment": "Add Attachment",
- "add-board": "Add Board",
- "add-card": "Add Card",
- "add-swimlane": "Add Swimlane",
- "add-subtask": "Add Subtask",
- "add-checklist": "Add Checklist",
- "add-checklist-item": "Add an item to checklist",
- "add-cover": "Add Cover",
- "add-label": "Add Label",
- "add-list": "Add List",
- "add-members": "Add Members",
- "added": "Added",
- "addMemberPopup-title": "Members",
- "admin": "Admin",
- "admin-desc": "Can view and edit cards, remove members, and change settings for the board.",
- "admin-announcement": "Announcement",
- "admin-announcement-active": "Active System-Wide Announcement",
- "admin-announcement-title": "Announcement from Administrator",
- "all-boards": "All boards",
- "and-n-other-card": "And __count__ other card",
- "and-n-other-card_plural": "And __count__ other cards",
- "apply": "Apply",
- "app-is-offline": "Loading, please wait. Refreshing the page will cause data loss. If loading does not work, please check that server has not stopped.",
- "archive": "Move to Archive",
- "archive-all": "Move All to Archive",
- "archive-board": "Move Board to Archive",
- "archive-card": "Move Card to Archive",
- "archive-list": "Move List to Archive",
- "archive-swimlane": "Move Swimlane to Archive",
- "archive-selection": "Move selection to Archive",
- "archiveBoardPopup-title": "Move Board to Archive?",
- "archived-items": "Archive",
- "archived-boards": "Boards in Archive",
- "restore-board": "Restore Board",
- "no-archived-boards": "No Boards in Archive.",
- "archives": "Archive",
- "template": "Template",
- "templates": "Templates",
- "assign-member": "Assign member",
+ "actions": "Accions",
+ "activities": "Activitats",
+ "activity": "Activitat",
+ "activity-added": "as apondut %s a %s",
+ "activity-archived": "%s desplaçat cap a Archius",
+ "activity-attached": "as ligat %s a %s",
+ "activity-created": "as creat %s",
+ "activity-customfield-created": "as creat lo camp personalizat %s",
+ "activity-excluded": "as exclu %s de %s",
+ "activity-imported": "as importat %s cap a %s dempuèi %s",
+ "activity-imported-board": "as importat %s dempuèi %s",
+ "activity-joined": "as rejonch %s",
+ "activity-moved": "as desplaçat %s dempuèi %s cap a %s",
+ "activity-on": "sus %s",
+ "activity-removed": "as tirat %s de %s",
+ "activity-sent": "as mandat %s cap a %s",
+ "activity-unjoined": "as quitat %s",
+ "activity-subtask-added": "as apondut una jos-tasca a %s",
+ "activity-checked-item": "as croiar %s dins la checklist %s de %s",
+ "activity-unchecked-item": "descroiar %s dins la checklist %s de %s",
+ "activity-checklist-added": "as apondut a checklist a %s",
+ "activity-checklist-removed": "as tirat la checklist de %s",
+ "activity-checklist-completed": "as acabat la checklista __checklist__ de la carta __card__ de la lista __list__ del corredor __swimlane__ del tablèu __board__",
+ "activity-checklist-uncompleted": "as rendut incomplet la checklist %s de %s",
+ "activity-checklist-item-added": "as apondut un element a la checklist '%s' dins %s",
+ "activity-checklist-item-removed": "as tirat un element a la checklist '%s' dins %s",
+ "add": "Apondre",
+ "activity-checked-item-card": "as croiar %s dins la checklist %s",
+ "activity-unchecked-item-card": "as descroiar %s dins la checklist %s",
+ "activity-checklist-completed-card": "as acabat la checklista __checklist__ de la carta __card__ de la lista __list__ del corredor __swimlane__ del tablèu __board__",
+ "activity-checklist-uncompleted-card": "as rendut incomplet la checklist %s",
+ "add-attachment": "Apondre una pèça jonch",
+ "add-board": "Apondre un tablèu",
+ "add-card": "Apondre una carta",
+ "add-swimlane": "Apondre un corredor",
+ "add-subtask": "Apondre una jos-tasca",
+ "add-checklist": "Apondre una checklist",
+ "add-checklist-item": "Apondre un element a la checklist",
+ "add-cover": "Apondre una cobèrta",
+ "add-label": "Apondre un labèl",
+ "add-list": "Apondre una tièra",
+ "add-members": "Apondre un participant",
+ "added": "Apondut",
+ "addMemberPopup-title": "Participants",
+ "admin": "Administartor",
+ "admin-desc": "As lo drech de legir e modificar las cartas, tirar dels participants, e modificat las opcions del tablèu.",
+ "admin-announcement": "Anóncia",
+ "admin-announcement-active": "Activar l'anóncia globala",
+ "admin-announcement-title": "Anóncia de l'administrator",
+ "all-boards": "Totes los tablèus",
+ "and-n-other-card": "E __count__ carta de mai",
+ "and-n-other-card_plural": "E __count__ cartas de mai",
+ "apply": "Aplicar",
+ "app-is-offline": "Cargament, vos cal esperar. Refrescar la pagina va vos far perdre vòstra trabalh. Se lo cargament es trop long, vos cal agachar se lo servidor es pas blocat/arrestat.",
+ "archive": "Archivar",
+ "archive-all": "Archivar tot",
+ "archive-board": "Archivar lo tablèu",
+ "archive-card": "Archivar la carta",
+ "archive-list": "Archivar la tièra",
+ "archive-swimlane": "Archivar lo corredor",
+ "archive-selection": "Archivar la seleccion",
+ "archiveBoardPopup-title": "Archivar lo tablèu?",
+ "archived-items": "Archivar",
+ "archived-boards": "Tablèu archivat",
+ "restore-board": "Restaurar lo tablèu",
+ "no-archived-boards": "Pas de tablèu archivat.",
+ "archives": "Archivar",
+ "template": "Modèl",
+ "templates": "Modèlas",
+ "assign-member": "Affectar un participant",
"attached": "attached",
"attachment": "Attachment",
"attachment-delete-pop": "Deleting an attachment is permanent. There is no undo.",
@@ -152,7 +152,7 @@
"cardDeletePopup-title": "Delete Card?",
"cardDetailsActionsPopup-title": "Card Actions",
"cardLabelsPopup-title": "Labels",
- "cardMembersPopup-title": "Members",
+ "cardMembersPopup-title": "Participants",
"cardMorePopup-title": "More",
"cardTemplatePopup-title": "Create template",
"cards": "Cards",
@@ -171,7 +171,7 @@
"changePasswordPopup-title": "Change Password",
"changePermissionsPopup-title": "Change Permissions",
"changeSettingsPopup-title": "Change Settings",
- "subtasks": "Subtasks",
+ "subtasks": "Jos-tasca",
"checklists": "Checklists",
"click-to-star": "Click to star this board.",
"click-to-unstar": "Click to unstar this board.",
@@ -212,7 +212,7 @@
"no-comments": "No comments",
"no-comments-desc": "Can not see comments and activities.",
"computer": "Computer",
- "confirm-subtask-delete-dialog": "Are you sure you want to delete subtask?",
+ "confirm-subtask-delete-dialog": "Sètz segur que volètz tirar aqueste jos-tasca?",
"confirm-checklist-delete-dialog": "Are you sure you want to delete checklist?",
"copy-card-link-to-clipboard": "Copy card link to clipboard",
"linkCardPopup-title": "Link Card",
@@ -362,7 +362,7 @@
"log-in": "Log In",
"loginPopup-title": "Log In",
"memberMenuPopup-title": "Member Settings",
- "members": "Members",
+ "members": "Participants",
"menu": "Menu",
"move-selection": "Move selection",
"moveCardPopup-title": "Move Card",
@@ -567,6 +567,8 @@
"activity-added-label-card": "added label '%s'",
"activity-removed-label-card": "removed label '%s'",
"activity-delete-attach-card": "deleted an attachment",
+ "activity-set-customfield": "set custom field '%s' to '%s' in %s",
+ "activity-unset-customfield": "unset custom field '%s' in %s",
"r-rule": "Rule",
"r-add-trigger": "Add trigger",
"r-add-action": "Add action",
@@ -608,10 +610,10 @@
"r-top-of": "Top of",
"r-bottom-of": "Bottom of",
"r-its-list": "its list",
- "r-archive": "Move to Archive",
+ "r-archive": "Desplaçar cap a Archiu",
"r-unarchive": "Restore from Archive",
"r-card": "card",
- "r-add": "Add",
+ "r-add": "Apondre",
"r-remove": "Remove",
"r-label": "label",
"r-member": "member",
diff --git a/i18n/pl.i18n.json b/i18n/pl.i18n.json
index 74da5b1c..526492cb 100644
--- a/i18n/pl.i18n.json
+++ b/i18n/pl.i18n.json
@@ -567,6 +567,8 @@
"activity-added-label-card": "dodał(a) etykietę '%s'",
"activity-removed-label-card": "usunięto etykietę '%s'",
"activity-delete-attach-card": "usunięto załącznik",
+ "activity-set-customfield": "set custom field '%s' to '%s' in %s",
+ "activity-unset-customfield": "unset custom field '%s' in %s",
"r-rule": "Reguła",
"r-add-trigger": "Dodaj przełącznik",
"r-add-action": "Dodaj czynność",
diff --git a/i18n/pt-BR.i18n.json b/i18n/pt-BR.i18n.json
index e04e71db..20028ab2 100644
--- a/i18n/pt-BR.i18n.json
+++ b/i18n/pt-BR.i18n.json
@@ -567,6 +567,8 @@
"activity-added-label-card": "adicionada etiqueta '%s'",
"activity-removed-label-card": "removida etiqueta '%s'",
"activity-delete-attach-card": "excluido um anexo",
+ "activity-set-customfield": "set custom field '%s' to '%s' in %s",
+ "activity-unset-customfield": "unset custom field '%s' in %s",
"r-rule": "Regra",
"r-add-trigger": "Adicionar gatilho",
"r-add-action": "Adicionar ação",
diff --git a/i18n/pt.i18n.json b/i18n/pt.i18n.json
index 4a3ff888..d29c3ae8 100644
--- a/i18n/pt.i18n.json
+++ b/i18n/pt.i18n.json
@@ -567,6 +567,8 @@
"activity-added-label-card": "added label '%s'",
"activity-removed-label-card": "removed label '%s'",
"activity-delete-attach-card": "deleted an attachment",
+ "activity-set-customfield": "set custom field '%s' to '%s' in %s",
+ "activity-unset-customfield": "unset custom field '%s' in %s",
"r-rule": "Rule",
"r-add-trigger": "Add trigger",
"r-add-action": "Add action",
diff --git a/i18n/ro.i18n.json b/i18n/ro.i18n.json
index e319bb00..92d604ca 100644
--- a/i18n/ro.i18n.json
+++ b/i18n/ro.i18n.json
@@ -567,6 +567,8 @@
"activity-added-label-card": "added label '%s'",
"activity-removed-label-card": "removed label '%s'",
"activity-delete-attach-card": "deleted an attachment",
+ "activity-set-customfield": "set custom field '%s' to '%s' in %s",
+ "activity-unset-customfield": "unset custom field '%s' in %s",
"r-rule": "Rule",
"r-add-trigger": "Add trigger",
"r-add-action": "Add action",
diff --git a/i18n/ru.i18n.json b/i18n/ru.i18n.json
index c305411d..91aa5c7c 100644
--- a/i18n/ru.i18n.json
+++ b/i18n/ru.i18n.json
@@ -567,6 +567,8 @@
"activity-added-label-card": "добавил метку '%s'",
"activity-removed-label-card": "удалил метку '%s'",
"activity-delete-attach-card": "удалил вложение",
+ "activity-set-customfield": "set custom field '%s' to '%s' in %s",
+ "activity-unset-customfield": "unset custom field '%s' in %s",
"r-rule": "Правило",
"r-add-trigger": "Задать условие",
"r-add-action": "Задать действие",
diff --git a/i18n/sr.i18n.json b/i18n/sr.i18n.json
index ea37953f..c496971c 100644
--- a/i18n/sr.i18n.json
+++ b/i18n/sr.i18n.json
@@ -567,6 +567,8 @@
"activity-added-label-card": "added label '%s'",
"activity-removed-label-card": "removed label '%s'",
"activity-delete-attach-card": "deleted an attachment",
+ "activity-set-customfield": "set custom field '%s' to '%s' in %s",
+ "activity-unset-customfield": "unset custom field '%s' in %s",
"r-rule": "Rule",
"r-add-trigger": "Add trigger",
"r-add-action": "Add action",
diff --git a/i18n/sv.i18n.json b/i18n/sv.i18n.json
index aac2cf5a..34c35927 100644
--- a/i18n/sv.i18n.json
+++ b/i18n/sv.i18n.json
@@ -567,6 +567,8 @@
"activity-added-label-card": "lade till etiketten \"%s\"",
"activity-removed-label-card": "tog bort etiketten \"%s\"",
"activity-delete-attach-card": "tog bort en bilaga",
+ "activity-set-customfield": "set custom field '%s' to '%s' in %s",
+ "activity-unset-customfield": "unset custom field '%s' in %s",
"r-rule": "Regel",
"r-add-trigger": "Add trigger",
"r-add-action": "Lägg till åtgärd",
diff --git a/i18n/sw.i18n.json b/i18n/sw.i18n.json
index c46e4a7e..ab693571 100644
--- a/i18n/sw.i18n.json
+++ b/i18n/sw.i18n.json
@@ -567,6 +567,8 @@
"activity-added-label-card": "added label '%s'",
"activity-removed-label-card": "removed label '%s'",
"activity-delete-attach-card": "deleted an attachment",
+ "activity-set-customfield": "set custom field '%s' to '%s' in %s",
+ "activity-unset-customfield": "unset custom field '%s' in %s",
"r-rule": "Rule",
"r-add-trigger": "Add trigger",
"r-add-action": "Add action",
diff --git a/i18n/ta.i18n.json b/i18n/ta.i18n.json
index ae57ad18..a82c6944 100644
--- a/i18n/ta.i18n.json
+++ b/i18n/ta.i18n.json
@@ -567,6 +567,8 @@
"activity-added-label-card": "added label '%s'",
"activity-removed-label-card": "removed label '%s'",
"activity-delete-attach-card": "deleted an attachment",
+ "activity-set-customfield": "set custom field '%s' to '%s' in %s",
+ "activity-unset-customfield": "unset custom field '%s' in %s",
"r-rule": "Rule",
"r-add-trigger": "Add trigger",
"r-add-action": "Add action",
diff --git a/i18n/th.i18n.json b/i18n/th.i18n.json
index 5def7a03..82526686 100644
--- a/i18n/th.i18n.json
+++ b/i18n/th.i18n.json
@@ -567,6 +567,8 @@
"activity-added-label-card": "added label '%s'",
"activity-removed-label-card": "removed label '%s'",
"activity-delete-attach-card": "deleted an attachment",
+ "activity-set-customfield": "set custom field '%s' to '%s' in %s",
+ "activity-unset-customfield": "unset custom field '%s' in %s",
"r-rule": "Rule",
"r-add-trigger": "Add trigger",
"r-add-action": "Add action",
diff --git a/i18n/tr.i18n.json b/i18n/tr.i18n.json
index 6579a1d7..f9b8158c 100644
--- a/i18n/tr.i18n.json
+++ b/i18n/tr.i18n.json
@@ -567,6 +567,8 @@
"activity-added-label-card": "etiket eklendi '%s'",
"activity-removed-label-card": "removed label '%s'",
"activity-delete-attach-card": "Ek silindi",
+ "activity-set-customfield": "set custom field '%s' to '%s' in %s",
+ "activity-unset-customfield": "unset custom field '%s' in %s",
"r-rule": "Kural",
"r-add-trigger": "Tetikleyici ekle",
"r-add-action": "Eylem ekle",
diff --git a/i18n/uk.i18n.json b/i18n/uk.i18n.json
index cf89528c..98a8978f 100644
--- a/i18n/uk.i18n.json
+++ b/i18n/uk.i18n.json
@@ -567,6 +567,8 @@
"activity-added-label-card": "added label '%s'",
"activity-removed-label-card": "removed label '%s'",
"activity-delete-attach-card": "deleted an attachment",
+ "activity-set-customfield": "set custom field '%s' to '%s' in %s",
+ "activity-unset-customfield": "unset custom field '%s' in %s",
"r-rule": "Rule",
"r-add-trigger": "Add trigger",
"r-add-action": "Add action",
diff --git a/i18n/vi.i18n.json b/i18n/vi.i18n.json
index 0edf66e9..a3a65ff3 100644
--- a/i18n/vi.i18n.json
+++ b/i18n/vi.i18n.json
@@ -567,6 +567,8 @@
"activity-added-label-card": "added label '%s'",
"activity-removed-label-card": "removed label '%s'",
"activity-delete-attach-card": "deleted an attachment",
+ "activity-set-customfield": "set custom field '%s' to '%s' in %s",
+ "activity-unset-customfield": "unset custom field '%s' in %s",
"r-rule": "Rule",
"r-add-trigger": "Add trigger",
"r-add-action": "Add action",
diff --git a/i18n/zh-CN.i18n.json b/i18n/zh-CN.i18n.json
index 52354c18..36a603cc 100644
--- a/i18n/zh-CN.i18n.json
+++ b/i18n/zh-CN.i18n.json
@@ -567,6 +567,8 @@
"activity-added-label-card": "已添加标签 '%s'",
"activity-removed-label-card": "已移除标签 '%s'",
"activity-delete-attach-card": "已删除附件",
+ "activity-set-customfield": "set custom field '%s' to '%s' in %s",
+ "activity-unset-customfield": "unset custom field '%s' in %s",
"r-rule": "规则",
"r-add-trigger": "添加触发器",
"r-add-action": "添加行动",
diff --git a/i18n/zh-TW.i18n.json b/i18n/zh-TW.i18n.json
index 7cb068a1..c917609e 100644
--- a/i18n/zh-TW.i18n.json
+++ b/i18n/zh-TW.i18n.json
@@ -567,6 +567,8 @@
"activity-added-label-card": "added label '%s'",
"activity-removed-label-card": "removed label '%s'",
"activity-delete-attach-card": "deleted an attachment",
+ "activity-set-customfield": "set custom field '%s' to '%s' in %s",
+ "activity-unset-customfield": "unset custom field '%s' in %s",
"r-rule": "Rule",
"r-add-trigger": "Add trigger",
"r-add-action": "Add action",
diff --git a/models/cards.js b/models/cards.js
index eef62be1..c3bae400 100644
--- a/models/cards.js
+++ b/models/cards.js
@@ -1412,7 +1412,7 @@ function cardCustomFields(userId, doc, fieldNames, modifier) {
// only individual changes are registered
if (dotNotation.length > 1) {
- const customFieldId = doc.customFields[dot_notation[1]]._id;
+ const customFieldId = doc.customFields[dotNotation[1]]._id;
const act = {
userId,
customFieldId,
diff --git a/models/import.js b/models/import.js
index 5cdf8dc1..343e1c24 100644
--- a/models/import.js
+++ b/models/import.js
@@ -3,10 +3,10 @@ import { WekanCreator } from './wekanCreator';
Meteor.methods({
importBoard(board, data, importSource, currentBoard) {
- //check(board, Object);
- //check(data, Object);
- //check(importSource, String);
- //check(currentBoard, Match.Maybe(String));
+ check(board, Object);
+ check(data, Object);
+ check(importSource, String);
+ check(currentBoard, Match.Maybe(String));
let creator;
switch (importSource) {
case 'trello':
diff --git a/models/wekanCreator.js b/models/wekanCreator.js
index 2d3ec5de..3a627424 100644
--- a/models/wekanCreator.js
+++ b/models/wekanCreator.js
@@ -298,6 +298,10 @@ export class WekanCreator {
cardToCreate.members = wekanMembers;
}
}
+ // set color
+ if (card.color) {
+ cardToCreate.color = card.color;
+ }
// insert card
const cardId = Cards.direct.insert(cardToCreate);
// keep track of Wekan id => Wekan id
@@ -484,6 +488,10 @@ export class WekanCreator {
title: swimlane.title,
sort: swimlane.sort ? swimlane.sort : swimlaneIndex,
};
+ // set color
+ if (swimlane.color) {
+ swimlaneToCreate.color = swimlane.color;
+ }
const swimlaneId = Swimlanes.direct.insert(swimlaneToCreate);
Swimlanes.direct.update(swimlaneId, {
$set: {
diff --git a/package.json b/package.json
index 27536dc8..77e8eba5 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "wekan",
- "version": "v2.43.0",
+ "version": "v2.44.0",
"description": "Open-Source kanban",
"private": true,
"scripts": {
diff --git a/releases/virtualbox/start-wekan.sh b/releases/virtualbox/start-wekan.sh
index 31a95728..9a948bac 100755
--- a/releases/virtualbox/start-wekan.sh
+++ b/releases/virtualbox/start-wekan.sh
@@ -25,6 +25,16 @@
# Wekan Export Board works when WITH_API='true'.
# If you disable Wekan API, Export Board does not work.
export WITH_API='true'
+ #---------------------------------------------------------------
+ # ==== PASSWORD BRUTE FORCE PROTECTION ====
+ #https://atmospherejs.com/lucasantoniassi/accounts-lockout
+ #Defaults below. Uncomment to change. wekan/server/accounts-lockout.js
+ #export ACCOUNTS_LOCKOUT_KNOWN_USERS_FAILURES_BEFORE=3
+ #export ACCOUNTS_LOCKOUT_KNOWN_USERS_PERIOD=60
+ #export ACCOUNTS_LOCKOUT_KNOWN_USERS_FAILURE_WINDOW=15
+ #export ACCOUNTS_LOCKOUT_UNKNOWN_USERS_FAILURES_BERORE=3
+ #export ACCOUNTS_LOCKOUT_UNKNOWN_USERS_LOCKOUT_PERIOD=60
+ #export ACCOUNTS_LOCKOUT_UNKNOWN_USERS_FAILURE_WINDOW=15
#---------------------------------------------
# CORS: Set Access-Control-Allow-Origin header. Example: *
#export CORS=*
diff --git a/sandstorm-pkgdef.capnp b/sandstorm-pkgdef.capnp
index 27155571..23171379 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 = 245,
+ appVersion = 246,
# Increment this for every release.
- appMarketingVersion = (defaultText = "2.43.0~2019-03-08"),
+ appMarketingVersion = (defaultText = "2.44.0~2019-03-11"),
# Human-readable presentation of the app version.
minUpgradableAppVersion = 0,
diff --git a/server/accounts-lockout.js b/server/accounts-lockout.js
new file mode 100644
index 00000000..a9b9e311
--- /dev/null
+++ b/server/accounts-lockout.js
@@ -0,0 +1,16 @@
+// https://atmospherejs.com/lucasantoniassi/accounts-lockout
+// server
+import { AccountsLockout } from 'meteor/lucasantoniassi:accounts-lockout';
+
+(new AccountsLockout({
+ knownUsers: {
+ failuresBeforeLockout: process.env.ACCOUNTS_LOCKOUT_KNOWN_USERS_FAILURES_BEFORE || 3,
+ lockoutPeriod: process.env.ACCOUNTS_LOCKOUT_KNOWN_USERS_PERIOD || 60,
+ failureWindow: process.env.ACCOUNTS_LOCKOUT_KNOWN_USERS_FAILURE_WINDOW || 15,
+ },
+ unknownUsers: {
+ failuresBeforeLockout: process.env.ACCOUNTS_LOCKOUT_UNKNOWN_USERS_FAILURES_BERORE || 3,
+ lockoutPeriod: process.env.ACCOUNTS_LOCKOUT_UNKNOWN_USERS_LOCKOUT_PERIOD || 60,
+ failureWindow: process.env.ACCOUNTS_LOCKOUT_UNKNOWN_USERS_FAILURE_WINDOW || 15,
+ },
+})).startup();
diff --git a/snap-src/bin/config b/snap-src/bin/config
index eecb7ba1..30e389c1 100755
--- a/snap-src/bin/config
+++ b/snap-src/bin/config
@@ -3,7 +3,7 @@
# All supported keys are defined here together with descriptions and default values
# list of supported keys
-keys="DEBUG MONGODB_BIND_UNIX_SOCKET MONGODB_BIND_IP MONGODB_PORT MAIL_URL MAIL_FROM ROOT_URL PORT DISABLE_MONGODB CADDY_ENABLED CADDY_BIND_PORT WITH_API EMAIL_NOTIFICATION_TIMEOUT CORS MATOMO_ADDRESS MATOMO_SITE_ID MATOMO_DO_NOT_TRACK MATOMO_WITH_USERNAME BROWSER_POLICY_ENABLED TRUSTED_URL WEBHOOKS_ATTRIBUTES OAUTH2_ENABLED OAUTH2_CLIENT_ID OAUTH2_SECRET OAUTH2_SERVER_URL OAUTH2_AUTH_ENDPOINT OAUTH2_USERINFO_ENDPOINT OAUTH2_TOKEN_ENDPOINT OAUTH2_ID_MAP OAUTH2_USERNAME_MAP OAUTH2_FULLNAME_MAP OAUTH2_EMAIL_MAP LDAP_ENABLE LDAP_PORT LDAP_HOST LDAP_BASEDN LDAP_LOGIN_FALLBACK LDAP_RECONNECT LDAP_TIMEOUT LDAP_IDLE_TIMEOUT LDAP_CONNECT_TIMEOUT LDAP_AUTHENTIFICATION LDAP_AUTHENTIFICATION_USERDN LDAP_AUTHENTIFICATION_PASSWORD LDAP_LOG_ENABLED LDAP_BACKGROUND_SYNC LDAP_BACKGROUND_SYNC_INTERVAL LDAP_BACKGROUND_SYNC_KEEP_EXISTANT_USERS_UPDATED LDAP_BACKGROUND_SYNC_IMPORT_NEW_USERS LDAP_ENCRYPTION LDAP_CA_CERT LDAP_REJECT_UNAUTHORIZED LDAP_USER_SEARCH_FILTER LDAP_USER_SEARCH_SCOPE LDAP_USER_SEARCH_FIELD LDAP_SEARCH_PAGE_SIZE LDAP_SEARCH_SIZE_LIMIT LDAP_GROUP_FILTER_ENABLE LDAP_GROUP_FILTER_OBJECTCLASS LDAP_GROUP_FILTER_GROUP_ID_ATTRIBUTE LDAP_GROUP_FILTER_GROUP_MEMBER_ATTRIBUTE LDAP_GROUP_FILTER_GROUP_MEMBER_FORMAT LDAP_GROUP_FILTER_GROUP_NAME LDAP_UNIQUE_IDENTIFIER_FIELD LDAP_UTF8_NAMES_SLUGIFY LDAP_USERNAME_FIELD LDAP_FULLNAME_FIELD LDAP_MERGE_EXISTING_USERS LDAP_SYNC_USER_DATA LDAP_SYNC_USER_DATA_FIELDMAP LDAP_SYNC_GROUP_ROLES LDAP_DEFAULT_DOMAIN LDAP_EMAIL_MATCH_ENABLE LDAP_EMAIL_MATCH_REQUIRE LDAP_EMAIL_MATCH_VERIFIED LDAP_EMAIL_FIELD LDAP_SYNC_ADMIN_STATUS LDAP_SYNC_ADMIN_GROUPS HEADER_LOGIN_ID HEADER_LOGIN_FIRSTNAME HEADER_LOGIN_LASTNAME HEADER_LOGIN_EMAIL LOGOUT_WITH_TIMER LOGOUT_IN LOGOUT_ON_HOURS LOGOUT_ON_MINUTES DEFAULT_AUTHENTICATION_METHOD"
+keys="DEBUG MONGODB_BIND_UNIX_SOCKET MONGODB_BIND_IP MONGODB_PORT MAIL_URL MAIL_FROM ROOT_URL PORT DISABLE_MONGODB CADDY_ENABLED CADDY_BIND_PORT WITH_API ACCOUNTS_LOCKOUT_KNOWN_USERS_FAILURES_BEFORE ACCOUNTS_LOCKOUT_KNOWN_USERS_PERIOD ACCOUNTS_LOCKOUT_KNOWN_USERS_FAILURE_WINDOW ACCOUNTS_LOCKOUT_UNKNOWN_USERS_FAILURES_BERORE ACCOUNTS_LOCKOUT_UNKNOWN_USERS_LOCKOUT_PERIOD ACCOUNTS_LOCKOUT_UNKNOWN_USERS_FAILURE_WINDOW EMAIL_NOTIFICATION_TIMEOUT CORS MATOMO_ADDRESS MATOMO_SITE_ID MATOMO_DO_NOT_TRACK MATOMO_WITH_USERNAME BROWSER_POLICY_ENABLED TRUSTED_URL WEBHOOKS_ATTRIBUTES OAUTH2_ENABLED OAUTH2_CLIENT_ID OAUTH2_SECRET OAUTH2_SERVER_URL OAUTH2_AUTH_ENDPOINT OAUTH2_USERINFO_ENDPOINT OAUTH2_TOKEN_ENDPOINT OAUTH2_ID_MAP OAUTH2_USERNAME_MAP OAUTH2_FULLNAME_MAP OAUTH2_EMAIL_MAP LDAP_ENABLE LDAP_PORT LDAP_HOST LDAP_BASEDN LDAP_LOGIN_FALLBACK LDAP_RECONNECT LDAP_TIMEOUT LDAP_IDLE_TIMEOUT LDAP_CONNECT_TIMEOUT LDAP_AUTHENTIFICATION LDAP_AUTHENTIFICATION_USERDN LDAP_AUTHENTIFICATION_PASSWORD LDAP_LOG_ENABLED LDAP_BACKGROUND_SYNC LDAP_BACKGROUND_SYNC_INTERVAL LDAP_BACKGROUND_SYNC_KEEP_EXISTANT_USERS_UPDATED LDAP_BACKGROUND_SYNC_IMPORT_NEW_USERS LDAP_ENCRYPTION LDAP_CA_CERT LDAP_REJECT_UNAUTHORIZED LDAP_USER_SEARCH_FILTER LDAP_USER_SEARCH_SCOPE LDAP_USER_SEARCH_FIELD LDAP_SEARCH_PAGE_SIZE LDAP_SEARCH_SIZE_LIMIT LDAP_GROUP_FILTER_ENABLE LDAP_GROUP_FILTER_OBJECTCLASS LDAP_GROUP_FILTER_GROUP_ID_ATTRIBUTE LDAP_GROUP_FILTER_GROUP_MEMBER_ATTRIBUTE LDAP_GROUP_FILTER_GROUP_MEMBER_FORMAT LDAP_GROUP_FILTER_GROUP_NAME LDAP_UNIQUE_IDENTIFIER_FIELD LDAP_UTF8_NAMES_SLUGIFY LDAP_USERNAME_FIELD LDAP_FULLNAME_FIELD LDAP_MERGE_EXISTING_USERS LDAP_SYNC_USER_DATA LDAP_SYNC_USER_DATA_FIELDMAP LDAP_SYNC_GROUP_ROLES LDAP_DEFAULT_DOMAIN LDAP_EMAIL_MATCH_ENABLE LDAP_EMAIL_MATCH_REQUIRE LDAP_EMAIL_MATCH_VERIFIED LDAP_EMAIL_FIELD LDAP_SYNC_ADMIN_STATUS LDAP_SYNC_ADMIN_GROUPS HEADER_LOGIN_ID HEADER_LOGIN_FIRSTNAME HEADER_LOGIN_LASTNAME HEADER_LOGIN_EMAIL LOGOUT_WITH_TIMER LOGOUT_IN LOGOUT_ON_HOURS LOGOUT_ON_MINUTES DEFAULT_AUTHENTICATION_METHOD"
# default values
DESCRIPTION_DEBUG="Debug OIDC OAuth2 etc. Example: sudo snap set wekan debug='true'"
@@ -56,6 +56,30 @@ DESCRIPTION_WITH_API="Enable/disable the api of wekan"
DEFAULT_WITH_API="true"
KEY_WITH_API="with-api"
+DESCRIPTION_ACCOUNTS_LOCKOUT_KNOWN_USERS_FAILURES_BEFORE="Accounts lockout known users failures before, greater than 0. Default: 3"
+DEFAULT_ACCOUNTS_LOCKOUT_KNOWN_USERS_FAILURES_BEFORE="3"
+KEY_ACCOUNTS_LOCKOUT_KNOWN_USERS_FAILURES_BEFORE="accounts-lockout-known-users-failures-before"
+
+DESCRIPTION_ACCOUNTS_LOCKOUT_KNOWN_USERS_PERIOD="Accounts lockout know users period, in seconds. Default: 60"
+DEFAULT_ACCOUNTS_LOCKOUT_KNOWN_USERS_PERIOD="60"
+KEY_ACCOUNTS_LOCKOUT_KNOWN_USERS_PERIOD="accounts-lockout-known-users-period"
+
+DESCRIPTION_ACCOUNTS_LOCKOUT_KNOWN_USERS_FAILURE_WINDOW="Accounts lockout unknown failure window, in seconds. Default: 15"
+DEFAULT_ACCOUNTS_LOCKOUT_KNOWN_USERS_FAILURE_WINDOW="15"
+KEY_ACCOUNTS_LOCKOUT_KNOWN_USERS_FAILURE_WINDOW="accounts-lockout-known-users-failure-window"
+
+DESCRIPTION_ACCOUNTS_LOCKOUT_UNKNOWN_USERS_FAILURES_BERORE="Accounts lockout unknown users failures before, greater than 0. Default: 3"
+DEFAULT_ACCOUNTS_LOCKOUT_UNKNOWN_USERS_FAILURES_BERORE="3"
+KEY_ACCOUNTS_LOCKOUT_UNKNOWN_USERS_FAILURES_BERORE="accounts-lockout-unknown-users-failures-before"
+
+DESCRIPTION_ACCOUNTS_LOCKOUT_UNKNOWN_USERS_LOCKOUT_PERIOD="Accounts lockout unknown users lockout period, in seconds. Default: 60"
+DEFAULT_ACCOUNTS_LOCKOUT_UNKNOWN_USERS_LOCKOUT_PERIOD="60"
+KEY_ACCOUNTS_LOCKOUT_UNKNOWN_USERS_LOCKOUT_PERIOD="accounts-lockout-unknown-users-lockout-period"
+
+DESCRIPTION_ACCOUNTS_LOCKOUT_UNKNOWN_USERS_FAILURE_WINDOW="Accounts lockout unknown users failure window, in seconds. Default: 15"
+DEFAULT_ACCOUNTS_LOCKOUT_UNKNOWN_USERS_FAILURE_WINDOW="15"
+KEY_ACCOUNTS_LOCKOUT_UNKNOWN_USERS_FAILURE_WINDOW="accounts-lockout-unknown-users-failure-window"
+
DESCRIPTION_EMAIL_NOTIFICATION_TIMEOUT="Email notification timeout, ms. Default: 30000 (=30s)."
DEFAULT_EMAIL_NOTIFICATION_TIMEOUT="30000"
KEY_EMAIL_NOTIFICATION_TIMEOUT="email-notification-timeout"
diff --git a/snap-src/bin/wekan-help b/snap-src/bin/wekan-help
index 766a7df7..55e4037b 100755
--- a/snap-src/bin/wekan-help
+++ b/snap-src/bin/wekan-help
@@ -40,6 +40,24 @@ echo -e "\t$ snap set $SNAP_NAME with-api='true'"
echo -e "\t-Disable the API:"
echo -e "\t$ snap set $SNAP_NAME with-api='false'"
echo -e "\n"
+echo -e "Accounts lockout known users failures before, greater than 0. Default: 3"
+echo -e "\t$ snap set $SNAP_NAME accounts-lockout-known-users-failures-before='3'"
+echo -e "\n"
+echo -e "Accounts lockout know users period, in seconds. Default: 60"
+echo -e "\t$ snap set $SNAP_NAME accounts-lockout-known-users-period='60'"
+echo -e "\n"
+echo -e "Accounts lockout unknown failure window, in seconds. Default: 15"
+echo -e "\t$ snap set $SNAP_NAME accounts-lockout-known-users-failure-window='15'"
+echo -e "\n"
+echo -e "Accounts lockout unknown users failures before, greater than 0. Default: 3"
+echo -e "\t$ snap set $SNAP_NAME accounts-lockout-unknown-users-failures-before='3'"
+echo -e "\n"
+echo -e "Accounts lockout unknown users lockout period, in seconds. Default: 60"
+echo -e "\t$ snap set $SNAP_NAME accounts-lockout-unknown-users-lockout-period='60'"
+echo -e "\n"
+echo -e "Accounts lockout unknown users failure window, in seconds. Default: 15"
+echo -e "\t$ snap set $SNAP_NAME accounts-lockout-unknown-users-failure-window='15'"
+echo -e "\n"
echo -e "To enable the Email Notification Timeout of wekan in ms, default 30000 (=30s):"
echo -e "\t$ snap set $SNAP_NAME email-notification-timeout='10000'"
echo -e "\t-Disable the Email Notification Timeout of Wekan:"
diff --git a/start-wekan.bat b/start-wekan.bat
index 001700f3..6cf481c3 100755
--- a/start-wekan.bat
+++ b/start-wekan.bat
@@ -14,6 +14,16 @@ SET PORT=2000
REM # If you disable Wekan API with false, Export Board does not work.
SET WITH_API=true
+REM # ==== PASSWORD BRUTE FORCE PROTECTION ====
+REM #https://atmospherejs.com/lucasantoniassi/accounts-lockout
+REM #Defaults below. Uncomment to change. wekan/server/accounts-lockout.js
+REM SET ACCOUNTS_LOCKOUT_KNOWN_USERS_FAILURES_BEFORE=3
+REM SET ACCOUNTS_LOCKOUT_KNOWN_USERS_PERIOD=60
+REM SET ACCOUNTS_LOCKOUT_KNOWN_USERS_FAILURE_WINDOW=15
+REM SET ACCOUNTS_LOCKOUT_UNKNOWN_USERS_FAILURES_BERORE=3
+REM SET ACCOUNTS_LOCKOUT_UNKNOWN_USERS_LOCKOUT_PERIOD=60
+REM SET ACCOUNTS_LOCKOUT_UNKNOWN_USERS_FAILURE_WINDOW=15
+
REM # Optional: Integration with Matomo https://matomo.org that is installed to your server
REM # The address of the server where Matomo is hosted.
REM # example: - MATOMO_ADDRESS=https://example.com/matomo
diff --git a/start-wekan.sh b/start-wekan.sh
index 184be575..a791944e 100755
--- a/start-wekan.sh
+++ b/start-wekan.sh
@@ -43,6 +43,16 @@ function wekan_repo_check(){
# Wekan Export Board works when WITH_API=true.
# If you disable Wekan API with false, Export Board does not work.
export WITH_API='true'
+ #---------------------------------------------------------------
+ # ==== PASSWORD BRUTE FORCE PROTECTION ====
+ #https://atmospherejs.com/lucasantoniassi/accounts-lockout
+ #Defaults below. Uncomment to change. wekan/server/accounts-lockout.js
+ #export ACCOUNTS_LOCKOUT_KNOWN_USERS_FAILURES_BEFORE=3
+ #export ACCOUNTS_LOCKOUT_KNOWN_USERS_PERIOD=60
+ #export ACCOUNTS_LOCKOUT_KNOWN_USERS_FAILURE_WINDOW=15
+ #export ACCOUNTS_LOCKOUT_UNKNOWN_USERS_FAILURES_BERORE=3
+ #export ACCOUNTS_LOCKOUT_UNKNOWN_USERS_LOCKOUT_PERIOD=60
+ #export ACCOUNTS_LOCKOUT_UNKNOWN_USERS_FAILURE_WINDOW=15
#---------------------------------------------
# CORS: Set Access-Control-Allow-Origin header. Example: *
#export CORS=*