From 97c145433e140a24d26ca28218480759cdcdf27f Mon Sep 17 00:00:00 2001 From: Tim Alby Date: Mon, 11 Jun 2018 12:29:08 +0200 Subject: [PATCH] use EmailHelper.parseEmail on registration Also changed EmailHelper to use the regexp already used in UserRegistrationHandler rather than the `mimelib` package as it is deprecated. --- .../coffee/Features/Helpers/EmailHelper.coffee | 15 ++++++++------- .../Features/User/UserRegistrationHandler.coffee | 12 +++--------- services/web/package.json | 1 - .../User/UserRegistrationHandlerTests.coffee | 2 ++ 4 files changed, 13 insertions(+), 17 deletions(-) diff --git a/services/web/app/coffee/Features/Helpers/EmailHelper.coffee b/services/web/app/coffee/Features/Helpers/EmailHelper.coffee index 7bc93888fd..d45447788d 100644 --- a/services/web/app/coffee/Features/Helpers/EmailHelper.coffee +++ b/services/web/app/coffee/Features/Helpers/EmailHelper.coffee @@ -1,11 +1,12 @@ -mimelib = require("mimelib") - +EMAIL_REGEXP = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\ ".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA -Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ module.exports = EmailHelper = parseEmail: (email) -> - email = mimelib.parseAddresses(email or "")[0]?.address?.toLowerCase() - if !email? or email == "" - return null - else - return email + return null unless email? + email = email.trim().toLowerCase() + + matched = email.match EMAIL_REGEXP + return null unless matched? && matched[0]? + + matched[0] diff --git a/services/web/app/coffee/Features/User/UserRegistrationHandler.coffee b/services/web/app/coffee/Features/User/UserRegistrationHandler.coffee index 4a42d7f5fa..85cdabdbdf 100644 --- a/services/web/app/coffee/Features/User/UserRegistrationHandler.coffee +++ b/services/web/app/coffee/Features/User/UserRegistrationHandler.coffee @@ -11,12 +11,9 @@ EmailHandler = require("../Email/EmailHandler") OneTimeTokenHandler = require "../Security/OneTimeTokenHandler" Analytics = require "../Analytics/AnalyticsManager" settings = require "settings-sharelatex" +EmailHelper = require("../Helpers/EmailHelper") module.exports = UserRegistrationHandler = - validateEmail : (email) -> - re = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\ ".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA -Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ - return re.test(email) - hasZeroLengths : (props) -> hasZeroLength = false props.forEach (prop) -> @@ -25,13 +22,10 @@ module.exports = UserRegistrationHandler = return hasZeroLength _registrationRequestIsValid : (body, callback)-> - email = sanitize.escape(body.email).trim().toLowerCase() + email = EmailHelper.parseEmail(body.email) or '' password = body.password - username = email.match(/^[^@]*/) if @hasZeroLengths([password, email]) return false - else if !@validateEmail(email) - return false else return true @@ -47,7 +41,7 @@ module.exports = UserRegistrationHandler = requestIsValid = @_registrationRequestIsValid userDetails if !requestIsValid return callback(new Error("request is not valid")) - userDetails.email = userDetails.email?.trim()?.toLowerCase() + userDetails.email = EmailHelper.parseEmail(userDetails.email) UserGetter.getUserByAnyEmail userDetails.email, (err, user) => if err? return callback err diff --git a/services/web/package.json b/services/web/package.json index 418fa34a08..ed0eb06455 100644 --- a/services/web/package.json +++ b/services/web/package.json @@ -62,7 +62,6 @@ "marked": "^0.3.5", "method-override": "^2.3.3", "metrics-sharelatex": "git+https://github.com/sharelatex/metrics-sharelatex.git#v1.7.1", - "mimelib": "0.2.14", "mocha": "^5.0.1", "mongojs": "2.4.0", "mongoose": "4.11.4", diff --git a/services/web/test/unit/coffee/User/UserRegistrationHandlerTests.coffee b/services/web/test/unit/coffee/User/UserRegistrationHandlerTests.coffee index e738947171..3a8801bc08 100644 --- a/services/web/test/unit/coffee/User/UserRegistrationHandlerTests.coffee +++ b/services/web/test/unit/coffee/User/UserRegistrationHandlerTests.coffee @@ -5,6 +5,7 @@ path = require('path') modulePath = path.join __dirname, '../../../../app/js/Features/User/UserRegistrationHandler' sinon = require("sinon") expect = require("chai").expect +EmailHelper = require '../../../../app/js/Features/Helpers/EmailHelper' describe "UserRegistrationHandler", -> @@ -37,6 +38,7 @@ describe "UserRegistrationHandler", -> "../Security/OneTimeTokenHandler": @OneTimeTokenHandler "../Analytics/AnalyticsManager": @AnalyticsManager = { recordEvent: sinon.stub() } "settings-sharelatex": @settings = {siteUrl: "http://sl.example.com"} + "../Helpers/EmailHelper": EmailHelper @passingRequest = {email:"something@email.com", password:"123"}