Explorar o código

Merge branch 'devel' of github.com:wekan/wekan into devel

Gavin Lilly %!s(int64=6) %!d(string=hai) anos
pai
achega
c1ea3f49ca
Modificáronse 72 ficheiros con 553 adicións e 204 borrados
  1. 1 1
      .eslintrc.json
  2. 1 1
      .meteor/versions
  3. 53 0
      CHANGELOG.md
  4. 2 0
      Dockerfile
  5. 1 1
      Stackerfile.yml
  6. 72 4
      client/components/boards/boardBody.js
  7. 2 4
      client/components/main/layouts.jade
  8. 72 60
      client/components/main/layouts.js
  9. 19 0
      client/components/settings/settingBody.jade
  10. 35 5
      client/components/settings/settingBody.js
  11. 3 0
      client/components/swimlanes/swimlanes.styl
  12. 3 0
      docker-compose.yml
  13. 3 1
      i18n/ar.i18n.json
  14. 3 1
      i18n/bg.i18n.json
  15. 3 1
      i18n/br.i18n.json
  16. 3 1
      i18n/ca.i18n.json
  17. 3 1
      i18n/cs.i18n.json
  18. 3 1
      i18n/da.i18n.json
  19. 3 1
      i18n/de.i18n.json
  20. 3 1
      i18n/el.i18n.json
  21. 3 1
      i18n/en-GB.i18n.json
  22. 3 1
      i18n/en.i18n.json
  23. 3 1
      i18n/eo.i18n.json
  24. 3 1
      i18n/es-AR.i18n.json
  25. 6 4
      i18n/es.i18n.json
  26. 3 1
      i18n/eu.i18n.json
  27. 3 1
      i18n/fa.i18n.json
  28. 3 1
      i18n/fi.i18n.json
  29. 3 1
      i18n/fr.i18n.json
  30. 3 1
      i18n/gl.i18n.json
  31. 11 9
      i18n/he.i18n.json
  32. 3 1
      i18n/hi.i18n.json
  33. 3 1
      i18n/hu.i18n.json
  34. 3 1
      i18n/hy.i18n.json
  35. 3 1
      i18n/id.i18n.json
  36. 3 1
      i18n/ig.i18n.json
  37. 3 1
      i18n/it.i18n.json
  38. 3 1
      i18n/ja.i18n.json
  39. 3 1
      i18n/ka.i18n.json
  40. 3 1
      i18n/km.i18n.json
  41. 3 1
      i18n/ko.i18n.json
  42. 3 1
      i18n/lv.i18n.json
  43. 3 1
      i18n/mk.i18n.json
  44. 3 1
      i18n/mn.i18n.json
  45. 3 1
      i18n/nb.i18n.json
  46. 3 1
      i18n/nl.i18n.json
  47. 56 54
      i18n/pl.i18n.json
  48. 9 7
      i18n/pt-BR.i18n.json
  49. 3 1
      i18n/pt.i18n.json
  50. 3 1
      i18n/ro.i18n.json
  51. 3 1
      i18n/ru.i18n.json
  52. 3 1
      i18n/sr.i18n.json
  53. 3 1
      i18n/sv.i18n.json
  54. 3 1
      i18n/sw.i18n.json
  55. 3 1
      i18n/ta.i18n.json
  56. 3 1
      i18n/th.i18n.json
  57. 3 1
      i18n/tr.i18n.json
  58. 3 1
      i18n/uk.i18n.json
  59. 3 1
      i18n/vi.i18n.json
  60. 3 1
      i18n/zh-CN.i18n.json
  61. 3 1
      i18n/zh-TW.i18n.json
  62. 10 1
      models/settings.js
  63. 1 1
      package.json
  64. 3 0
      releases/virtualbox/start-wekan.sh
  65. 2 2
      sandstorm-pkgdef.capnp
  66. 24 0
      server/migrations.js
  67. 11 1
      server/publications/settings.js
  68. 5 2
      snap-src/bin/config
  69. 1 1
      snap-src/bin/mongodb-control
  70. 6 0
      snap-src/bin/wekan-help
  71. 6 1
      start-wekan.bat
  72. 3 0
      start-wekan.sh

+ 1 - 1
.eslintrc.json

