diff options
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 @@ -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=* |