From e3a40aca6f09ced580df26f438855107752650dd Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Wed, 5 Dec 2018 08:20:59 +0200 Subject: [PATCH 1/3] This release fixes the following bugs: - Partially #2045 revert [Improve authentication](https://github.com/wekan/wekan/issues/2016), adding back password/LDAP dropdown, because login did now work. NOTE: This was added in v1.71, reverted at v1.73 because login did not work, added back at v1.79, and then reverted partially at v1.82 because login did not work. Related LDAP logout timer does not work yet. Thanks to xet7 ! --- CHANGELOG.md | 12 ++++ client/components/main/layouts.jade | 1 + client/components/main/layouts.js | 96 ++++++++++++++--------------- models/settings.js | 30 --------- server/publications/pub-users.js | 28 +++++++++ 5 files changed, 88 insertions(+), 79 deletions(-) create mode 100644 server/publications/pub-users.js diff --git a/CHANGELOG.md b/CHANGELOG.md index f36681f32..65de57020 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,15 @@ +# Upcoming Wekan release + +This release fixes the following bugs: + +- Partially #2045 revert [Improve authentication](https://github.com/wekan/wekan/issues/2016), + adding back password/LDAP dropdown, because login did now work. + NOTE: This was added in v1.71, reverted at v1.73 because login did not work, added back at v1.79, + and then reverted partially at v1.82 because login did not work. + Related LDAP logout timer does not work yet. + +Thanks to GitHub user xet7 for contributions. + # v1.81 2018-12-04 Wekan release This release fixes the following bugs: diff --git a/client/components/main/layouts.jade b/client/components/main/layouts.jade index 969ec6a90..e434eaba0 100644 --- a/client/components/main/layouts.jade +++ b/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}} diff --git a/client/components/main/layouts.js b/client/components/main/layouts.js index 0f64ca146..d4a9d6d16 100644 --- a/client/components/main/layouts.js +++ b/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)); @@ -22,6 +37,7 @@ Template.userFormsLayout.onRendered(() => { }); Template.userFormsLayout.helpers({ + currentSetting() { return Settings.findOne(); }, @@ -76,14 +92,13 @@ Template.userFormsLayout.events({ } }); }, - 'click #at-btn'(event, instance) { + '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 email = $('#at-field-username_and_email').val(); - const password = $('#at-field-password').val(); - - if (FlowRouter.getRouteName() !== 'atSignIn' || password === '' || email === '') { + const authenticationMethodSelected = $('.select-authentication').val(); + // Local account + if (authenticationMethodSelected === 'password') { return; } @@ -91,11 +106,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(); + }, + }); + } }, }); @@ -104,38 +137,3 @@ Template.defaultLayout.events({ Modal.close(); }, }); - -function authentication(instance, email, password) { - let user = Users.findOne(); - // Authentication with password - if (user && user.authenticationMethod === 'password') { - $('#at-pwd-form').submit(); - // Meteor.call('logoutWithTimer', user._id, () => {}); - return this.stop(); - } - - // If user doesn't exist, uses the default authentication method if it defined - if (user === undefined) { - user = { - 'authenticationMethod': instance.data.defaultAuthenticationMethod.get(), - }; - } - - // Authentication with LDAP - if (user.authenticationMethod === 'ldap') { - // Use the ldap connection package - Meteor.loginWithLDAP(email, password, function(error) { - if (!error) { - // Meteor.call('logoutWithTimer', Users.findOne()._id, () => {}); - return FlowRouter.go('/'); - } - return error; - }); - } - - /* else { - process.env.DEFAULT_AUTHENTICATION_METHOD is not defined - } */ - - return this.stop(); -} diff --git a/models/settings.js b/models/settings.js index 9ca26c481..52212809f 100644 --- a/models/settings.js +++ b/models/settings.js @@ -239,35 +239,5 @@ if (Meteor.isServer) { cas: isCasEnabled(), }; }, - - getDefaultAuthenticationMethod() { - return process.env.DEFAULT_AUTHENTICATION_METHOD; - }, - - // TODO: patch error : did not check all arguments during call - logoutWithTimer(userId) { - if (process.env.LOGOUT_WITH_TIMER) { - Jobs.run('logOut', userId, { - in: { - days: process.env.LOGOUT_IN, - }, - on: { - hour: process.env.LOGOUT_ON_HOURS, - minute: process.env.LOGOUT_ON_MINUTES, - }, - priority: 1, - }); - } - }, - }); - - Jobs.register({ - logOut(userId) { - Meteor.users.update( - {_id: userId}, - {$set: {'services.resume.loginTokens': []}} - ); - this.success(); - }, }); } diff --git a/server/publications/pub-users.js b/server/publications/pub-users.js new file mode 100644 index 000000000..f0c941533 --- /dev/null +++ b/server/publications/pub-users.js @@ -0,0 +1,28 @@ +Meteor.publish('user-miniprofile', function(userId) { + check(userId, String); + + return Users.find(userId, { + fields: { + 'username': 1, + 'profile.fullname': 1, + 'profile.avatarUrl': 1, + }, + }); +}); + +Meteor.publish('user-admin', function() { + return Meteor.users.find(this.userId, { + fields: { + isAdmin: 1, + }, + }); +}); + +Meteor.publish('user-authenticationMethod', function(match) { + check(match, String); + return Users.find({$or: [{_id: match}, {email: match}, {username: match}]}, { + fields: { + 'authenticationMethod': 1, + }, + }); +}); From 167197fcda390abd76dd2eaa4966b55940e1eb29 Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Wed, 5 Dec 2018 08:47:48 +0200 Subject: [PATCH 2/3] - Partially #2045 revert, continue. Thanks to xet7 ! --- .meteor/packages | 1 - .meteor/versions | 1 - server/publications/pub-users.js | 28 ---------------------------- server/publications/users.js | 1 - 4 files changed, 31 deletions(-) delete mode 100644 server/publications/pub-users.js diff --git a/.meteor/packages b/.meteor/packages index 698f1a73a..3779a684b 100644 --- a/.meteor/packages +++ b/.meteor/packages @@ -89,4 +89,3 @@ mquandalle:moment msavin:usercache wekan:wekan-ldap wekan:accounts-cas -msavin:sjobs \ No newline at end of file diff --git a/.meteor/versions b/.meteor/versions index 5235e6a03..6415eb8b2 100644 --- a/.meteor/versions +++ b/.meteor/versions @@ -117,7 +117,6 @@ mquandalle:jquery-ui-drag-drop-sort@0.2.0 mquandalle:moment@1.0.1 mquandalle:mousetrap-bindglobal@0.0.1 mquandalle:perfect-scrollbar@0.6.5_2 -msavin:sjobs@3.0.6 msavin:usercache@1.0.0 npm-bcrypt@0.9.3 npm-mongo@2.2.33 diff --git a/server/publications/pub-users.js b/server/publications/pub-users.js deleted file mode 100644 index f0c941533..000000000 --- a/server/publications/pub-users.js +++ /dev/null @@ -1,28 +0,0 @@ -Meteor.publish('user-miniprofile', function(userId) { - check(userId, String); - - return Users.find(userId, { - fields: { - 'username': 1, - 'profile.fullname': 1, - 'profile.avatarUrl': 1, - }, - }); -}); - -Meteor.publish('user-admin', function() { - return Meteor.users.find(this.userId, { - fields: { - isAdmin: 1, - }, - }); -}); - -Meteor.publish('user-authenticationMethod', function(match) { - check(match, String); - return Users.find({$or: [{_id: match}, {email: match}, {username: match}]}, { - fields: { - 'authenticationMethod': 1, - }, - }); -}); diff --git a/server/publications/users.js b/server/publications/users.js index 136e1e08f..f0c941533 100644 --- a/server/publications/users.js +++ b/server/publications/users.js @@ -22,7 +22,6 @@ Meteor.publish('user-authenticationMethod', function(match) { check(match, String); return Users.find({$or: [{_id: match}, {email: match}, {username: match}]}, { fields: { - '_id': 1, 'authenticationMethod': 1, }, }); From 9c4e305a84ae4c32de9929ec95290efc596508e4 Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Wed, 5 Dec 2018 08:53:40 +0200 Subject: [PATCH 3/3] v1.82 --- CHANGELOG.md | 2 +- package.json | 2 +- sandstorm-pkgdef.capnp | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 65de57020..6b817a0a2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -# Upcoming Wekan release +# v1.82 2018-12-05 Wekan release This release fixes the following bugs: diff --git a/package.json b/package.json index f5d86fa57..67075b973 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "wekan", - "version": "v1.81.0", + "version": "v1.82.0", "description": "Open-Source kanban", "private": true, "scripts": { diff --git a/sandstorm-pkgdef.capnp b/sandstorm-pkgdef.capnp index 463b8fcb1..b5fcd0c3c 100644 --- a/sandstorm-pkgdef.capnp +++ b/sandstorm-pkgdef.capnp @@ -22,10 +22,10 @@ const pkgdef :Spk.PackageDefinition = ( appTitle = (defaultText = "Wekan"), # The name of the app as it is displayed to the user. - appVersion = 183, + appVersion = 184, # Increment this for every release. - appMarketingVersion = (defaultText = "1.81.0~2018-12-04"), + appMarketingVersion = (defaultText = "1.82.0~2018-12-05"), # Human-readable presentation of the app version. minUpgradableAppVersion = 0,