فهرست منبع

- Revert "Improve authentication" and "Default Authentication Method"
to make login work again.
- Fixes to docker-compose.yml so that Wekan Meteor 1.6.x version would work.
Most likely Meteor 1.8.x version is still broken.

Thanks to xet7 !

Lauri Ojansivu 6 سال پیش
والد
کامیت
c502ab9500

+ 4 - 9
client/components/main/editor.js

@@ -9,12 +9,10 @@ Template.editor.onRendered(() => {
       match: /\B@([\w.]*)$/,
       search(term, callback) {
         const currentBoard = Boards.findOne(Session.get('currentBoard'));
-        if (currentBoard) {
-          callback(currentBoard.activeMembers().map((member) => {
-            const username = Users.findOne(member.userId).username;
-            return username.includes(term) ? username : null;
-          }).filter(Boolean));
-        }
+        callback(currentBoard.activeMembers().map((member) => {
+          const username = Users.findOne(member.userId).username;
+          return username.includes(term) ? username : null;
+        }).filter(Boolean));
       },
       template(value) {
         return value;
@@ -39,9 +37,6 @@ const at = HTML.CharRef({html: '@', str: '@'});
 Blaze.Template.registerHelper('mentions', new Template('mentions', function() {
   const view = this;
   const currentBoard = Boards.findOne(Session.get('currentBoard'));
-  if (!currentBoard) {
-    return HTML.Raw('');
-  }
   const knowedUsers = currentBoard.members.map((member) => {
     const u = Users.findOne(member.userId);
     if(u){

+ 1 - 0
client/components/main/layouts.jade

@@ -23,6 +23,7 @@ template(name="userFormsLayout")
         br
     section.auth-dialog
       +Template.dynamic(template=content)
+      +connectionMethod
       if isCas
         .at-form
           button#cas(class='at-btn submit' type='submit') {{casSignInLabel}}

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

@@ -6,14 +6,29 @@ const i18nTagToT9n = (i18nTag) => {
   return i18nTag;
 };
 
-Template.userFormsLayout.onCreated(function() {
-  Meteor.call('getDefaultAuthenticationMethod', (error, result) => {
-    this.data.defaultAuthenticationMethod = new ReactiveVar(error ? undefined : result);
-  });
+const validator = {
+  set(obj, prop, value) {
+    if (prop === 'state' && value !== 'signIn') {
+      $('.at-form-authentication').hide();
+    } else if (prop === 'state' && value === 'signIn') {
+      $('.at-form-authentication').show();
+    }
+    // The default behavior to store the value
+    obj[prop] = value;
+    // Indicate success
+    return true;
+  },
+};
+
+Template.userFormsLayout.onCreated(() => {
   Meteor.subscribe('setting');
+
 });
 
 Template.userFormsLayout.onRendered(() => {
+
+  AccountsTemplates.state.form.keys = new Proxy(AccountsTemplates.state.form.keys, validator);
+
   const i18nTag = navigator.language;
   if (i18nTag) {
     T9n.setLanguage(i18nTagToT9n(i18nTag));
@@ -86,11 +101,13 @@ Template.userFormsLayout.events({
       }
     });
   },
-  'click #at-btn'(event, instance) {
-    const email = $('#at-field-username_and_email').val();
-    const password = $('#at-field-password').val();
-
-    if (FlowRouter.getRouteName() !== 'atSignIn' || password === '' || email === '') {
+  '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;
     }
 
@@ -98,11 +115,29 @@ Template.userFormsLayout.events({
     event.preventDefault();
     event.stopImmediatePropagation();
 
-    Meteor.subscribe('user-authenticationMethod', email, {
-      onReady() {
-        return authentication.call(this, instance, email, password);
-      },
-    });
+    const email = $('#at-field-username_and_email').val();
+    const password = $('#at-field-password').val();
+
+    // Ldap account
+    if (authenticationMethodSelected === 'ldap') {
+      // Check if the user can use the ldap connection
+      Meteor.subscribe('user-authenticationMethod', email, {
+        onReady() {
+          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();
+        },
+      });
+    }
   },
 });
 
@@ -111,49 +146,3 @@ Template.defaultLayout.events({
     Modal.close();
   },
 });
-
-function authentication(instance, email, password) {
-  const user = Users.findOne();
-
-  // Authentication with password
-  if (user && user.authenticationMethod === 'password') {
-    $('#at-pwd-form').submit();
-    return this.stop();
-  }
-
-  const authenticationMethod = user
-    ? user.authenticationMethod
-    : instance.data.defaultAuthenticationMethod.get();
-
-  switch (authenticationMethod) {
-  case 'ldap':
-    // Use the ldap connection package
-    Meteor.loginWithLDAP(email, password, function(error) {
-      if (error) {
-        displayError('error-ldap-login');
-        return this.stop();
-      } else {
-        return FlowRouter.go('/');
-      }
-    });
-    break;
-
-  default:
-    displayError('error-undefined');
-  }
-
-  return this.stop();
-}
-
-function displayError(code) {
-  const translated = TAPi18n.__(code);
-
-  if (translated === code) {
-    return;
-  }
-
-  if(!$('.at-error').length) {
-    $('.at-pwd-form').before('<div class="at-error"><p></p></div>');
-  }
-  $('.at-error p').text(translated);
-}

+ 6 - 0
client/components/settings/connectionMethod.jade

@@ -0,0 +1,6 @@
+template(name='connectionMethod')
+  div.at-form-authentication
+    label {{_ 'authentication-method'}}
+    select.select-authentication
+        each authentications
+            option(value="{{value}}") {{_ value}}

+ 34 - 0
client/components/settings/connectionMethod.js

@@ -0,0 +1,34 @@
+Template.connectionMethod.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]})),
+      ]);
+    }
+
+    // If only the default authentication available, hides the select boxe
+    const content = $('.at-form-authentication');
+    if (!(this.authenticationMethods.get().length > 1)) {
+      content.hide();
+    } else {
+      content.show();
+    }
+  });
+});
+
+Template.connectionMethod.onRendered(() => {
+  // Moves the select boxe in the first place of the at-pwd-form div
+  $('.at-form-authentication').detach().prependTo('.at-pwd-form');
+});
+
+Template.connectionMethod.helpers({
+  authentications() {
+    return Template.instance().authenticationMethods.get();
+  },
+});

