diff --git a/packages/rocketchat-cas/cas_server.js b/packages/rocketchat-cas/cas_server.js index 7041312ae78..95978940af1 100644 --- a/packages/rocketchat-cas/cas_server.js +++ b/packages/rocketchat-cas/cas_server.js @@ -91,41 +91,47 @@ var casTicket = function (req, token, callback) { */ Accounts.registerLoginHandler(function (options) { - if (!options.cas) - return undefined; + if (!options.cas) + return undefined; - if (!_hasCredential(options.cas.credentialToken)) { - throw new Meteor.Error(Accounts.LoginCancelledError.numericError, - 'no matching login attempt found'); - } + if (!_hasCredential(options.cas.credentialToken)) { + throw new Meteor.Error(Accounts.LoginCancelledError.numericError, + 'no matching login attempt found'); + } + + var result = _retrieveCredential(options.cas.credentialToken); + var options = { profile: { name: result.id } }; - var result = _retrieveCredential(options.cas.credentialToken); - var options = { profile: { name: result.id } }; - - logger.debug("Looking up user with username: " + result.id ); - var user = Meteor.users.findOne({ 'services.cas.external_id': result.id }); - - if (user) { - logger.debug("Using existing user for '" + result.id + "' with id: " + user._id); - } else { - var newUser = { - username: result.id, - active: true, - globalRoles: ['user'], - services: { - cas: { - external_id: result.id + // Search existing user by its external service id + logger.debug("Looking up user with username: " + result.id ); + var user = Meteor.users.findOne({ 'services.cas.external_id': result.id }); + + if (user) { + logger.debug("Using existing user for '" + result.id + "' with id: " + user._id); + } else { + + // Define new user + var newUser = { + username: result.id, + active: true, + globalRoles: ['user'], + services: { + cas: { + external_id: result.id + } } - } - }; + }; - logger.debug("User '" + result.id + "'does not exist yet, creating it"); - var userId = Accounts.insertUserDoc({}, newUser); - user = Meteor.users.findOne(userId); - logger.debug("Created new user for '" + result.id + "' with id: " + user._id); - } + // Create the user + logger.debug("User '" + result.id + "'does not exist yet, creating it"); + var userId = Accounts.insertUserDoc({}, newUser); + + // Fetch and use it + user = Meteor.users.findOne(userId); + logger.debug("Created new user for '" + result.id + "' with id: " + user._id); + } - return { userId: user._id }; + return { userId: user._id }; }); var _hasCredential = function(credentialToken) {