diff options
Diffstat (limited to 'models/users.js')
-rw-r--r-- | models/users.js | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/models/users.js b/models/users.js index 9b070c43..1b1b79e1 100644 --- a/models/users.js +++ b/models/users.js @@ -478,6 +478,30 @@ if (Meteor.isServer) { return user; } + if (user.services.oidc) { + const email = user.services.oidc.email.toLowerCase(); + + user.username = user.services.oidc.username; + user.emails = [{ address: email, verified: true }]; + const initials = user.services.oidc.fullname.match(/\b[a-zA-Z]/g).join('').toUpperCase(); + user.profile = { initials, fullname: user.services.oidc.fullname }; + + // see if any existing user has this email address or username, otherwise create new + const existingUser = Meteor.users.findOne({$or: [{'emails.address': email}, {'username':user.username}]}); + if (!existingUser) + return user; + + // copy across new service info + const 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; return user; |