@@ -6,7 +6,7 @@
     "browser": true
     "browser": true
   },
   },
   "parserOptions": {
   "parserOptions": {
-    "ecmaVersion": 6,
+    "ecmaVersion": 2017,
     "sourceType": "module",
     "sourceType": "module",
     "ecmaFeatures": {
     "ecmaFeatures": {
       "experimentalObjectRestSpread": true
       "experimentalObjectRestSpread": true

+ 1 - 1
.meteor/versions

@@ -145,7 +145,7 @@ retry@1.0.9
 routepolicy@1.0.12
 routepolicy@1.0.12
 rzymek:fullcalendar@3.8.0
 rzymek:fullcalendar@3.8.0
 salleman:accounts-oidc@1.0.10
 salleman:accounts-oidc@1.0.10
-salleman:oidc@1.0.10
+salleman:oidc@1.0.11
 service-configuration@1.0.11
 service-configuration@1.0.11
 session@1.1.7
 session@1.1.7
 sha@1.0.9
 sha@1.0.9

+ 53 - 0
CHANGELOG.md

@@ -1,3 +1,56 @@
+# v2.20 2019-02-11 Wekan release
+
+This release adds the following new features:
+
+- [Add OIDC / OAuth2 optional setting DEBUG=true to salleman-oidc and Dockerfile](https://github.com/wekan/wekan/pull/2181).
+  Thanks to danpatdav.
+- [Add OIDC / OAuth2 optional setting DEBUG=true to docker-compose.yml/Snap/Source](https://github.com/wekan/wekan/commits/8e02170dd1d5a638ba47dcca910e6eecbfd03baf).
+  Thanks to xet7.
+
+Thanks to above GitHub users for their contributions and translators for their translations.
+
+# v2.19 2019-02-09 Wekan release
+
+This release removes the following new features:
+
+- [Remove oplog from snap](https://github.com/wekan/wekan/commit/f1bd36a3b87f97927dfe60572646a457e1f7ef66). Need to think how to do it properly.
+
+Thanks to GitHub user xet7 for conrtibutions.
+
+# v2.18 2019-02-08 Wekan release
+
+This release adds the folloging new features:
+
+- [Improve Authentication: Admin Panel / Layout / Set Default Authentication / Password/LDAP](https://github.com/wekan/wekan/pull/2172). Thanks to Akuket.
+- [Add oplog to snap mongodb](https://github.com/wekan/wekan/commit/79ffb7d50202471c7b7f297286f13e66ce30922e). Thanks to xet7.
+
+and fixes the following bugs with Apache I-CLA, thanks to bentiss:
+
+- [Fix swimlanes sorting](https://github.com/wekan/wekan/pull/2174)
+  since "[Properly fix horizontal rendering on Chrome and Firefox](https://github.com/wekan/wekan/commit/7cc185ac)".
+  The rendering of the new design of the swimlanes was correct, but this
+  commit broke the reordering capability. Having the swimlane header at
+  the same level than the lists of cards makes the whole sortable
+  pattern fail.
+  - 2 solutions:
+    - revert to only have 1 div per swimlane. But this introduces [the firefox
+      bug mentioned](https://github.com/wekan/wekan/commit/7cc185ac), so not ideal
+    - force the sortable pattern to do what we want.
+  - To force the sortable pattern, we need:
+    - add in the helper a clone of the list of cards (to not just move the
+      header)
+    - make sure the placeholder never get placed between the header and the
+      list of cards in a swimlane
+    - fix the finding of the next and previous list of cards. 
+    For all of this to be successful, we need to resize the swimlanes to a
+    known value. This can lead to some visual jumps with scrolling when you
+    drag or drop the swimlanea. I tried to remedy that by computing the new
+    scroll value. Still not ideal however, as there are still some jumps when
+    dropping.    
+    Fixes [#2159](https://github.com/wekan/wekan/issues/2159).
+
+Thanks to above GitHub users and translators for contributions.
+
 # v2.17 2019-02-04 Wekan release
 # v2.17 2019-02-04 Wekan release
 
 
 This release fixes the following bugs:
 This release fixes the following bugs:

+ 2 - 0
Dockerfile

@@ -2,6 +2,7 @@ FROM debian:buster-slim
 LABEL maintainer="wekan"
 LABEL maintainer="wekan"
 
 
 # Declare Arguments
 # Declare Arguments
+ARG DEBUG
 ARG NODE_VERSION
 ARG NODE_VERSION
 ARG METEOR_RELEASE
 ARG METEOR_RELEASE
 ARG METEOR_EDGE
 ARG METEOR_EDGE
@@ -76,6 +77,7 @@ ARG DEFAULT_AUTHENTICATION_METHOD
 # DOES NOT WORK: paxctl fix for alpine linux: https://github.com/wekan/wekan/issues/1303
 # DOES NOT WORK: paxctl fix for alpine linux: https://github.com/wekan/wekan/issues/1303
 # ENV BUILD_DEPS="paxctl"
 # ENV BUILD_DEPS="paxctl"
 ENV BUILD_DEPS="apt-utils bsdtar gnupg gosu wget curl bzip2 build-essential python python3 python3-distutils git ca-certificates gcc-7" \
 ENV BUILD_DEPS="apt-utils bsdtar gnupg gosu wget curl bzip2 build-essential python python3 python3-distutils git ca-certificates gcc-7" \
+    DEBUG=false \
     NODE_VERSION=v8.15.0 \
     NODE_VERSION=v8.15.0 \
     METEOR_RELEASE=1.6.0.1 \
     METEOR_RELEASE=1.6.0.1 \
     USE_EDGE=false \
     USE_EDGE=false \

+ 1 - 1
Stackerfile.yml

@@ -1,5 +1,5 @@
 appId: wekan-public/apps/77b94f60-dec9-0136-304e-16ff53095928
 appId: wekan-public/apps/77b94f60-dec9-0136-304e-16ff53095928
-appVersion: "v2.17.0"
+appVersion: "v2.20.0"
 files:
 files:
   userUploads:
   userUploads:
     - README.md
     - README.md

+ 72 - 4
client/components/boards/boardBody.js

@@ -1,5 +1,6 @@
 const subManager = new SubsManager();
 const subManager = new SubsManager();
 const { calculateIndex, enableClickOnTouch } = Utils;
 const { calculateIndex, enableClickOnTouch } = Utils;
+const swimlaneWhileSortingHeight = 150;
 
 
 BlazeComponent.extendComponent({
 BlazeComponent.extendComponent({
   onCreated() {
   onCreated() {
@@ -74,21 +75,64 @@ BlazeComponent.extendComponent({
     $swimlanesDom.sortable({
     $swimlanesDom.sortable({
       tolerance: 'pointer',
       tolerance: 'pointer',
       appendTo: '.board-canvas',
       appendTo: '.board-canvas',
-      helper: 'clone',
+      helper(evt, item) {
+        const helper = $(`<div class="swimlane"
+                               style="flex-direction: column;
+                                      height: ${swimlaneWhileSortingHeight}px;
+                                      width: $(boardComponent.width)px;
+                                      overflow: hidden;"/>`);
+        helper.append(item.clone());
+        // Also grab the list of lists of cards
+        const list = item.next();
+        helper.append(list.clone());
+        return helper;
+      },
       handle: '.js-swimlane-header',
       handle: '.js-swimlane-header',
-      items: '.js-swimlane:not(.placeholder)',
+      items: '.swimlane:not(.placeholder)',
       placeholder: 'swimlane placeholder',
       placeholder: 'swimlane placeholder',
       distance: 7,
       distance: 7,
       start(evt, ui) {
       start(evt, ui) {
+        const listDom = ui.placeholder.next('.js-swimlane');
+        const parentOffset = ui.item.parent().offset();
+
         ui.placeholder.height(ui.helper.height());
         ui.placeholder.height(ui.helper.height());
         EscapeActions.executeUpTo('popup-close');
         EscapeActions.executeUpTo('popup-close');
+        listDom.addClass('moving-swimlane');
         boardComponent.setIsDragging(true);
         boardComponent.setIsDragging(true);
+
+        ui.placeholder.insertAfter(ui.placeholder.next());
+        boardComponent.origPlaceholderIndex = ui.placeholder.index();
+
+        // resize all swimlanes + headers to be a total of 150 px per row
+        // this could be achieved by setIsDragging(true) but we want immediate
+        // result
+        ui.item.siblings('.js-swimlane').css('height', `${swimlaneWhileSortingHeight - 26}px`);
+
+        // set the new scroll height after the resize and insertion of
+        // the placeholder. We want the element under the cursor to stay
+        // at the same place on the screen
+        ui.item.parent().get(0).scrollTop = ui.placeholder.get(0).offsetTop + parentOffset.top - evt.pageY;
+      },
+      beforeStop(evt, ui) {
+        const parentOffset = ui.item.parent().offset();
+        const siblings = ui.item.siblings('.js-swimlane');
+        siblings.css('height', '');
+
+        // compute the new scroll height after the resize and removal of
+        // the placeholder
+        const scrollTop = ui.placeholder.get(0).offsetTop + parentOffset.top - evt.pageY;
+
+        // then reset the original view of the swimlane
+        siblings.removeClass('moving-swimlane');
+
+        // and apply the computed scrollheight
+        ui.item.parent().get(0).scrollTop = scrollTop;
       },
       },
       stop(evt, ui) {
       stop(evt, ui) {
         // To attribute the new index number, we need to get the DOM element
         // To attribute the new index number, we need to get the DOM element
         // of the previous and the following card -- if any.
         // of the previous and the following card -- if any.
-        const prevSwimlaneDom = ui.item.prev('.js-swimlane').get(0);
-        const nextSwimlaneDom = ui.item.next('.js-swimlane').get(0);
+        const prevSwimlaneDom = ui.item.prevAll('.js-swimlane').get(0);
+        const nextSwimlaneDom = ui.item.nextAll('.js-swimlane').get(0);
         const sortIndex = calculateIndex(prevSwimlaneDom, nextSwimlaneDom, 1);
         const sortIndex = calculateIndex(prevSwimlaneDom, nextSwimlaneDom, 1);
 
 
         $swimlanesDom.sortable('cancel');
         $swimlanesDom.sortable('cancel');
@@ -103,6 +147,30 @@ BlazeComponent.extendComponent({
 
 
         boardComponent.setIsDragging(false);
         boardComponent.setIsDragging(false);
       },
       },
+      sort(evt, ui) {
+        // get the mouse position in the sortable
+        const parentOffset = ui.item.parent().offset();
+        const cursorY = evt.pageY - parentOffset.top + ui.item.parent().scrollTop();
+
+        // compute the intended index of the placeholder (we need to skip the
+        // slots between the headers and the list of cards)
+        const newplaceholderIndex = Math.floor(cursorY / swimlaneWhileSortingHeight);
+        let destPlaceholderIndex = (newplaceholderIndex + 1) * 2;
+
+        // if we are scrolling far away from the bottom of the list
+        if (destPlaceholderIndex >= ui.item.parent().get(0).childElementCount) {
+          destPlaceholderIndex = ui.item.parent().get(0).childElementCount - 1;
+        }
+
+        // update the placeholder position in the DOM tree
+        if (destPlaceholderIndex !== ui.placeholder.index()) {
+          if (destPlaceholderIndex < boardComponent.origPlaceholderIndex) {
+            ui.placeholder.insertBefore(ui.placeholder.siblings().slice(destPlaceholderIndex - 2, destPlaceholderIndex - 1));
+          } else {
+            ui.placeholder.insertAfter(ui.placeholder.siblings().slice(destPlaceholderIndex - 1, destPlaceholderIndex));
+          }
+        }
+      },
     });
     });
 
 
     // ugly touch event hotfix
     // ugly touch event hotfix

+ 2 - 4
client/components/main/layouts.jade

@@ -23,10 +23,8 @@ template(name="userFormsLayout")
         br
         br
     section.auth-dialog
     section.auth-dialog
       +Template.dynamic(template=content)
       +Template.dynamic(template=content)
-      +connectionMethod
-      if isCas
-        .at-form
-          button#cas(class='at-btn submit' type='submit') {{casSignInLabel}}
+      if currentSetting.displayAuthenticationMethod
+        +connectionMethod
       div.at-form-lang
       div.at-form-lang
         select.select-lang.js-userform-set-language
         select.select-lang.js-userform-set-language
           each languages
           each languages

+ 72 - 60
client/components/main/layouts.js

@@ -20,13 +20,19 @@ const validator = {
   },
   },
 };
 };
 
 
-Template.userFormsLayout.onCreated(() => {
-  Meteor.subscribe('setting');
-
+Template.userFormsLayout.onCreated(function() {
+  const instance = this;
+  instance.currentSetting = new ReactiveVar();
+
+  Meteor.subscribe('setting', {
+    onReady() {
+      instance.currentSetting.set(Settings.findOne());
+      return this.stop();
+    },
+  });
 });
 });
 
 
 Template.userFormsLayout.onRendered(() => {
 Template.userFormsLayout.onRendered(() => {
-
   AccountsTemplates.state.form.keys = new Proxy(AccountsTemplates.state.form.keys, validator);
   AccountsTemplates.state.form.keys = new Proxy(AccountsTemplates.state.form.keys, validator);
 
 
   const i18nTag = navigator.language;
   const i18nTag = navigator.language;
@@ -37,12 +43,10 @@ Template.userFormsLayout.onRendered(() => {
 });
 });
 
 
 Template.userFormsLayout.helpers({
 Template.userFormsLayout.helpers({
-
   currentSetting() {
   currentSetting() {
-    return Settings.findOne();
+    return Template.instance().currentSetting.get();
   },
   },
 
 
-
   afterBodyStart() {
   afterBodyStart() {
     return currentSetting.customHTMLafterBodyStart;
     return currentSetting.customHTMLafterBodyStart;
   },
   },
@@ -75,17 +79,6 @@ Template.userFormsLayout.helpers({
     const curLang = T9n.getLanguage() || 'en';
     const curLang = T9n.getLanguage() || 'en';
     return t9nTag === curLang;
     return t9nTag === curLang;
   },
   },
-/*
-  isCas() {
-    return Meteor.settings.public &&
-      Meteor.settings.public.cas &&
-      Meteor.settings.public.cas.loginUrl;
-  },
-
-  casSignInLabel() {
-    return TAPi18n.__('casSignIn', {}, T9n.getLanguage() || 'en');
-  },
-*/
 });
 });
 
 
 Template.userFormsLayout.events({
 Template.userFormsLayout.events({
@@ -94,55 +87,74 @@ Template.userFormsLayout.events({
     T9n.setLanguage(i18nTagToT9n(i18nTag));
     T9n.setLanguage(i18nTagToT9n(i18nTag));
     evt.preventDefault();
     evt.preventDefault();
   },
   },
-  'click button#cas'() {
+  'click #at-btn'(event, instance) {
+    if (FlowRouter.getRouteName() === 'atSignIn') {
+      authentication(event, instance);
+    }
+  },
+});
+
+Template.defaultLayout.events({
+  'click .js-close-modal': () => {
+    Modal.close();
+  },
+});
+
+async function authentication(event, instance) {
+  const match = $('#at-field-username_and_email').val();
+  const password = $('#at-field-password').val();
+
+  if (!match || !password) return;
+
+  const result = await getAuthenticationMethod(instance.currentSetting.get(), match);
+
+  if (result === 'password') return;
+
+  // Stop submit #at-pwd-form
+  event.preventDefault();
+  event.stopImmediatePropagation();
+
+  switch (result) {
+  case 'ldap':
+    Meteor.loginWithLDAP(match, password, function() {
+      FlowRouter.go('/');
+    });
+    break;
+
+  case 'cas':
     Meteor.loginWithCas(function() {
     Meteor.loginWithCas(function() {
-      if (FlowRouter.getRouteName() === 'atSignIn') {
-        FlowRouter.go('/');
-      }
+      FlowRouter.go('/');
     });
     });
-  },
-  'click #at-btn'(event) {
-    /* All authentication method can be managed/called here.
-       !! DON'T FORGET to correctly fill the fields of the user during its creation if necessary authenticationMethod : String !!
-    */
-    const authenticationMethodSelected = $('.select-authentication').val();
-    // Local account
-    if (authenticationMethodSelected === 'password') {
-      return;
-    }
+    break;
 
 
-    // Stop submit #at-pwd-form
-    event.preventDefault();
-    event.stopImmediatePropagation();
+  default:
+    break;
+  }
+}
 
 
-    const email = $('#at-field-username_and_email').val();
-    const password = $('#at-field-password').val();
+function getAuthenticationMethod({displayAuthenticationMethod, defaultAuthenticationMethod}, match) {
+  if (displayAuthenticationMethod) {
+    return $('.select-authentication').val();
+  }
+  return getUserAuthenticationMethod(defaultAuthenticationMethod, match);
+}
 
 
-    // Ldap account
-    if (authenticationMethodSelected === 'ldap') {
-      // Check if the user can use the ldap connection
-      Meteor.subscribe('user-authenticationMethod', email, {
+function getUserAuthenticationMethod(defaultAuthenticationMethod, match) {
+  return new Promise((resolve) => {
+    try {
+      Meteor.subscribe('user-authenticationMethod', match, {
         onReady() {
         onReady() {
           const user = Users.findOne();
           const user = Users.findOne();
-          if (user === undefined || user.authenticationMethod === 'ldap') {
-            // Use the ldap connection package
-            Meteor.loginWithLDAP(email, password, function(error) {
-              if (!error) {
-                // Connection
-                return FlowRouter.go('/');
-              }
-              return error;
-            });
-          }
-          return this.stop();
+
+          const authenticationMethod = user
+            ? user.authenticationMethod
+            : defaultAuthenticationMethod;
+
+          resolve(authenticationMethod);
         },
         },
       });
       });
+    } catch(error) {
+      resolve(defaultAuthenticationMethod);
     }
     }
-  },
-});
-
-Template.defaultLayout.events({
-  'click .js-close-modal': () => {
-    Modal.close();
-  },
-});
+  });
+}

+ 19 - 0
client/components/settings/settingBody.jade

@@ -141,6 +141,16 @@ template(name='layoutSettings')
         span {{_ 'yes'}}
         span {{_ 'yes'}}
         input.form-control#hide-logo(type="radio" name="hideLogo" value="false" checked="{{#unless currentSetting.hideLogo}}checked{{/unless}}")
         input.form-control#hide-logo(type="radio" name="hideLogo" value="false" checked="{{#unless currentSetting.hideLogo}}checked{{/unless}}")
         span {{_ 'no'}}
         span {{_ 'no'}}
+    li.layout-form
+      .title {{_ 'display-authentication-method'}}
+      .form-group.flex
+        input.form-control#display-authentication-method(type="radio" name="displayAuthenticationMethod" value="true" checked="{{#if currentSetting.displayAuthenticationMethod}}checked{{/if}}")
+        span {{_ 'yes'}}
+        input.form-control#display-authentication-method(type="radio" name="displayAuthenticationMethod" value="false" checked="{{#unless currentSetting.displayAuthenticationMethod}}checked{{/unless}}")
+        span {{_ 'no'}}
+    li.layout-form
+      .title {{_ 'default-authentication-method'}}
+      +selectAuthenticationMethod(authenticationMethod=currentSetting.defaultAuthenticationMethod)
     li.layout-form
     li.layout-form
       .title {{_ 'custom-product-name'}}
       .title {{_ 'custom-product-name'}}
       .form-group
       .form-group
@@ -153,3 +163,12 @@ template(name='layoutSettings')
       textarea#customHTMLbeforeBodyEnd.form-control= currentSetting.customHTMLbeforeBodyEnd
       textarea#customHTMLbeforeBodyEnd.form-control= currentSetting.customHTMLbeforeBodyEnd
     li
     li
       button.js-save-layout.primary {{_ 'save'}}
       button.js-save-layout.primary {{_ 'save'}}
+
+
+template(name='selectAuthenticationMethod')
+  select#defaultAuthenticationMethod
+    each authentications
+      if isSelected value
+        option(value="{{value}}" selected) {{_ value}}
+      else
+        option(value="{{value}}") {{_ value}}

+ 35 - 5
client/components/settings/settingBody.js

@@ -62,6 +62,9 @@ BlazeComponent.extendComponent({
   toggleHideLogo() {
   toggleHideLogo() {
     $('#hide-logo').toggleClass('is-checked');
     $('#hide-logo').toggleClass('is-checked');
   },
   },
+  toggleDisplayAuthenticationMethod() {
+    $('#display-authentication-method').toggleClass('is-checked');
+  },
   switchMenu(event) {
   switchMenu(event) {
     const target = $(event.target);
     const target = $(event.target);
     if (!target.hasClass('active')) {
     if (!target.hasClass('active')) {
@@ -140,17 +143,20 @@ BlazeComponent.extendComponent({
 
 
     const productName = $('#product-name').val().trim();
     const productName = $('#product-name').val().trim();
     const hideLogoChange = ($('input[name=hideLogo]:checked').val() === 'true');
     const hideLogoChange = ($('input[name=hideLogo]:checked').val() === 'true');
+    const displayAuthenticationMethod = ($('input[name=displayAuthenticationMethod]:checked').val() === 'true');
+    const defaultAuthenticationMethod = $('#defaultAuthenticationMethod').val();
     const customHTMLafterBodyStart = $('#customHTMLafterBodyStart').val().trim();
     const customHTMLafterBodyStart = $('#customHTMLafterBodyStart').val().trim();
     const customHTMLbeforeBodyEnd = $('#customHTMLbeforeBodyEnd').val().trim();
     const customHTMLbeforeBodyEnd = $('#customHTMLbeforeBodyEnd').val().trim();
 
 
     try {
     try {
-
       Settings.update(Settings.findOne()._id, {
       Settings.update(Settings.findOne()._id, {
         $set: {
         $set: {
           productName,
           productName,
           hideLogo: hideLogoChange,
           hideLogo: hideLogoChange,
           customHTMLafterBodyStart,
           customHTMLafterBodyStart,
           customHTMLbeforeBodyEnd,
           customHTMLbeforeBodyEnd,
+          displayAuthenticationMethod,
+          defaultAuthenticationMethod,
         },
         },
       });
       });
     } catch (e) {
     } catch (e) {
@@ -165,17 +171,14 @@ BlazeComponent.extendComponent({
 
 
   sendSMTPTestEmail() {
   sendSMTPTestEmail() {
     Meteor.call('sendSMTPTestEmail', (err, ret) => {
     Meteor.call('sendSMTPTestEmail', (err, ret) => {
-      if (!err && ret) { /* eslint-disable no-console */
+      if (!err && ret) {
         const message = `${TAPi18n.__(ret.message)}: ${ret.email}`;
         const message = `${TAPi18n.__(ret.message)}: ${ret.email}`;
-        console.log(message);
         alert(message);
         alert(message);
       } else {
       } else {
         const reason = err.reason || '';
         const reason = err.reason || '';
         const message = `${TAPi18n.__(err.error)}\n${reason}`;
         const message = `${TAPi18n.__(err.error)}\n${reason}`;
-        console.log(message, err);
         alert(message);
         alert(message);
       }
       }
-      /* eslint-enable no-console */
     });
     });
   },
   },
 
 
@@ -190,6 +193,7 @@ BlazeComponent.extendComponent({
       'click button.js-send-smtp-test-email': this.sendSMTPTestEmail,
       'click button.js-send-smtp-test-email': this.sendSMTPTestEmail,
       'click a.js-toggle-hide-logo': this.toggleHideLogo,
       'click a.js-toggle-hide-logo': this.toggleHideLogo,
       'click button.js-save-layout': this.saveLayout,
       'click button.js-save-layout': this.saveLayout,
+      'click a.js-toggle-display-authentication-method': this.toggleDisplayAuthenticationMethod,
     }];
     }];
   },
   },
 }).register('setting');
 }).register('setting');
@@ -262,3 +266,29 @@ BlazeComponent.extendComponent({
     }];
     }];
   },
   },
 }).register('announcementSettings');
 }).register('announcementSettings');
+
+
+Template.selectAuthenticationMethod.onCreated(function() {
+  this.authenticationMethods = new ReactiveVar([]);
+
+  Meteor.call('getAuthenticationsEnabled', (_, result) => {
+    if (result) {
+      // TODO : add a management of different languages
+      // (ex {value: ldap, text: TAPi18n.__('ldap', {}, T9n.getLanguage() || 'en')})
+      this.authenticationMethods.set([
+        {value: 'password'},
+        // Gets only the authentication methods availables
+        ...Object.entries(result).filter((e) => e[1]).map((e) => ({value: e[0]})),
+      ]);
+    }
+  });
+});
+
+Template.selectAuthenticationMethod.helpers({
+  authentications() {
+    return Template.instance().authenticationMethods.get();
+  },
+  isSelected(match) {
+    return Template.instance().data.authenticationMethod === match;
+  },
+});

+ 3 - 0
client/components/swimlanes/swimlanes.styl

@@ -53,6 +53,9 @@
 .list-group
 .list-group
   height: 100%
   height: 100%
 
 
+.moving-swimlane
+  display: none
+
 swimlane-color(background, color...)
 swimlane-color(background, color...)
   background: background !important
   background: background !important
   if color
   if color

+ 3 - 0
docker-compose.yml

@@ -278,6 +278,9 @@ services:
       # example: OAUTH2_TOKEN_ENDPOINT=/oauth/token
       # example: OAUTH2_TOKEN_ENDPOINT=/oauth/token
       #- OAUTH2_TOKEN_ENDPOINT=
       #- OAUTH2_TOKEN_ENDPOINT=
       #-----------------------------------------------------------------
       #-----------------------------------------------------------------
+      # Debug OIDC OAuth2 etc
+      #- DEBUG=true
+      #-----------------------------------------------------------------
       # ==== LDAP ====
       # ==== LDAP ====
       # https://github.com/wekan/wekan/wiki/LDAP
       # https://github.com/wekan/wekan/wiki/LDAP
       # For Snap settings see https://github.com/wekan/wekan-snap/wiki/Supported-settings-keys
       # For Snap settings see https://github.com/wekan/wekan-snap/wiki/Supported-settings-keys

+ 3 - 1
i18n/ar.i18n.json

@@ -659,5 +659,7 @@
     "add-custom-html-after-body-start": "Add Custom HTML after <body> start",
     "add-custom-html-after-body-start": "Add Custom HTML after <body> start",
     "add-custom-html-before-body-end": "Add Custom HTML before </body> end",
     "add-custom-html-before-body-end": "Add Custom HTML before </body> end",
     "error-undefined": "Something went wrong",
     "error-undefined": "Something went wrong",
-    "error-ldap-login": "An error occurred while trying to login"
+    "error-ldap-login": "An error occurred while trying to login",
+    "display-authentication-method": "Display Authentication Method",
+    "default-authentication-method": "Default Authentication Method"
 }
 }

+ 3 - 1
i18n/bg.i18n.json

@@ -659,5 +659,7 @@
     "add-custom-html-after-body-start": "Add Custom HTML after <body> start",
     "add-custom-html-after-body-start": "Add Custom HTML after <body> start",
     "add-custom-html-before-body-end": "Add Custom HTML before </body> end",
     "add-custom-html-before-body-end": "Add Custom HTML before </body> end",
     "error-undefined": "Something went wrong",
     "error-undefined": "Something went wrong",
-    "error-ldap-login": "An error occurred while trying to login"
+    "error-ldap-login": "An error occurred while trying to login",
+    "display-authentication-method": "Display Authentication Method",
+    "default-authentication-method": "Default Authentication Method"
 }
 }

+ 3 - 1
i18n/br.i18n.json

@@ -659,5 +659,7 @@
     "add-custom-html-after-body-start": "Add Custom HTML after <body> start",
     "add-custom-html-after-body-start": "Add Custom HTML after <body> start",
     "add-custom-html-before-body-end": "Add Custom HTML before </body> end",
     "add-custom-html-before-body-end": "Add Custom HTML before </body> end",
     "error-undefined": "Something went wrong",
     "error-undefined": "Something went wrong",
-    "error-ldap-login": "An error occurred while trying to login"
+    "error-ldap-login": "An error occurred while trying to login",
+    "display-authentication-method": "Display Authentication Method",
+    "default-authentication-method": "Default Authentication Method"
 }
 }

+ 3 - 1
i18n/ca.i18n.json

@@ -659,5 +659,7 @@
     "add-custom-html-after-body-start": "Add Custom HTML after <body> start",
     "add-custom-html-after-body-start": "Add Custom HTML after <body> start",
     "add-custom-html-before-body-end": "Add Custom HTML before </body> end",
     "add-custom-html-before-body-end": "Add Custom HTML before </body> end",
     "error-undefined": "Something went wrong",
     "error-undefined": "Something went wrong",
-    "error-ldap-login": "An error occurred while trying to login"
+    "error-ldap-login": "An error occurred while trying to login",
+    "display-authentication-method": "Display Authentication Method",
+    "default-authentication-method": "Default Authentication Method"
 }
 }

+ 3 - 1
i18n/cs.i18n.json

@@ -659,5 +659,7 @@
     "add-custom-html-after-body-start": "Add Custom HTML after <body> start",
     "add-custom-html-after-body-start": "Add Custom HTML after <body> start",
     "add-custom-html-before-body-end": "Add Custom HTML before </body> end",
     "add-custom-html-before-body-end": "Add Custom HTML before </body> end",
     "error-undefined": "Něco se pokazilo",
     "error-undefined": "Něco se pokazilo",
-    "error-ldap-login": "Během přihlašování nastala chyba"
+    "error-ldap-login": "Během přihlašování nastala chyba",
+    "display-authentication-method": "Display Authentication Method",
+    "default-authentication-method": "Default Authentication Method"
 }
 }

+ 3 - 1
i18n/da.i18n.json

@@ -659,5 +659,7 @@
     "add-custom-html-after-body-start": "Add Custom HTML after <body> start",
     "add-custom-html-after-body-start": "Add Custom HTML after <body> start",
     "add-custom-html-before-body-end": "Add Custom HTML before </body> end",
     "add-custom-html-before-body-end": "Add Custom HTML before </body> end",
     "error-undefined": "Something went wrong",
     "error-undefined": "Something went wrong",
-    "error-ldap-login": "An error occurred while trying to login"
+    "error-ldap-login": "An error occurred while trying to login",
+    "display-authentication-method": "Display Authentication Method",
+    "default-authentication-method": "Default Authentication Method"
 }
 }

+ 3 - 1
i18n/de.i18n.json

@@ -659,5 +659,7 @@
     "add-custom-html-after-body-start": "Füge benutzerdefiniertes HTML nach <body> Anfang hinzu",
     "add-custom-html-after-body-start": "Füge benutzerdefiniertes HTML nach <body> Anfang hinzu",
     "add-custom-html-before-body-end": "Füge benutzerdefiniertes HTML vor </body>Ende hinzu",
     "add-custom-html-before-body-end": "Füge benutzerdefiniertes HTML vor </body>Ende hinzu",
     "error-undefined": "Etwas ist schief gelaufen",
     "error-undefined": "Etwas ist schief gelaufen",
-    "error-ldap-login": "Es ist ein Fehler beim Anmelden aufgetreten"
+    "error-ldap-login": "Es ist ein Fehler beim Anmelden aufgetreten",
+    "display-authentication-method": "Anzeige Authentifizierungsverfahren",
+    "default-authentication-method": "Standardauthentifizierungsverfahren"
 }
 }

+ 3 - 1
i18n/el.i18n.json

@@ -659,5 +659,7 @@
     "add-custom-html-after-body-start": "Add Custom HTML after <body> start",
     "add-custom-html-after-body-start": "Add Custom HTML after <body> start",
     "add-custom-html-before-body-end": "Add Custom HTML before </body> end",
     "add-custom-html-before-body-end": "Add Custom HTML before </body> end",
     "error-undefined": "Something went wrong",
     "error-undefined": "Something went wrong",
-    "error-ldap-login": "An error occurred while trying to login"
+    "error-ldap-login": "An error occurred while trying to login",
+    "display-authentication-method": "Display Authentication Method",
+    "default-authentication-method": "Default Authentication Method"
 }
 }

+ 3 - 1
i18n/en-GB.i18n.json

@@ -659,5 +659,7 @@
     "add-custom-html-after-body-start": "Add Custom HTML after <body> start",
     "add-custom-html-after-body-start": "Add Custom HTML after <body> start",
     "add-custom-html-before-body-end": "Add Custom HTML before </body> end",
     "add-custom-html-before-body-end": "Add Custom HTML before </body> end",
     "error-undefined": "Something went wrong",
     "error-undefined": "Something went wrong",
-    "error-ldap-login": "An error occurred while trying to login"
+    "error-ldap-login": "An error occurred while trying to login",
+    "display-authentication-method": "Display Authentication Method",
+    "default-authentication-method": "Default Authentication Method"
 }
 }

