summaryrefslogtreecommitdiffstats
path: root/models/users.js
diff options
context:
space:
mode:
authorAllemand Sylvain <salleman@faddef.math.u-bordeaux1.fr>2018-04-10 11:44:54 +0200
committerAllemand Sylvain <salleman@faddef.math.u-bordeaux1.fr>2018-04-10 11:44:54 +0200
commit3e927b4e585d46d2fe66a7cd9a6de69885793302 (patch)
treee160203a6b1ad3749cfb24ff3d38378a57dd6185 /models/users.js
parent1c8a00943cff236ca40b2662189102a7851d3b56 (diff)
downloadwekan-3e927b4e585d46d2fe66a7cd9a6de69885793302.tar.gz
wekan-3e927b4e585d46d2fe66a7cd9a6de69885793302.tar.bz2
wekan-3e927b4e585d46d2fe66a7cd9a6de69885793302.zip
merge oidc and local account if exists
Diffstat (limited to 'models/users.js')
-rw-r--r--models/users.js28
1 files changed, 22 insertions, 6 deletions
diff --git a/models/users.js b/models/users.js
index 364f7fd7..a04021c1 100644
--- a/models/users.js
+++ b/models/users.js
@@ -460,15 +460,31 @@ if (Meteor.isServer) {
}
if (user.services.oidc) {
+ var email = user.services.oidc.email.toLowerCase();
+
user.username = user.services.oidc.username;
- user.emails = [{
- address: user.services.oidc.email.toLowerCase(),
- verified: false,
- }];
- const initials = user.services.oidc.fullname.match(/\b[a-zA-Z]/g).join('').toUpperCase();
+ user.emails = [{ address: email,
+ verified: true }];
+ var initials = user.services.oidc.fullname.match(/\b[a-zA-Z]/g).join('').toUpperCase();
user.profile = { initials: initials, fullname: user.services.oidc.fullname };
- }
+ // see if any existing user has this email address or username, otherwise create new
+ var existingUser = Meteor.users.findOne({$or: [{'emails.address': email}, {'username':user.username}]});
+ console.log("user to create : ");
+ console.log(user);
+ if (!existingUser)
+ return user;
+
+ // copy across new service info
+ var service = _.keys(user.services)[0];
+ existingUser.services[service] = user.services[service];
+ existingUser.emails = user.emails;
+ existingUser.username = user.username;
+ existingUser.profile = user.profile;
+
+ Meteor.users.remove({_id: existingUser._id}); // remove existing record
+ return existingUser;
+ }
if (options.from === 'admin') {
user.createdThroughApi = true;