+ 12 - 11
docker-compose.yml

@@ -128,17 +128,18 @@ services:
       - wekan-tier
     #-------------------------------------------------------------------------------------
     # ==== BUILD wekan-app DOCKER CONTAINER FROM SOURCE, if you uncomment these ====
-    #build:
-    #  context: .
-    #  dockerfile: Dockerfile
-    #  args:
-    #    - NODE_VERSION=${NODE_VERSION}
-    #    - METEOR_RELEASE=${METEOR_RELEASE}
-    #    - NPM_VERSION=${NPM_VERSION}
-    #    - ARCHITECTURE=${ARCHITECTURE}
-    #    - SRC_PATH=${SRC_PATH}
-    #    - METEOR_EDGE=${METEOR_EDGE}
-    #    - USE_EDGE=${USE_EDGE}
+    # ==== and use commands: docker-compose up -d --build
+    build:
+      context: .
+      dockerfile: Dockerfile
+      args:
+        - NODE_VERSION=${NODE_VERSION}
+        - METEOR_RELEASE=${METEOR_RELEASE}
+        - NPM_VERSION=${NPM_VERSION}
+        - ARCHITECTURE=${ARCHITECTURE}
+        - SRC_PATH=${SRC_PATH}
+        - METEOR_EDGE=${METEOR_EDGE}
+        - USE_EDGE=${USE_EDGE}
     #-------------------------------------------------------------------------------------
     ports:
       # Docker outsideport:insideport. Do not add anything extra here.

+ 1 - 2
sandstorm-pkgdef.capnp

@@ -254,7 +254,6 @@ const myCommand :Spk.Manifest.Command = (
     (key = "OAUTH2_TOKEN_ENDPOINT", value=""),
     (key = "LDAP_ENABLE", value="false"),
     (key = "SANDSTORM", value = "1"),
-    (key = "METEOR_SETTINGS", value = "{\"public\": {\"sandstorm\": true}}"),
-    (key = "DEFAULT_AUTHENTICATION_METHOD", value = "")
+    (key = "METEOR_SETTINGS", value = "{\"public\": {\"sandstorm\": true}}")
   ]
 );