+ 3 - 1
i18n/en.i18n.json

@@ -662,5 +662,7 @@
     "add-custom-html-after-body-start": "Add Custom HTML after <body> start",
     "add-custom-html-after-body-start": "Add Custom HTML after <body> start",
     "add-custom-html-before-body-end": "Add Custom HTML before </body> end",
     "add-custom-html-before-body-end": "Add Custom HTML before </body> end",
     "error-undefined": "Something went wrong",
     "error-undefined": "Something went wrong",
-    "error-ldap-login": "An error occurred while trying to login"
+    "error-ldap-login": "An error occurred while trying to login",
+    "display-authentication-method": "Display Authentication Method",
+    "default-authentication-method": "Default Authentication Method"
 }
 }

+ 3 - 1
i18n/eo.i18n.json

@@ -659,5 +659,7 @@
     "add-custom-html-after-body-start": "Add Custom HTML after <body> start",
     "add-custom-html-after-body-start": "Add Custom HTML after <body> start",
     "add-custom-html-before-body-end": "Add Custom HTML before </body> end",
     "add-custom-html-before-body-end": "Add Custom HTML before </body> end",
     "error-undefined": "Something went wrong",
     "error-undefined": "Something went wrong",
-    "error-ldap-login": "An error occurred while trying to login"
+    "error-ldap-login": "An error occurred while trying to login",
+    "display-authentication-method": "Display Authentication Method",
+    "default-authentication-method": "Default Authentication Method"
 }
 }

+ 3 - 1
i18n/es-AR.i18n.json

@@ -659,5 +659,7 @@
     "add-custom-html-after-body-start": "Add Custom HTML after <body> start",
     "add-custom-html-after-body-start": "Add Custom HTML after <body> start",
     "add-custom-html-before-body-end": "Add Custom HTML before </body> end",
     "add-custom-html-before-body-end": "Add Custom HTML before </body> end",
     "error-undefined": "Something went wrong",
     "error-undefined": "Something went wrong",
-    "error-ldap-login": "An error occurred while trying to login"
+    "error-ldap-login": "An error occurred while trying to login",
+    "display-authentication-method": "Display Authentication Method",
+    "default-authentication-method": "Default Authentication Method"
 }
 }

+ 6 - 4
i18n/es.i18n.json

@@ -363,9 +363,9 @@
     "muted-info": "No serás notificado de ningún cambio en este tablero",
     "muted-info": "No serás notificado de ningún cambio en este tablero",
     "my-boards": "Mis tableros",
     "my-boards": "Mis tableros",
     "name": "Nombre",
     "name": "Nombre",
-    "no-archived-cards": "No hay tarjetas en el Archivo",
-    "no-archived-lists": "No hay listas en el Archivo",
-    "no-archived-swimlanes": "No hay carriles en el Archivo",
+    "no-archived-cards": "No hay tarjetas archivadas.",
+    "no-archived-lists": "No hay listas archivadas.",
+    "no-archived-swimlanes": "No hay carriles archivados.",
     "no-results": "Sin resultados",
     "no-results": "Sin resultados",
     "normal": "Normal",
     "normal": "Normal",
     "normal-desc": "Puedes ver y editar tarjetas. No puedes cambiar la configuración.",
     "normal-desc": "Puedes ver y editar tarjetas. No puedes cambiar la configuración.",
