From 84907e92aa9a3893c7452ccbfeebf2a3f934fe01 Mon Sep 17 00:00:00 2001 From: Marcelo Schmidt Date: Wed, 19 Aug 2015 23:23:07 -0300 Subject: [PATCH] Allow registration from services without an e-mail address --- client/views/login/services.coffee | 4 --- server/configuration/accounts_meld.coffee | 39 +++++++++------------ server/lib/accounts.coffee | 9 ++--- server/methods/getUsernameSuggestion.coffee | 4 +-- 4 files changed, 24 insertions(+), 32 deletions(-) diff --git a/client/views/login/services.coffee b/client/views/login/services.coffee index f22577c92d4..d63b01e611b 100644 --- a/client/views/login/services.coffee +++ b/client/views/login/services.coffee @@ -56,10 +56,6 @@ Template.loginServices.events loadingIcon.addClass 'hidden' serviceIcon.removeClass 'hidden' - if error?.error is 'github-no-public-email' - alert t("github_no_public_email") - return - if error console.log JSON.stringify(error), error.message toastr.error error.message diff --git a/server/configuration/accounts_meld.coffee b/server/configuration/accounts_meld.coffee index c54debac829..43a30ce1ebc 100644 --- a/server/configuration/accounts_meld.coffee +++ b/server/configuration/accounts_meld.coffee @@ -3,9 +3,6 @@ Accounts.updateOrCreateUserFromExternalService = (serviceName, serviceData, opti if serviceName not in ['facebook', 'github', 'google', 'meteor-developer', 'linkedin'] return - if serviceName is 'github' and (not serviceData.email? or serviceData.email.trim() is '') - throw new Meteor.Error 'github-no-public-email' - if serviceName is 'meteor-developer' if _.isArray serviceData?.emails serviceData.emails.sort (a, b) -> @@ -19,24 +16,22 @@ Accounts.updateOrCreateUserFromExternalService = (serviceName, serviceData, opti if serviceName is 'linkedin' serviceData.email = serviceData.emailAddress - if not serviceData.email? or serviceData.email.trim() is '' - throw new Meteor.Error 'no-verified-email' - return - - # Remove not verified users that have same email - notVerifiedUser = Meteor.users.remove({emails: {$elemMatch: {address: serviceData.email, verified: false}}}) - - # Try to get existent user with same email verified - user = Meteor.users.findOne({emails: {$elemMatch: {address: serviceData.email, verified: true}}}) - - if user? - serviceIdKey = "services." + serviceName + ".id" - update = {} - update[serviceIdKey] = serviceData.id - Meteor.users.update({ - _id: user._id - }, { - $set: update - }) + if serviceData.email + + # Remove not verified users that have same email + notVerifiedUser = Meteor.users.remove({emails: {$elemMatch: {address: serviceData.email, verified: false}}}) + + # Try to get existent user with same email verified + user = Meteor.users.findOne({emails: {$elemMatch: {address: serviceData.email, verified: true}}}) + + if user? + serviceIdKey = "services." + serviceName + ".id" + update = {} + update[serviceIdKey] = serviceData.id + Meteor.users.update({ + _id: user._id + }, { + $set: update + }) return orig_updateOrCreateUserFromExternalService.apply(this, arguments) diff --git a/server/lib/accounts.coffee b/server/lib/accounts.coffee index c295486828f..31cd1fcc102 100644 --- a/server/lib/accounts.coffee +++ b/server/lib/accounts.coffee @@ -41,10 +41,11 @@ Accounts.onCreateUser (options, user) -> else user.name = user.services[serviceName].username - user.emails = [ - address: user.services[serviceName].email - verified: true - ] + if user.services[serviceName].email + user.emails = [ + address: user.services[serviceName].email + verified: true + ] return user diff --git a/server/methods/getUsernameSuggestion.coffee b/server/methods/getUsernameSuggestion.coffee index 719fc7ed533..39bb32db955 100644 --- a/server/methods/getUsernameSuggestion.coffee +++ b/server/methods/getUsernameSuggestion.coffee @@ -36,10 +36,10 @@ usernameIsAvaliable = (username) -> usernames.push slug service.username if user.emails?.length > 0 - for email in user.emails when email.verified is true + for email in user.emails when email.address? and email.verified is true usernames.push slug email.address.replace(/@.+$/, '') - for email in user.emails when email.verified is true + for email in user.emails when email.address? and email.verified is true usernames.push slug email.address.replace(/(.+)@(\w+).+/, '$1.$2') for item in usernames