Просмотр исходного кода

Merge pull request #1778 from overleaf/hb-password-reset-sl

Handle users who haven't migrated better on password reset

GitOrigin-RevId: f123a6fe4a5a958f558e3cf34c3180e8fc96d159
Timothée Alby 7 лет назад
Родитель
Сommit
276310bd23

+ 3 - 0
services/web/app/coffee/Features/PasswordReset/PasswordResetController.coffee

@@ -6,6 +6,7 @@ UserGetter = require("../User/UserGetter")
 UserUpdater = require("../User/UserUpdater")
 UserSessionsManager = require("../User/UserSessionsManager")
 logger = require "logger-sharelatex"
+Settings = require 'settings-sharelatex'
 
 module.exports =
 
@@ -31,6 +32,8 @@ module.exports =
 					res.send 200, {message: {text: req.i18n.translate("password_reset_email_sent")}}
 				else if status == 'secondary'
 					res.send 404, {message: req.i18n.translate("secondary_email_password_reset")}
+				else if status == 'sharelatex'
+					res.send 404, {message: "<a href=\"#{Settings.accountMerge.sharelatexHost}/user/password/reset\">#{req.i18n.translate("reset_from_sl")}</a>"}
 				else
 					res.send 404, {message: req.i18n.translate("cant_find_email")}
 

+ 2 - 0
services/web/app/coffee/Features/PasswordReset/PasswordResetHandler.coffee

@@ -26,6 +26,8 @@ module.exports = PasswordResetHandler =
 				UserGetter.getUserByAnyEmail email, (err, user) ->
 					if !user
 						return callback(error, null)
+					else if !user.overleaf?.id?
+						return callback(error, 'sharelatex')
 					else
 						return callback(error, 'secondary')
 

+ 17 - 0
services/web/test/unit/coffee/PasswordReset/PasswordResetHandlerTests.coffee

@@ -127,9 +127,26 @@ describe "PasswordResetHandler", ->
 				it 'should return status == null', ->
 					@callback.calledWith(null, null).should.equal true
 
+			describe "when the user isn't on v2", ->
+				beforeEach ->
+					@V1Api.request = sinon.stub().yields(null, { statusCode: 404 }, {})
+					@UserGetter.getUserByAnyEmail.callsArgWith(1, null, @user)
+					@PasswordResetHandler.generateAndEmailResetToken @email, @callback
+
+				it 'should not set the password token data', ->
+					@OneTimeTokenHandler.getNewToken
+						.called.should.equal false
+
+				it 'should not send an email with the token', ->
+					@EmailHandler.sendEmail.called.should.equal false
+
+				it 'should return status == sharelatex', ->
+					@callback.calledWith(null, 'sharelatex').should.equal true
+
 			describe "when the email is a secondary email", ->
 				beforeEach ->
 					@V1Api.request = sinon.stub().yields(null, { statusCode: 404 }, {})
+					@user.overleaf = {id: 101}
 					@UserGetter.getUserByAnyEmail.callsArgWith(1, null, @user)
 					@PasswordResetHandler.generateAndEmailResetToken @email, @callback