@@ -659,5 +659,7 @@
     "add-custom-html-after-body-start": "Añade HTML personalizado después de <body> ",
     "add-custom-html-after-body-start": "Añade HTML personalizado después de <body> ",
     "add-custom-html-before-body-end": "Añade HTML personalizado después de </body>",
     "add-custom-html-before-body-end": "Añade HTML personalizado después de </body>",
     "error-undefined": "Algo no está bien",
     "error-undefined": "Algo no está bien",
-    "error-ldap-login": "Ocurrió un error al intentar acceder"
+    "error-ldap-login": "Ocurrió un error al intentar acceder",
+    "display-authentication-method": "Mostrar el método de autenticación",
+    "default-authentication-method": "Método de autenticación por defecto"
 }
 }

+ 3 - 1
i18n/eu.i18n.json

@@ -659,5 +659,7 @@
     "add-custom-html-after-body-start": "Add Custom HTML after <body> start",
     "add-custom-html-after-body-start": "Add Custom HTML after <body> start",
     "add-custom-html-before-body-end": "Add Custom HTML before </body> end",
     "add-custom-html-before-body-end": "Add Custom HTML before </body> end",
     "error-undefined": "Something went wrong",
     "error-undefined": "Something went wrong",
-    "error-ldap-login": "An error occurred while trying to login"
+    "error-ldap-login": "An error occurred while trying to login",
+    "display-authentication-method": "Display Authentication Method",
+    "default-authentication-method": "Default Authentication Method"
 }
 }

+ 3 - 1
i18n/fa.i18n.json

@@ -659,5 +659,7 @@
     "add-custom-html-after-body-start": "افزودن کد های HTML بعد از  <body> شروع",
     "add-custom-html-after-body-start": "افزودن کد های HTML بعد از  <body> شروع",
     "add-custom-html-before-body-end": "افزودن کد های HTML قبل از  </body> پایان",
     "add-custom-html-before-body-end": "افزودن کد های HTML قبل از  </body> پایان",
     "error-undefined": "یک اشتباه رخ داده شده است",
     "error-undefined": "یک اشتباه رخ داده شده است",
-    "error-ldap-login": "هنگام تلاش برای ورود به یک خطا رخ داد"
+    "error-ldap-login": "هنگام تلاش برای ورود به یک خطا رخ داد",
+    "display-authentication-method": "Display Authentication Method",
+    "default-authentication-method": "Default Authentication Method"
 }
 }

+ 3 - 1
i18n/fi.i18n.json

@@ -659,5 +659,7 @@
     "add-custom-html-after-body-start": "Lisää HTML <body> alun jälkeen",
     "add-custom-html-after-body-start": "Lisää HTML <body> alun jälkeen",
     "add-custom-html-before-body-end": "Lisä HTML ennen </body> loppua",
     "add-custom-html-before-body-end": "Lisä HTML ennen </body> loppua",
     "error-undefined": "Jotain meni pieleen",
     "error-undefined": "Jotain meni pieleen",
-    "error-ldap-login": "Virhe tapahtui yrittäessä kirjautua sisään"
+    "error-ldap-login": "Virhe tapahtui yrittäessä kirjautua sisään",
+    "display-authentication-method": "Näytä kirjautumistapa",
+    "default-authentication-method": "Oletus kirjautumistapa"
 }
 }

+ 3 - 1
i18n/fr.i18n.json

@@ -659,5 +659,7 @@
     "add-custom-html-after-body-start": "Ajouter le HTML personnalisé après le début du <body>",
     "add-custom-html-after-body-start": "Ajouter le HTML personnalisé après le début du <body>",
     "add-custom-html-before-body-end": "Ajouter le HTML personnalisé avant la fin du </body>",
     "add-custom-html-before-body-end": "Ajouter le HTML personnalisé avant la fin du </body>",
     "error-undefined": "Une erreur inconnue s'est produite",
     "error-undefined": "Une erreur inconnue s'est produite",
-    "error-ldap-login": "Une erreur s'est produite lors de la tentative de connexion"
+    "error-ldap-login": "Une erreur s'est produite lors de la tentative de connexion",
+    "display-authentication-method": "Afficher la méthode d'authentification",
+    "default-authentication-method": "Méthode d'authentification par défaut"
 }
 }

+ 3 - 1
i18n/gl.i18n.json

@@ -659,5 +659,7 @@
     "add-custom-html-after-body-start": "Add Custom HTML after <body> start",
     "add-custom-html-after-body-start": "Add Custom HTML after <body> start",
     "add-custom-html-before-body-end": "Add Custom HTML before </body> end",
     "add-custom-html-before-body-end": "Add Custom HTML before </body> end",
     "error-undefined": "Something went wrong",
     "error-undefined": "Something went wrong",
-    "error-ldap-login": "An error occurred while trying to login"
+    "error-ldap-login": "An error occurred while trying to login",
+    "display-authentication-method": "Display Authentication Method",
+    "default-authentication-method": "Default Authentication Method"
 }
 }

+ 11 - 9
i18n/he.i18n.json

@@ -14,7 +14,7 @@
     "act-archivedBoard": "__board__ הועבר לארכיון",
     "act-archivedBoard": "__board__ הועבר לארכיון",
     "act-archivedCard": "__card__ הועבר לארכיון",
     "act-archivedCard": "__card__ הועבר לארכיון",
     "act-archivedList": "__list__ הועבר לארכיון",
     "act-archivedList": "__list__ הועבר לארכיון",
-    "act-archivedSwimlane": "__swimlane__ נשמר בארכיון",
+    "act-archivedSwimlane": "__swimlane__ הועבר לארכיון",
     "act-importBoard": "הלוח __board__ יובא",
     "act-importBoard": "הלוח __board__ יובא",
     "act-importCard": "הכרטיס __card__ יובא",
     "act-importCard": "הכרטיס __card__ יובא",
     "act-importList": "הרשימה  __list__ יובאה",
     "act-importList": "הרשימה  __list__ יובאה",
@@ -84,7 +84,7 @@
     "archive-board": "העברת הלוח לארכיון",
     "archive-board": "העברת הלוח לארכיון",
     "archive-card": "העברת הכרטיס לארכיון",
     "archive-card": "העברת הכרטיס לארכיון",
     "archive-list": "העברת הרשימה לארכיון",
     "archive-list": "העברת הרשימה לארכיון",
-    "archive-swimlane": "שמור נתיב זרימה לארכיון",
+    "archive-swimlane": "העברת מסלול לארכיון",
     "archive-selection": "העברת הבחירה לארכיון",
     "archive-selection": "העברת הבחירה לארכיון",
     "archiveBoardPopup-title": "להעביר לוח זה לארכיון?",
     "archiveBoardPopup-title": "להעביר לוח זה לארכיון?",
     "archived-items": "להעביר לארכיון",
     "archived-items": "להעביר לארכיון",
@@ -335,10 +335,10 @@
     "list-archive-cards-pop": "כל הכרטיסים מרשימה זו יוסרו מהלוח. לצפייה בכרטיסים השמורים בארכיון ולהחזירם ללוח, ניתן ללחוץ על „תפריט” > „פריטים בארכיון”.",
     "list-archive-cards-pop": "כל הכרטיסים מרשימה זו יוסרו מהלוח. לצפייה בכרטיסים השמורים בארכיון ולהחזירם ללוח, ניתן ללחוץ על „תפריט” > „פריטים בארכיון”.",
     "list-move-cards": "העברת כל הכרטיסים שברשימה זו",
     "list-move-cards": "העברת כל הכרטיסים שברשימה זו",
     "list-select-cards": "בחירת כל הכרטיסים שברשימה זו",
     "list-select-cards": "בחירת כל הכרטיסים שברשימה זו",
-    "set-color-list": "Set Color",
+    "set-color-list": "הגדרת צבע",
     "listActionPopup-title": "פעולות רשימה",
     "listActionPopup-title": "פעולות רשימה",
     "swimlaneActionPopup-title": "פעולות על מסלול",
     "swimlaneActionPopup-title": "פעולות על מסלול",
-    "swimlaneAddPopup-title": "Add a Swimlane below",
+    "swimlaneAddPopup-title": "הוספת מסלול מתחת",
     "listImportCardPopup-title": "יבוא כרטיס מ־Trello",
     "listImportCardPopup-title": "יבוא כרטיס מ־Trello",
     "listMorePopup-title": "עוד",
     "listMorePopup-title": "עוד",
     "link-list": "קישור לרשימה זו",
     "link-list": "קישור לרשימה זו",
@@ -365,7 +365,7 @@
     "name": "שם",
     "name": "שם",
     "no-archived-cards": "אין כרטיסים בארכיון",
     "no-archived-cards": "אין כרטיסים בארכיון",
     "no-archived-lists": "אין רשימות בארכיון",
     "no-archived-lists": "אין רשימות בארכיון",
-    "no-archived-swimlanes": "לא שמורים מסלולים בארכיון",
+    "no-archived-swimlanes": "אין מסלולים בארכיון.",
     "no-results": "אין תוצאות",
     "no-results": "אין תוצאות",
     "normal": "רגיל",
     "normal": "רגיל",
     "normal-desc": "הרשאה לצפות ולערוך כרטיסים. לא ניתן לשנות הגדרות.",
     "normal-desc": "הרשאה לצפות ולערוך כרטיסים. לא ניתן לשנות הגדרות.",
@@ -520,9 +520,9 @@
     "editCardReceivedDatePopup-title": "החלפת מועד הקבלה",
     "editCardReceivedDatePopup-title": "החלפת מועד הקבלה",
     "editCardEndDatePopup-title": "החלפת מועד הסיום",
     "editCardEndDatePopup-title": "החלפת מועד הסיום",
     "setCardColorPopup-title": "הגדרת צבע",
     "setCardColorPopup-title": "הגדרת צבע",
-    "setCardActionsColorPopup-title": "Choose a color",
-    "setSwimlaneColorPopup-title": "Choose a color",
-    "setListColorPopup-title": "Choose a color",
+    "setCardActionsColorPopup-title": "בחירת צבע",
+    "setSwimlaneColorPopup-title": "בחירת צבע",
+    "setListColorPopup-title": "בחירת צבע",
     "assigned-by": "הוקצה על ידי",
     "assigned-by": "הוקצה על ידי",
     "requested-by": "התבקש על ידי",
     "requested-by": "התבקש על ידי",
     "board-delete-notice": "מחיקה היא לצמיתות. כל הרשימות, הכרטיבים והפעולות שקשורים בלוח הזה ילכו לאיבוד.",
     "board-delete-notice": "מחיקה היא לצמיתות. כל הרשימות, הכרטיבים והפעולות שקשורים בלוח הזה ילכו לאיבוד.",
@@ -659,5 +659,7 @@
     "add-custom-html-after-body-start": "הוספת קוד HTML מותאם אישית לאחר ה־<body> הפותח.",
     "add-custom-html-after-body-start": "הוספת קוד HTML מותאם אישית לאחר ה־<body> הפותח.",
     "add-custom-html-before-body-end": "הוספת קוד HTML מותאם אישית לפני ה־</body> הסוגר.",
     "add-custom-html-before-body-end": "הוספת קוד HTML מותאם אישית לפני ה־</body> הסוגר.",
     "error-undefined": "מהו השתבש",
     "error-undefined": "מהו השתבש",
-    "error-ldap-login": "אירעה שגיאה בעת ניסיון הכניסה"
+    "error-ldap-login": "אירעה שגיאה בעת ניסיון הכניסה",
+    "display-authentication-method": "הצגת שיטת אימות",
+    "default-authentication-method": "שיטת אימות כבררת מחדל"
 }
 }

+ 3 - 1
i18n/hi.i18n.json

@@ -659,5 +659,7 @@
     "add-custom-html-after-body-start": "Add Custom HTML after <body> start",
     "add-custom-html-after-body-start": "Add Custom HTML after <body> start",
     "add-custom-html-before-body-end": "Add Custom HTML before </body> end",
     "add-custom-html-before-body-end": "Add Custom HTML before </body> end",
     "error-undefined": "Something went wrong",
     "error-undefined": "Something went wrong",
-    "error-ldap-login": "An error occurred while trying to login"
+    "error-ldap-login": "An error occurred while trying to login",
+    "display-authentication-method": "Display Authentication Method",
+    "default-authentication-method": "Default Authentication Method"
 }
 }

+ 3 - 1
i18n/hu.i18n.json

@@ -659,5 +659,7 @@
     "add-custom-html-after-body-start": "Add Custom HTML after <body> start",
     "add-custom-html-after-body-start": "Add Custom HTML after <body> start",
     "add-custom-html-before-body-end": "Add Custom HTML before </body> end",
     "add-custom-html-before-body-end": "Add Custom HTML before </body> end",
     "error-undefined": "Something went wrong",
     "error-undefined": "Something went wrong",
-    "error-ldap-login": "An error occurred while trying to login"
+    "error-ldap-login": "An error occurred while trying to login",
+    "display-authentication-method": "Display Authentication Method",
+    "default-authentication-method": "Default Authentication Method"
 }
 }

+ 3 - 1
i18n/hy.i18n.json

@@ -659,5 +659,7 @@
     "add-custom-html-after-body-start": "Add Custom HTML after <body> start",
     "add-custom-html-after-body-start": "Add Custom HTML after <body> start",
     "add-custom-html-before-body-end": "Add Custom HTML before </body> end",
     "add-custom-html-before-body-end": "Add Custom HTML before </body> end",
     "error-undefined": "Something went wrong",
     "error-undefined": "Something went wrong",
-    "error-ldap-login": "An error occurred while trying to login"
+    "error-ldap-login": "An error occurred while trying to login",
+    "display-authentication-method": "Display Authentication Method",
+    "default-authentication-method": "Default Authentication Method"
 }
 }

+ 3 - 1
i18n/id.i18n.json

@@ -659,5 +659,7 @@
     "add-custom-html-after-body-start": "Add Custom HTML after <body> start",
     "add-custom-html-after-body-start": "Add Custom HTML after <body> start",
     "add-custom-html-before-body-end": "Add Custom HTML before </body> end",
     "add-custom-html-before-body-end": "Add Custom HTML before </body> end",
     "error-undefined": "Something went wrong",
     "error-undefined": "Something went wrong",
-    "error-ldap-login": "An error occurred while trying to login"
+    "error-ldap-login": "An error occurred while trying to login",
+    "display-authentication-method": "Display Authentication Method",
+    "default-authentication-method": "Default Authentication Method"
 }
 }

+ 3 - 1
i18n/ig.i18n.json

@@ -659,5 +659,7 @@
     "add-custom-html-after-body-start": "Add Custom HTML after <body> start",
     "add-custom-html-after-body-start": "Add Custom HTML after <body> start",
     "add-custom-html-before-body-end": "Add Custom HTML before </body> end",
     "add-custom-html-before-body-end": "Add Custom HTML before </body> end",
     "error-undefined": "Something went wrong",
     "error-undefined": "Something went wrong",
-    "error-ldap-login": "An error occurred while trying to login"
+    "error-ldap-login": "An error occurred while trying to login",
+    "display-authentication-method": "Display Authentication Method",
+    "default-authentication-method": "Default Authentication Method"
 }
 }

+ 3 - 1
i18n/it.i18n.json

@@ -659,5 +659,7 @@
     "add-custom-html-after-body-start": "Add Custom HTML after <body> start",
     "add-custom-html-after-body-start": "Add Custom HTML after <body> start",
     "add-custom-html-before-body-end": "Add Custom HTML before </body> end",
     "add-custom-html-before-body-end": "Add Custom HTML before </body> end",
     "error-undefined": "Something went wrong",
     "error-undefined": "Something went wrong",
-    "error-ldap-login": "An error occurred while trying to login"
+    "error-ldap-login": "An error occurred while trying to login",
+    "display-authentication-method": "Display Authentication Method",
+    "default-authentication-method": "Default Authentication Method"
 }
 }

+ 3 - 1
i18n/ja.i18n.json

@@ -659,5 +659,7 @@
     "add-custom-html-after-body-start": "Add Custom HTML after <body> start",
     "add-custom-html-after-body-start": "Add Custom HTML after <body> start",
     "add-custom-html-before-body-end": "Add Custom HTML before </body> end",
     "add-custom-html-before-body-end": "Add Custom HTML before </body> end",
     "error-undefined": "Something went wrong",
     "error-undefined": "Something went wrong",
-    "error-ldap-login": "An error occurred while trying to login"
+    "error-ldap-login": "An error occurred while trying to login",
+    "display-authentication-method": "Display Authentication Method",
+    "default-authentication-method": "Default Authentication Method"
 }
 }

+ 3 - 1
i18n/ka.i18n.json

@@ -659,5 +659,7 @@
     "add-custom-html-after-body-start": "Add Custom HTML after <body> start",
     "add-custom-html-after-body-start": "Add Custom HTML after <body> start",
     "add-custom-html-before-body-end": "Add Custom HTML before </body> end",
     "add-custom-html-before-body-end": "Add Custom HTML before </body> end",
     "error-undefined": "Something went wrong",
     "error-undefined": "Something went wrong",
-    "error-ldap-login": "An error occurred while trying to login"
+    "error-ldap-login": "An error occurred while trying to login",
+    "display-authentication-method": "Display Authentication Method",
+    "default-authentication-method": "Default Authentication Method"
 }
 }

+ 3 - 1
i18n/km.i18n.json

@@ -659,5 +659,7 @@
     "add-custom-html-after-body-start": "Add Custom HTML after <body> start",
     "add-custom-html-after-body-start": "Add Custom HTML after <body> start",
     "add-custom-html-before-body-end": "Add Custom HTML before </body> end",
     "add-custom-html-before-body-end": "Add Custom HTML before </body> end",
     "error-undefined": "Something went wrong",
     "error-undefined": "Something went wrong",
-    "error-ldap-login": "An error occurred while trying to login"
+    "error-ldap-login": "An error occurred while trying to login",
+    "display-authentication-method": "Display Authentication Method",
+    "default-authentication-method": "Default Authentication Method"
 }
 }

+ 3 - 1
i18n/ko.i18n.json

@@ -659,5 +659,7 @@
     "add-custom-html-after-body-start": "Add Custom HTML after <body> start",
     "add-custom-html-after-body-start": "Add Custom HTML after <body> start",
     "add-custom-html-before-body-end": "Add Custom HTML before </body> end",
     "add-custom-html-before-body-end": "Add Custom HTML before </body> end",
     "error-undefined": "Something went wrong",
     "error-undefined": "Something went wrong",
-    "error-ldap-login": "An error occurred while trying to login"
+    "error-ldap-login": "An error occurred while trying to login",
+    "display-authentication-method": "Display Authentication Method",
+    "default-authentication-method": "Default Authentication Method"
 }
 }

+ 3 - 1
i18n/lv.i18n.json

@@ -659,5 +659,7 @@
     "add-custom-html-after-body-start": "Add Custom HTML after <body> start",
     "add-custom-html-after-body-start": "Add Custom HTML after <body> start",
     "add-custom-html-before-body-end": "Add Custom HTML before </body> end",
     "add-custom-html-before-body-end": "Add Custom HTML before </body> end",
     "error-undefined": "Something went wrong",
     "error-undefined": "Something went wrong",
-    "error-ldap-login": "An error occurred while trying to login"
+    "error-ldap-login": "An error occurred while trying to login",
+    "display-authentication-method": "Display Authentication Method",
+    "default-authentication-method": "Default Authentication Method"
 }
 }

+ 3 - 1
i18n/mk.i18n.json

@@ -659,5 +659,7 @@
     "add-custom-html-after-body-start": "Add Custom HTML after <body> start",
     "add-custom-html-after-body-start": "Add Custom HTML after <body> start",
     "add-custom-html-before-body-end": "Add Custom HTML before </body> end",
     "add-custom-html-before-body-end": "Add Custom HTML before </body> end",
     "error-undefined": "Something went wrong",
     "error-undefined": "Something went wrong",
-    "error-ldap-login": "An error occurred while trying to login"
+    "error-ldap-login": "An error occurred while trying to login",
+    "display-authentication-method": "Display Authentication Method",
+    "default-authentication-method": "Default Authentication Method"
 }
 }

+ 3 - 1
i18n/mn.i18n.json

@@ -659,5 +659,7 @@
     "add-custom-html-after-body-start": "Add Custom HTML after <body> start",
     "add-custom-html-after-body-start": "Add Custom HTML after <body> start",
     "add-custom-html-before-body-end": "Add Custom HTML before </body> end",
     "add-custom-html-before-body-end": "Add Custom HTML before </body> end",
     "error-undefined": "Something went wrong",
     "error-undefined": "Something went wrong",
-    "error-ldap-login": "An error occurred while trying to login"
+    "error-ldap-login": "An error occurred while trying to login",
+    "display-authentication-method": "Display Authentication Method",
+    "default-authentication-method": "Default Authentication Method"
 }
 }

+ 3 - 1
i18n/nb.i18n.json

@@ -659,5 +659,7 @@
     "add-custom-html-after-body-start": "Add Custom HTML after <body> start",
     "add-custom-html-after-body-start": "Add Custom HTML after <body> start",
     "add-custom-html-before-body-end": "Add Custom HTML before </body> end",
     "add-custom-html-before-body-end": "Add Custom HTML before </body> end",
     "error-undefined": "Something went wrong",
     "error-undefined": "Something went wrong",
-    "error-ldap-login": "An error occurred while trying to login"
+    "error-ldap-login": "An error occurred while trying to login",
+    "display-authentication-method": "Display Authentication Method",
+    "default-authentication-method": "Default Authentication Method"
 }
 }

+ 3 - 1
i18n/nl.i18n.json

@@ -659,5 +659,7 @@
     "add-custom-html-after-body-start": "Add Custom HTML after <body> start",
     "add-custom-html-after-body-start": "Add Custom HTML after <body> start",
     "add-custom-html-before-body-end": "Add Custom HTML before </body> end",
     "add-custom-html-before-body-end": "Add Custom HTML before </body> end",
     "error-undefined": "Something went wrong",
     "error-undefined": "Something went wrong",
-    "error-ldap-login": "An error occurred while trying to login"
+    "error-ldap-login": "An error occurred while trying to login",
+    "display-authentication-method": "Display Authentication Method",
+    "default-authentication-method": "Default Authentication Method"
 }
 }

+ 56 - 54
i18n/pl.i18n.json

@@ -1,6 +1,6 @@
 {
 {
     "accept": "Akceptuj",
     "accept": "Akceptuj",
-    "act-activity-notify": "Activity Notification",
+    "act-activity-notify": "Powiadomienia aktywności",
     "act-addAttachment": "dodano załącznik __attachement__ do __card__",
     "act-addAttachment": "dodano załącznik __attachement__ do __card__",
     "act-addSubtask": "dodał podzadanie __checklist__ do __card__",
     "act-addSubtask": "dodał podzadanie __checklist__ do __card__",
     "act-addChecklist": "dodał listę zadań __checklist__ to __card__",
     "act-addChecklist": "dodał listę zadań __checklist__ to __card__",
@@ -78,7 +78,7 @@
     "and-n-other-card": "I __count__ inna karta",
     "and-n-other-card": "I __count__ inna karta",
     "and-n-other-card_plural": "I __count__ inne karty",
     "and-n-other-card_plural": "I __count__ inne karty",
     "apply": "Zastosuj",
     "apply": "Zastosuj",
-    "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.",
+    "app-is-offline": "Trwa ładowanie, proszę czekać. Odświeżenie strony może spowodować utratę danych. Jeśli strona się nie przeładowuje, upewnij się, że serwer działa poprawnie.",
     "archive": "Przenieś do Archiwum",
     "archive": "Przenieś do Archiwum",
     "archive-all": "Przenieś wszystko do Archiwum",
     "archive-all": "Przenieś wszystko do Archiwum",
     "archive-board": "Przenieś tablicę do Archiwum",
     "archive-board": "Przenieś tablicę do Archiwum",
@@ -169,30 +169,30 @@
     "close-board-pop": "Będziesz w stanie przywrócić tablicę poprzez kliknięcie przycisku \"Archiwizuj\" w nagłówku strony domowej.",
     "close-board-pop": "Będziesz w stanie przywrócić tablicę poprzez kliknięcie przycisku \"Archiwizuj\" w nagłówku strony domowej.",
     "color-black": "czarny",
     "color-black": "czarny",
     "color-blue": "niebieski",
     "color-blue": "niebieski",
-    "color-crimson": "crimson",
-    "color-darkgreen": "darkgreen",
-    "color-gold": "gold",
-    "color-gray": "gray",
+    "color-crimson": "karmazynowy",
+    "color-darkgreen": "ciemnozielony",
+    "color-gold": "złoty",
+    "color-gray": "szary",
     "color-green": "zielony",
     "color-green": "zielony",
-    "color-indigo": "indigo",
+    "color-indigo": "indygo",
     "color-lime": "limonkowy",
     "color-lime": "limonkowy",
-    "color-magenta": "magenta",
-    "color-mistyrose": "mistyrose",
-    "color-navy": "navy",
+    "color-magenta": "fuksjowy",
+    "color-mistyrose": "różowy",
+    "color-navy": "granatowy",
     "color-orange": "pomarańczowy",
     "color-orange": "pomarańczowy",
-    "color-paleturquoise": "paleturquoise",
-    "color-peachpuff": "peachpuff",
+    "color-paleturquoise": "turkusowy",
+    "color-peachpuff": "brzoskwiniowy",
     "color-pink": "różowy",
     "color-pink": "różowy",
-    "color-plum": "plum",
+    "color-plum": "śliwkowy",
     "color-purple": "fioletowy",
     "color-purple": "fioletowy",
     "color-red": "czerwony",
     "color-red": "czerwony",
-    "color-saddlebrown": "saddlebrown",
-    "color-silver": "silver",
+    "color-saddlebrown": "jasnobrązowy",
+    "color-silver": "srebrny",
     "color-sky": "błękitny",
     "color-sky": "błękitny",
-    "color-slateblue": "slateblue",
-    "color-white": "white",
+    "color-slateblue": "szaroniebieski",
+    "color-white": "miały",
     "color-yellow": "żółty",
     "color-yellow": "żółty",
-    "unset-color": "Unset",
+    "unset-color": "Nieustawiony",
     "comment": "Komentarz",
     "comment": "Komentarz",
     "comment-placeholder": "Dodaj komentarz",
     "comment-placeholder": "Dodaj komentarz",
     "comment-only": "Tylko komentowanie",
     "comment-only": "Tylko komentowanie",
@@ -299,19 +299,19 @@
     "import-board": "importuj tablice",
     "import-board": "importuj tablice",
     "import-board-c": "Import tablicy",
     "import-board-c": "Import tablicy",
     "import-board-title-trello": "Importuj tablicę z Trello",
     "import-board-title-trello": "Importuj tablicę z Trello",
-    "import-board-title-wekan": "Import board from previous export",
-    "import-sandstorm-backup-warning": "Do not delete data you import from original exported board or Trello before checking does this grain close and open again, or do you get Board not found error, that means data loss.",
+    "import-board-title-wekan": "Importuj tablicę z poprzedniego eksportu",
+    "import-sandstorm-backup-warning": "Nie usuwaj danych, które importujesz ze źródłowej tablicy lub Trello zanim upewnisz się, że wszystko zostało prawidłowo przeniesione przy czym brane jest pod uwagę ponowne uruchomienie strony, ponieważ w przypadku błędu braku tablicy stracisz dane.",
     "import-sandstorm-warning": "Zaimportowana tablica usunie wszystkie istniejące dane na aktualnej tablicy oraz zastąpi ją danymi z tej importowanej.",
     "import-sandstorm-warning": "Zaimportowana tablica usunie wszystkie istniejące dane na aktualnej tablicy oraz zastąpi ją danymi z tej importowanej.",
     "from-trello": "Z Trello",
     "from-trello": "Z Trello",
-    "from-wekan": "From previous export",
+    "from-wekan": "Z poprzedniego eksportu",
     "import-board-instruction-trello": "W twojej tablicy na Trello przejdź do 'Menu', następnie 'Więcej', 'Drukuj i eksportuj', 'Eksportuj jako JSON' i skopiuj wynik",
     "import-board-instruction-trello": "W twojej tablicy na Trello przejdź do 'Menu', następnie 'Więcej', 'Drukuj i eksportuj', 'Eksportuj jako JSON' i skopiuj wynik",
-    "import-board-instruction-wekan": "In your board, go to 'Menu', then 'Export board', and copy the text in the downloaded file.",
+    "import-board-instruction-wekan": "Na Twojej tablicy przejdź do 'Menu', a następnie wybierz 'Eksportuj tablicę' i skopiuj tekst w pobranym pliku.",
     "import-board-instruction-about-errors": "W przypadku, gdy otrzymujesz błędy importowania tablicy, czasami importowanie pomimo wszystko działa poprawnie i tablica znajduje się w oknie Wszystkie tablice.",
     "import-board-instruction-about-errors": "W przypadku, gdy otrzymujesz błędy importowania tablicy, czasami importowanie pomimo wszystko działa poprawnie i tablica znajduje się w oknie Wszystkie tablice.",
     "import-json-placeholder": "Wklej Twoje dane JSON tutaj",
     "import-json-placeholder": "Wklej Twoje dane JSON tutaj",
     "import-map-members": "Przypisz członków",
     "import-map-members": "Przypisz członków",
-    "import-members-map": "Your imported board has some members. Please map the members you want to import to your users",
+    "import-members-map": "Twoje zaimportowane tablice mają kilku członków. Proszę wybierz członków których chcesz zaimportować dla Twoich użytkowników",
     "import-show-user-mapping": "Przejrzyj wybranych członków",
     "import-show-user-mapping": "Przejrzyj wybranych członków",
-    "import-user-select": "Pick your existing user you want to use as this member",
+    "import-user-select": "Wybierz istniejącego użytkownika, który ma stać się członkiem",
     "importMapMembersAddPopup-title": "Wybierz użytkownika",
     "importMapMembersAddPopup-title": "Wybierz użytkownika",
     "info": "Wersja",
     "info": "Wersja",
     "initials": "Inicjały",
     "initials": "Inicjały",
@@ -335,10 +335,10 @@
     "list-archive-cards-pop": "To usunie wszystkie karty z tej listy z tej tablicy. Aby przejrzeć karty w Archiwum i przywrócić na tablicę, kliknij \"Menu\" > \"Archiwizuj\".",
     "list-archive-cards-pop": "To usunie wszystkie karty z tej listy z tej tablicy. Aby przejrzeć karty w Archiwum i przywrócić na tablicę, kliknij \"Menu\" > \"Archiwizuj\".",
     "list-move-cards": "Przenieś wszystkie karty z tej listy",
     "list-move-cards": "Przenieś wszystkie karty z tej listy",
     "list-select-cards": "Zaznacz wszystkie karty z tej listy",
     "list-select-cards": "Zaznacz wszystkie karty z tej listy",
-    "set-color-list": "Set Color",
+    "set-color-list": "Ustaw kolor",
     "listActionPopup-title": "Lista akcji",
     "listActionPopup-title": "Lista akcji",
     "swimlaneActionPopup-title": "Opcje diagramu czynności",
     "swimlaneActionPopup-title": "Opcje diagramu czynności",
-    "swimlaneAddPopup-title": "Add a Swimlane below",
+    "swimlaneAddPopup-title": "Dodaj diagram czynności poniżej",
     "listImportCardPopup-title": "Zaimportuj kartę z Trello",
     "listImportCardPopup-title": "Zaimportuj kartę z Trello",
     "listMorePopup-title": "Więcej",
     "listMorePopup-title": "Więcej",
     "link-list": "Podepnij do tej listy",
     "link-list": "Podepnij do tej listy",
@@ -478,14 +478,14 @@
     "send-smtp-test": "Wyślij wiadomość testową do siebie",
     "send-smtp-test": "Wyślij wiadomość testową do siebie",
     "invitation-code": "Kod z zaproszenia",
     "invitation-code": "Kod z zaproszenia",
     "email-invite-register-subject": "__inviter__ wysłał Ci zaproszenie",
     "email-invite-register-subject": "__inviter__ wysłał Ci zaproszenie",
-    "email-invite-register-text": "Dear __user__,\n\n__inviter__ invites you to kanban board for collaborations.\n\nPlease follow the link below:\n__url__\n\nAnd your invitation code is: __icode__\n\nThanks.",
-    "email-smtp-test-subject": "SMTP Test Email",
+    "email-invite-register-text": "Drogi __user__,\n\n__inviter__ zaprasza Cię do współpracy na naszej tablicy kanban.\n\nAby kontynuować, wejdź w poniższy link:\n__url__\n\nTwój kod zaproszenia to: __icode__\n\nDziękuję.",
+    "email-smtp-test-subject": "Wiadomość testowa SMTP",
     "email-smtp-test-text": "Wiadomość testowa została wysłana z powodzeniem.",
     "email-smtp-test-text": "Wiadomość testowa została wysłana z powodzeniem.",
     "error-invitation-code-not-exist": "Kod zaproszenia nie istnieje",
     "error-invitation-code-not-exist": "Kod zaproszenia nie istnieje",
     "error-notAuthorized": "Nie jesteś uprawniony do przeglądania tej strony.",
     "error-notAuthorized": "Nie jesteś uprawniony do przeglądania tej strony.",
     "outgoing-webhooks": "Wychodzące webhooki",
     "outgoing-webhooks": "Wychodzące webhooki",
     "outgoingWebhooksPopup-title": "Wychodzące webhooki",
     "outgoingWebhooksPopup-title": "Wychodzące webhooki",
-    "boardCardTitlePopup-title": "Card Title Filter",
+    "boardCardTitlePopup-title": "Filtruj poprzez nazwę karty",
     "new-outgoing-webhook": "Nowy wychodzący webhook",
     "new-outgoing-webhook": "Nowy wychodzący webhook",
     "no-name": "(nieznany)",
     "no-name": "(nieznany)",
     "Node_version": "Wersja Node",
     "Node_version": "Wersja Node",
@@ -498,7 +498,7 @@
     "OS_Totalmem": "Dostępna pamięć RAM",
     "OS_Totalmem": "Dostępna pamięć RAM",
     "OS_Type": "Typ systemu",
     "OS_Type": "Typ systemu",
     "OS_Uptime": "Czas działania systemu",
     "OS_Uptime": "Czas działania systemu",
-    "days": "days",
+    "days": "dni",
     "hours": "godzin",
     "hours": "godzin",
     "minutes": "minut",
     "minutes": "minut",
     "seconds": "sekund",
     "seconds": "sekund",
@@ -519,10 +519,10 @@
     "card-end-on": "Kończy się",
     "card-end-on": "Kończy się",
     "editCardReceivedDatePopup-title": "Zmień datę odebrania",
     "editCardReceivedDatePopup-title": "Zmień datę odebrania",
     "editCardEndDatePopup-title": "Zmień datę ukończenia",
     "editCardEndDatePopup-title": "Zmień datę ukończenia",
-    "setCardColorPopup-title": "Set color",
-    "setCardActionsColorPopup-title": "Choose a color",
-    "setSwimlaneColorPopup-title": "Choose a color",
-    "setListColorPopup-title": "Choose a color",
+    "setCardColorPopup-title": "Ustaw kolor",
+    "setCardActionsColorPopup-title": "Wybierz kolor",
+    "setSwimlaneColorPopup-title": "Wybierz kolor",
+    "setListColorPopup-title": "Wybierz kolor",
     "assigned-by": "Przypisane przez",
     "assigned-by": "Przypisane przez",
     "requested-by": "Zlecone przez",
     "requested-by": "Zlecone przez",
     "board-delete-notice": "Usuwanie jest permanentne. Stracisz wszystkie listy, kart oraz czynności przypisane do tej tablicy.",
     "board-delete-notice": "Usuwanie jest permanentne. Stracisz wszystkie listy, kart oraz czynności przypisane do tej tablicy.",
@@ -561,14 +561,14 @@
     "r-delete-rule": "Usuń regułę",
     "r-delete-rule": "Usuń regułę",
     "r-new-rule-name": "Nowa nazwa reguły",
     "r-new-rule-name": "Nowa nazwa reguły",
     "r-no-rules": "Brak regułę",
     "r-no-rules": "Brak regułę",
-    "r-when-a-card": "When a card",
+    "r-when-a-card": "Gdy karta",
     "r-is": "jest",
     "r-is": "jest",
-    "r-is-moved": "is moved",
-    "r-added-to": "added to",
+    "r-is-moved": "jest przenoszona",
+    "r-added-to": "dodana do",
     "r-removed-from": "Usunięto z",
     "r-removed-from": "Usunięto z",
     "r-the-board": "tablicy",
     "r-the-board": "tablicy",
     "r-list": "lista",
     "r-list": "lista",
-    "set-filter": "Set Filter",
+    "set-filter": "Ustaw filtr",
     "r-moved-to": "Przeniesiono do",
     "r-moved-to": "Przeniesiono do",
     "r-moved-from": "Przeniesiono z",
     "r-moved-from": "Przeniesiono z",
     "r-archived": "Przeniesione z Archiwum",
     "r-archived": "Przeniesione z Archiwum",
@@ -576,7 +576,7 @@
     "r-a-card": "karta",
     "r-a-card": "karta",
     "r-when-a-label-is": "Gdy etykieta jest",
     "r-when-a-label-is": "Gdy etykieta jest",
     "r-when-the-label-is": "Gdy etykieta jest",
     "r-when-the-label-is": "Gdy etykieta jest",
-    "r-list-name": "list name",
+    "r-list-name": "nazwa listy",
     "r-when-a-member": "Gdy członek jest",
     "r-when-a-member": "Gdy członek jest",
     "r-when-the-member": "Gdy członek jest",
     "r-when-the-member": "Gdy członek jest",
     "r-name": "nazwa",
     "r-name": "nazwa",
@@ -601,7 +601,7 @@
     "r-label": "etykieta",
     "r-label": "etykieta",
     "r-member": "członek",
     "r-member": "członek",
     "r-remove-all": "Usuń wszystkich członków tej karty",
     "r-remove-all": "Usuń wszystkich członków tej karty",
-    "r-set-color": "Set color to",
+    "r-set-color": "Ustaw kolor na",
     "r-checklist": "lista zadań",
     "r-checklist": "lista zadań",
     "r-check-all": "Zaznacz wszystkie",
     "r-check-all": "Zaznacz wszystkie",
     "r-uncheck-all": "Odznacz wszystkie",
     "r-uncheck-all": "Odznacz wszystkie",
@@ -626,9 +626,9 @@
     "r-d-unarchive": "Przywróć kartę z Archiwum",
     "r-d-unarchive": "Przywróć kartę z Archiwum",
     "r-d-add-label": "Dodaj etykietę",
     "r-d-add-label": "Dodaj etykietę",
     "r-d-remove-label": "Usuń etykietę",
     "r-d-remove-label": "Usuń etykietę",
-    "r-create-card": "Create new card",
-    "r-in-list": "in list",
-    "r-in-swimlane": "in swimlane",
+    "r-create-card": "Utwórz nową kartę",
+    "r-in-list": "na liście",
+    "r-in-swimlane": "w diagramie zdarzeń",
     "r-d-add-member": "Dodaj członka",
     "r-d-add-member": "Dodaj członka",
     "r-d-remove-member": "Usuń członka",
     "r-d-remove-member": "Usuń członka",
     "r-d-remove-all-member": "Usuń wszystkich członków",
     "r-d-remove-all-member": "Usuń wszystkich członków",
@@ -639,14 +639,14 @@
     "r-d-check-of-list": "z listy zadań",
     "r-d-check-of-list": "z listy zadań",
     "r-d-add-checklist": "Dodaj listę zadań",
     "r-d-add-checklist": "Dodaj listę zadań",
     "r-d-remove-checklist": "Usuń listę zadań",
     "r-d-remove-checklist": "Usuń listę zadań",
-    "r-by": "by",
+    "r-by": "przez",
     "r-add-checklist": "Dodaj listę zadań",
     "r-add-checklist": "Dodaj listę zadań",
-    "r-with-items": "with items",
-    "r-items-list": "item1,item2,item3",
-    "r-add-swimlane": "Add swimlane",
-    "r-swimlane-name": "swimlane name",
-    "r-board-note": "Note: leave a field empty to match every possible value.",
-    "r-checklist-note": "Note: checklist's items have to be written as comma separated values.",
+    "r-with-items": "z elementami",
+    "r-items-list": "element1,element2,element3",
+    "r-add-swimlane": "Dodaj diagram zdarzeń",
+    "r-swimlane-name": "Nazwa diagramu",
+    "r-board-note": "Uwaga: pozostaw pole puste, aby każda wartość była brana pod uwagę.",
+    "r-checklist-note": "Uwaga: wartości elementów listy muszą być oddzielone przecinkami.",
     "r-when-a-card-is-moved": "Gdy karta jest przeniesiona do innej listy",
     "r-when-a-card-is-moved": "Gdy karta jest przeniesiona do innej listy",
     "ldap": "LDAP",
     "ldap": "LDAP",
     "oauth2": "OAuth2",
     "oauth2": "OAuth2",
@@ -656,8 +656,10 @@
     "custom-product-name": "Niestandardowa nazwa produktu",
     "custom-product-name": "Niestandardowa nazwa produktu",
     "layout": "Układ strony",
     "layout": "Układ strony",
     "hide-logo": "Ukryj logo",
     "hide-logo": "Ukryj logo",
-    "add-custom-html-after-body-start": "Add Custom HTML after <body> start",
-    "add-custom-html-before-body-end": "Add Custom HTML before </body> end",
-    "error-undefined": "Something went wrong",
-    "error-ldap-login": "An error occurred while trying to login"
+    "add-custom-html-after-body-start": "Dodaj niestandardowy kod HTML po <body> starcie",
+    "add-custom-html-before-body-end": "Dodaj niestandardowy kod HTML przed </body> końcem",
+    "error-undefined": "Coś poszło nie tak",
+    "error-ldap-login": "Wystąpił błąd w trakcie logowania",
+    "display-authentication-method": "Wyświetl metodę logowania",
+    "default-authentication-method": "Domyślna metoda logowania"
 }
 }

+ 9 - 7
i18n/pt-BR.i18n.json

@@ -192,7 +192,7 @@
     "color-slateblue": "azul ardósia",
     "color-slateblue": "azul ardósia",
     "color-white": "branco",
     "color-white": "branco",
     "color-yellow": "amarelo",
     "color-yellow": "amarelo",
-    "unset-color": "Unset",
+    "unset-color": "Remover",
     "comment": "Comentário",
     "comment": "Comentário",
     "comment-placeholder": "Escrever Comentário",
     "comment-placeholder": "Escrever Comentário",
     "comment-only": "Somente comentários",
     "comment-only": "Somente comentários",
@@ -335,10 +335,10 @@
     "list-archive-cards-pop": "Isto removerá todos os cartões desta lista para o quadro. Para visualizar cartões arquivados e trazê-los de volta para o quadro, clique em “Menu” > “Arquivo-morto”.",
     "list-archive-cards-pop": "Isto removerá todos os cartões desta lista para o quadro. Para visualizar cartões arquivados e trazê-los de volta para o quadro, clique em “Menu” > “Arquivo-morto”.",
     "list-move-cards": "Mover todos os cartões desta lista",
     "list-move-cards": "Mover todos os cartões desta lista",
     "list-select-cards": "Selecionar todos os cartões nesta lista",
     "list-select-cards": "Selecionar todos os cartões nesta lista",
-    "set-color-list": "Set Color",
+    "set-color-list": "Definir Cor",
     "listActionPopup-title": "Listar Ações",
     "listActionPopup-title": "Listar Ações",
     "swimlaneActionPopup-title": "Ações de Raia",
     "swimlaneActionPopup-title": "Ações de Raia",
-    "swimlaneAddPopup-title": "Add a Swimlane below",
+    "swimlaneAddPopup-title": "Adicionar uma Raia abaixo ",
     "listImportCardPopup-title": "Importe um cartão do Trello",
     "listImportCardPopup-title": "Importe um cartão do Trello",
     "listMorePopup-title": "Mais",
     "listMorePopup-title": "Mais",
     "link-list": "Vincular a esta lista",
     "link-list": "Vincular a esta lista",
@@ -520,9 +520,9 @@
     "editCardReceivedDatePopup-title": "Modificar data de recebimento",
     "editCardReceivedDatePopup-title": "Modificar data de recebimento",
     "editCardEndDatePopup-title": "Mudar data de fim",
     "editCardEndDatePopup-title": "Mudar data de fim",
     "setCardColorPopup-title": "Definir cor",
     "setCardColorPopup-title": "Definir cor",
-    "setCardActionsColorPopup-title": "Choose a color",
-    "setSwimlaneColorPopup-title": "Choose a color",
-    "setListColorPopup-title": "Choose a color",
+    "setCardActionsColorPopup-title": "Escolha uma cor",
+    "setSwimlaneColorPopup-title": "Escolha uma cor",
+    "setListColorPopup-title": "Escolha uma cor",
     "assigned-by": "Atribuído por",
     "assigned-by": "Atribuído por",
     "requested-by": "Solicitado por",
     "requested-by": "Solicitado por",
     "board-delete-notice": "Excluir é permanente. Você perderá todas as listas, cartões e ações associados nesse quadro.",
     "board-delete-notice": "Excluir é permanente. Você perderá todas as listas, cartões e ações associados nesse quadro.",
@@ -659,5 +659,7 @@
     "add-custom-html-after-body-start": "Adicionar HTML Customizado depois do início do <body>",
     "add-custom-html-after-body-start": "Adicionar HTML Customizado depois do início do <body>",
     "add-custom-html-before-body-end": "Adicionar HTML Customizado antes do fim do </body>",
     "add-custom-html-before-body-end": "Adicionar HTML Customizado antes do fim do </body>",
     "error-undefined": "Algo deu errado",
     "error-undefined": "Algo deu errado",
-    "error-ldap-login": "Um erro ocorreu enquanto tentava entrar"
+    "error-ldap-login": "Um erro ocorreu enquanto tentava entrar",
+    "display-authentication-method": "Mostrar Método de Autenticação",
+    "default-authentication-method": "Método de Autenticação Padrão"
 }
 }

+ 3 - 1
i18n/pt.i18n.json

@@ -659,5 +659,7 @@
     "add-custom-html-after-body-start": "Add Custom HTML after <body> start",
     "add-custom-html-after-body-start": "Add Custom HTML after <body> start",
     "add-custom-html-before-body-end": "Add Custom HTML before </body> end",
     "add-custom-html-before-body-end": "Add Custom HTML before </body> end",
     "error-undefined": "Something went wrong",
     "error-undefined": "Something went wrong",
-    "error-ldap-login": "An error occurred while trying to login"
+    "error-ldap-login": "An error occurred while trying to login",
+    "display-authentication-method": "Display Authentication Method",
+    "default-authentication-method": "Default Authentication Method"
 }
 }

+ 3 - 1
i18n/ro.i18n.json

@@ -659,5 +659,7 @@
     "add-custom-html-after-body-start": "Add Custom HTML after <body> start",
     "add-custom-html-after-body-start": "Add Custom HTML after <body> start",
     "add-custom-html-before-body-end": "Add Custom HTML before </body> end",
     "add-custom-html-before-body-end": "Add Custom HTML before </body> end",
     "error-undefined": "Something went wrong",
     "error-undefined": "Something went wrong",
-    "error-ldap-login": "An error occurred while trying to login"
+    "error-ldap-login": "An error occurred while trying to login",
+    "display-authentication-method": "Display Authentication Method",
+    "default-authentication-method": "Default Authentication Method"
 }
 }

+ 3 - 1
i18n/ru.i18n.json

@@ -659,5 +659,7 @@
     "add-custom-html-after-body-start": "Добавить HTML после начала <body> ",
     "add-custom-html-after-body-start": "Добавить HTML после начала <body> ",
     "add-custom-html-before-body-end": "Добавить HTML до завершения </body>",
     "add-custom-html-before-body-end": "Добавить HTML до завершения </body>",
     "error-undefined": "Что-то пошло не так",
     "error-undefined": "Что-то пошло не так",
-    "error-ldap-login": "Ошибка при попытке авторизации"
+    "error-ldap-login": "Ошибка при попытке авторизации",
+    "display-authentication-method": "Показывать способ авторизации",
+    "default-authentication-method": "Способ авторизации по умолчанию"
 }
 }

+ 3 - 1
i18n/sr.i18n.json

@@ -659,5 +659,7 @@
     "add-custom-html-after-body-start": "Add Custom HTML after <body> start",
     "add-custom-html-after-body-start": "Add Custom HTML after <body> start",
     "add-custom-html-before-body-end": "Add Custom HTML before </body> end",
     "add-custom-html-before-body-end": "Add Custom HTML before </body> end",
     "error-undefined": "Something went wrong",
     "error-undefined": "Something went wrong",
-    "error-ldap-login": "An error occurred while trying to login"
+    "error-ldap-login": "An error occurred while trying to login",
+    "display-authentication-method": "Display Authentication Method",
+    "default-authentication-method": "Default Authentication Method"
 }
 }

+ 3 - 1
i18n/sv.i18n.json

@@ -659,5 +659,7 @@
     "add-custom-html-after-body-start": "Add Custom HTML after <body> start",
     "add-custom-html-after-body-start": "Add Custom HTML after <body> start",
     "add-custom-html-before-body-end": "Add Custom HTML before </body> end",
     "add-custom-html-before-body-end": "Add Custom HTML before </body> end",
     "error-undefined": "Något gick fel",
     "error-undefined": "Något gick fel",
-    "error-ldap-login": "Ett fel uppstod när du försökte logga in"
+    "error-ldap-login": "Ett fel uppstod när du försökte logga in",
+    "display-authentication-method": "Display Authentication Method",
+    "default-authentication-method": "Default Authentication Method"
 }
 }

+ 3 - 1
i18n/sw.i18n.json

@@ -659,5 +659,7 @@
     "add-custom-html-after-body-start": "Add Custom HTML after <body> start",
     "add-custom-html-after-body-start": "Add Custom HTML after <body> start",
     "add-custom-html-before-body-end": "Add Custom HTML before </body> end",
     "add-custom-html-before-body-end": "Add Custom HTML before </body> end",
     "error-undefined": "Something went wrong",
     "error-undefined": "Something went wrong",
-    "error-ldap-login": "An error occurred while trying to login"
+    "error-ldap-login": "An error occurred while trying to login",
+    "display-authentication-method": "Display Authentication Method",
+    "default-authentication-method": "Default Authentication Method"
 }
 }

+ 3 - 1
i18n/ta.i18n.json

@@ -659,5 +659,7 @@
     "add-custom-html-after-body-start": "Add Custom HTML after <body> start",
     "add-custom-html-after-body-start": "Add Custom HTML after <body> start",
     "add-custom-html-before-body-end": "Add Custom HTML before </body> end",
     "add-custom-html-before-body-end": "Add Custom HTML before </body> end",
     "error-undefined": "Something went wrong",
     "error-undefined": "Something went wrong",
-    "error-ldap-login": "An error occurred while trying to login"
+    "error-ldap-login": "An error occurred while trying to login",
+    "display-authentication-method": "Display Authentication Method",
+    "default-authentication-method": "Default Authentication Method"
 }
 }

+ 3 - 1
i18n/th.i18n.json

@@ -659,5 +659,7 @@
     "add-custom-html-after-body-start": "Add Custom HTML after <body> start",
     "add-custom-html-after-body-start": "Add Custom HTML after <body> start",
     "add-custom-html-before-body-end": "Add Custom HTML before </body> end",
     "add-custom-html-before-body-end": "Add Custom HTML before </body> end",
     "error-undefined": "Something went wrong",
     "error-undefined": "Something went wrong",
-    "error-ldap-login": "An error occurred while trying to login"
+    "error-ldap-login": "An error occurred while trying to login",
+    "display-authentication-method": "Display Authentication Method",
+    "default-authentication-method": "Default Authentication Method"
 }
 }

+ 3 - 1
i18n/tr.i18n.json

@@ -659,5 +659,7 @@
     "add-custom-html-after-body-start": "Add Custom HTML after <body> start",
     "add-custom-html-after-body-start": "Add Custom HTML after <body> start",
     "add-custom-html-before-body-end": "Add Custom HTML before </body> end",
     "add-custom-html-before-body-end": "Add Custom HTML before </body> end",
     "error-undefined": "Bir şeyler yanlış gitti",
     "error-undefined": "Bir şeyler yanlış gitti",
-    "error-ldap-login": "Giriş yapmaya çalışırken bir hata oluştu"
+    "error-ldap-login": "Giriş yapmaya çalışırken bir hata oluştu",
+    "display-authentication-method": "Display Authentication Method",
+    "default-authentication-method": "Default Authentication Method"
 }
 }

+ 3 - 1
i18n/uk.i18n.json

@@ -659,5 +659,7 @@
     "add-custom-html-after-body-start": "Add Custom HTML after <body> start",
     "add-custom-html-after-body-start": "Add Custom HTML after <body> start",
     "add-custom-html-before-body-end": "Add Custom HTML before </body> end",
     "add-custom-html-before-body-end": "Add Custom HTML before </body> end",
     "error-undefined": "Something went wrong",
     "error-undefined": "Something went wrong",
-    "error-ldap-login": "An error occurred while trying to login"
+    "error-ldap-login": "An error occurred while trying to login",
+    "display-authentication-method": "Display Authentication Method",
+    "default-authentication-method": "Default Authentication Method"
 }
 }

+ 3 - 1
i18n/vi.i18n.json

@@ -659,5 +659,7 @@
     "add-custom-html-after-body-start": "Add Custom HTML after <body> start",
     "add-custom-html-after-body-start": "Add Custom HTML after <body> start",
     "add-custom-html-before-body-end": "Add Custom HTML before </body> end",
     "add-custom-html-before-body-end": "Add Custom HTML before </body> end",
     "error-undefined": "Something went wrong",
     "error-undefined": "Something went wrong",
-    "error-ldap-login": "An error occurred while trying to login"
+    "error-ldap-login": "An error occurred while trying to login",
+    "display-authentication-method": "Display Authentication Method",
+    "default-authentication-method": "Default Authentication Method"
 }
 }

+ 3 - 1
i18n/zh-CN.i18n.json

@@ -659,5 +659,7 @@
     "add-custom-html-after-body-start": "添加定制的HTML在开始<body>之前",
     "add-custom-html-after-body-start": "添加定制的HTML在开始<body>之前",
     "add-custom-html-before-body-end": "添加定制的HTML在结束</body>之后",
     "add-custom-html-before-body-end": "添加定制的HTML在结束</body>之后",
     "error-undefined": "出了点问题",
     "error-undefined": "出了点问题",
-    "error-ldap-login": "尝试登陆时出错"
+    "error-ldap-login": "尝试登陆时出错",
+    "display-authentication-method": "显示认证方式",
+    "default-authentication-method": "缺省认证方式"
 }
 }

+ 3 - 1
i18n/zh-TW.i18n.json

@@ -659,5 +659,7 @@
     "add-custom-html-after-body-start": "Add Custom HTML after <body> start",
     "add-custom-html-after-body-start": "Add Custom HTML after <body> start",
     "add-custom-html-before-body-end": "Add Custom HTML before </body> end",
     "add-custom-html-before-body-end": "Add Custom HTML before </body> end",
     "error-undefined": "Something went wrong",
     "error-undefined": "Something went wrong",
-    "error-ldap-login": "An error occurred while trying to login"
+    "error-ldap-login": "An error occurred while trying to login",
+    "display-authentication-method": "Display Authentication Method",
+    "default-authentication-method": "Default Authentication Method"
 }
 }

+ 10 - 1
models/settings.js

@@ -40,6 +40,14 @@ Settings.attachSchema(new SimpleSchema({
     type: String,
     type: String,
     optional: true,
     optional: true,
   },
   },
+  displayAuthenticationMethod: {
+    type: Boolean,
+    optional: true,
+  },
+  defaultAuthenticationMethod: {
+    type: String,
+    optional: false,
+  },
   hideLogo: {
   hideLogo: {
     type: Boolean,
     type: Boolean,
     optional: true,
     optional: true,
@@ -85,7 +93,8 @@ if (Meteor.isServer) {
       const from = `Boards Support <support@${domain}>`;
       const from = `Boards Support <support@${domain}>`;
       const defaultSetting = {disableRegistration: false, mailServer: {
       const defaultSetting = {disableRegistration: false, mailServer: {
         username: '', password: '', host: '', port: '', enableTLS: false, from,
         username: '', password: '', host: '', port: '', enableTLS: false, from,
-      }, createdAt: now, modifiedAt: now};
+      }, createdAt: now, modifiedAt: now, displayAuthenticationMethod: true,
+      defaultAuthenticationMethod: 'password'};
       Settings.insert(defaultSetting);
       Settings.insert(defaultSetting);
     }
     }
     const newSetting = Settings.findOne();
     const newSetting = Settings.findOne();

+ 1 - 1
package.json

@@ -1,6 +1,6 @@
 {
 {
   "name": "wekan",
   "name": "wekan",
-  "version": "v2.17.0",
+  "version": "v2.20.0",
   "description": "Open-Source kanban",
   "description": "Open-Source kanban",
   "private": true,
   "private": true,
   "scripts": {
   "scripts": {

+ 3 - 0
releases/virtualbox/start-wekan.sh

@@ -70,6 +70,9 @@
         # example: export OAUTH2_TOKEN_ENDPOINT=/oauth/token
         # example: export OAUTH2_TOKEN_ENDPOINT=/oauth/token
         #export OAUTH2_TOKEN_ENDPOINT=''
         #export OAUTH2_TOKEN_ENDPOINT=''
         #---------------------------------------------
         #---------------------------------------------
+        # Debug OIDC OAuth2 etc.
+        #export DEBUG=true
+        #---------------------------------------------
         # LDAP_ENABLE : Enable or not the connection by the LDAP
         # LDAP_ENABLE : Enable or not the connection by the LDAP
         # example :  export LDAP_ENABLE=true
         # example :  export LDAP_ENABLE=true
         #export LDAP_ENABLE=false
         #export LDAP_ENABLE=false

+ 2 - 2
sandstorm-pkgdef.capnp

@@ -22,10 +22,10 @@ const pkgdef :Spk.PackageDefinition = (
     appTitle = (defaultText = "Wekan"),
     appTitle = (defaultText = "Wekan"),
     # The name of the app as it is displayed to the user.
     # The name of the app as it is displayed to the user.
 
 
-    appVersion = 219,
+    appVersion = 222,
     # Increment this for every release.
     # Increment this for every release.
 
 
-    appMarketingVersion = (defaultText = "2.17.0~2019-02-04"),
+    appMarketingVersion = (defaultText = "2.20.0~2019-02-11"),
     # Human-readable presentation of the app version.
     # Human-readable presentation of the app version.
 
 
     minUpgradableAppVersion = 0,
     minUpgradableAppVersion = 0,

+ 24 - 0
server/migrations.js

@@ -398,3 +398,27 @@ Migrations.add('add-custom-html-before-body-end', () => {
     },
     },
   }, noValidateMulti);
   }, noValidateMulti);
 });
 });
+
+Migrations.add('add-displayAuthenticationMethod', () => {
+  Settings.update({
+    displayAuthenticationMethod: {
+      $exists: false,
+    },
+  }, {
+    $set: {
+      displayAuthenticationMethod: true,
+    },
+  }, noValidateMulti);
+});
+
+Migrations.add('add-defaultAuthenticationMethod', () => {
+  Settings.update({
+    defaultAuthenticationMethod: {
+      $exists: false,
+    },
+  }, {
+    $set: {
+      defaultAuthenticationMethod: 'password',
+    },
+  }, noValidateMulti);
+});

+ 11 - 1
server/publications/settings.js

@@ -1,5 +1,15 @@
 Meteor.publish('setting', () => {
 Meteor.publish('setting', () => {
-  return Settings.find({}, {fields:{disableRegistration: 1, productName: 1, hideLogo: 1, customHTMLafterBodyStart: 1, customHTMLbeforeBodyEnd: 1}});
+  return Settings.find({}, {
+    fields:{
+      disableRegistration: 1,
+      productName: 1,
+      hideLogo: 1,
+      customHTMLafterBodyStart: 1,
+      customHTMLbeforeBodyEnd: 1,
+      displayAuthenticationMethod: 1,
+      defaultAuthenticationMethod: 1,
+    },
+  });
 });
 });
 
 
 Meteor.publish('mailServer', function () {
 Meteor.publish('mailServer', function () {

+ 5 - 2
snap-src/bin/config

@@ -3,7 +3,7 @@
 # All supported keys are defined here together with descriptions and default values
 # All supported keys are defined here together with descriptions and default values
 
 
 # list of supported keys
 # list of supported keys
-keys="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 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 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 LOGOUT_WITH_TIMER LOGOUT_IN LOGOUT_ON_HOURS LOGOUT_ON_MINUTES DEFAULT_AUTHENTICATION_METHOD"
+keys="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 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 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 LOGOUT_WITH_TIMER LOGOUT_IN LOGOUT_ON_HOURS LOGOUT_ON_MINUTES DEFAULT_AUTHENTICATION_METHOD DEBUG"
 
 
 # default values
 # default values
 DESCRIPTION_MONGODB_BIND_UNIX_SOCKET="mongodb binding unix socket:\n"\
 DESCRIPTION_MONGODB_BIND_UNIX_SOCKET="mongodb binding unix socket:\n"\
@@ -290,7 +290,10 @@ DESCRIPTION_LOGOUT_ON_MINUTES="The number of minutes"
 DEFAULT_LOGOUT_ON_MINUTES=""
 DEFAULT_LOGOUT_ON_MINUTES=""
 KEY_LOGOUT_ON_MINUTES="logout-on-minutes"
 KEY_LOGOUT_ON_MINUTES="logout-on-minutes"
 
 
-
 DESCRIPTION_DEFAULT_AUTHENTICATION_METHOD="The default authentication method used if a user does not exist to create and authenticate. Method can be password or ldap."
 DESCRIPTION_DEFAULT_AUTHENTICATION_METHOD="The default authentication method used if a user does not exist to create and authenticate. Method can be password or ldap."
 DEFAULT_DEFAULT_AUTHENTICATION_METHOD=""
 DEFAULT_DEFAULT_AUTHENTICATION_METHOD=""
 KEY_DEFAULT_AUTHENTICATION_METHOD="default-authentication-method"
 KEY_DEFAULT_AUTHENTICATION_METHOD="default-authentication-method"
+
+DESCRIPTION_DEBUG="Debug OIDC etc. Example: sudo snap set wekan debug='true'"
+DEFAULT_DEBUG="false"
+KEY_DEBUG="debug"

+ 1 - 1
snap-src/bin/mongodb-control

@@ -29,4 +29,4 @@ if [ "x" != "x${MONGODB_PORT}" ]; then
 fi
 fi
 echo "mongodb bind options: $BIND_OPTIONS"
 echo "mongodb bind options: $BIND_OPTIONS"
 
 
-mongod --dbpath $SNAP_COMMON --logpath $SNAP_COMMON/mongodb.log --logappend --journal $BIND_OPTIONS
+mongod --dbpath $SNAP_COMMON --logpath $SNAP_COMMON/mongodb.log --logappend --journal $BIND_OPTIONS --smallfiles

+ 6 - 0
snap-src/bin/wekan-help

@@ -100,6 +100,12 @@ echo -e "\t$ snap set $SNAP_NAME OAUTH2_TOKEN_ENDPOINT='/oauth/token'"
 echo -e "\t-Disable the OAuth2 Token Endpoint of Wekan:"
 echo -e "\t-Disable the OAuth2 Token Endpoint of Wekan:"
 echo -e "\t$ snap set $SNAP_NAME OAUTH2_TOKEN_ENDPOINT=''"
 echo -e "\t$ snap set $SNAP_NAME OAUTH2_TOKEN_ENDPOINT=''"
 echo -e "\n"
 echo -e "\n"
+echo -e "Debug OIDC OAuth2 etc."
+echo -e "To enable the Debug of Wekan:"
+echo -e "\t$ snap set $SNAP_NAME DEBUG='true'"
+echo -e "\t-Disable the Debug of Wekan:"
+echo -e "\t$ snap set $SNAP_NAME DEBUG='false'"
+echo -e "\n"
 echo -e "Ldap Enable."
 echo -e "Ldap Enable."
 echo -e "To enable the ldap of Wekan:"
 echo -e "To enable the ldap of Wekan:"
 echo -e "\t$ snap set $SNAP_NAME LDAP_ENABLE='true'"
 echo -e "\t$ snap set $SNAP_NAME LDAP_ENABLE='true'"

+ 6 - 1
start-wekan.bat

@@ -69,6 +69,11 @@ REM SET OAUTH2_TOKEN_ENDPOINT=
 
 
 REM ------------------------------------------------------------
 REM ------------------------------------------------------------
 
 
+REM # Debug OIDC OAuth2 etc.
+REM SET DEBUG=true
+
+REM ------------------------------------------------------------
+
 REM # LDAP_ENABLE : Enable or not the connection by the LDAP
 REM # LDAP_ENABLE : Enable or not the connection by the LDAP
 REM # example : LDAP_ENABLE=true
 REM # example : LDAP_ENABLE=true
 REM SET LDAP_ENABLE=false
 REM SET LDAP_ENABLE=false
@@ -245,4 +250,4 @@ REM SET LOGOUT_ON_MINUTES=
 
 
 cd .build\bundle
 cd .build\bundle
 node main.js
 node main.js
-cd ..\..
+cd ..\..

+ 3 - 0
start-wekan.sh

@@ -88,6 +88,9 @@ function wekan_repo_check(){
       # example: export OAUTH2_TOKEN_ENDPOINT=/oauth/token
       # example: export OAUTH2_TOKEN_ENDPOINT=/oauth/token
       #export OAUTH2_TOKEN_ENDPOINT=''
       #export OAUTH2_TOKEN_ENDPOINT=''
       #---------------------------------------------
       #---------------------------------------------
+      # Debug OIDC OAuth2 etc.
+      #export DEBUG=true
+      #---------------------------------------------
       # LDAP_ENABLE : Enable or not the connection by the LDAP
       # LDAP_ENABLE : Enable or not the connection by the LDAP
       # example :  export LDAP_ENABLE=true
       # example :  export LDAP_ENABLE=true
       #export LDAP_ENABLE=false
       #export LDAP_ENABLE=false