mirror of
https://github.com/yu-i-i/overleaf-cep.git
synced 2026-05-27 11:01:56 +02:00
added complex password validation to password resets
This commit is contained in:
@@ -5,6 +5,7 @@ logger = require "logger-sharelatex"
|
||||
module.exports =
|
||||
|
||||
renderRequestResetForm: (req, res)->
|
||||
logger.log "rendering request reset form"
|
||||
res.render "user/passwordReset",
|
||||
title:"reset_password"
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@ module.exports =
|
||||
if err then return callback(err)
|
||||
emailOptions =
|
||||
to : email
|
||||
setNewPasswordUrl : "#{settings.siteUrl}/user/password/set?passwordResetToken=#{token}"
|
||||
setNewPasswordUrl : "#{settings.siteUrl}/user/password/set?passwordResetToken=#{token}&email=#{encodeURIComponent(email)}"
|
||||
EmailHandler.sendEmail "passwordResetRequested", emailOptions, (error) ->
|
||||
return callback(error) if error?
|
||||
callback null, true
|
||||
|
||||
@@ -101,7 +101,7 @@ module.exports =
|
||||
PasswordResetTokenHandler.getNewToken user._id, { expiresIn: ONE_WEEK }, (err, token)->
|
||||
return next(err) if err?
|
||||
|
||||
setNewPasswordUrl = "#{settings.siteUrl}/user/password/set?passwordResetToken=#{token}"
|
||||
setNewPasswordUrl = "#{settings.siteUrl}/user/password/set?passwordResetToken=#{token}&email=#{encodeURIComponent(email)}"
|
||||
|
||||
EmailHandler.sendEmail "registered", {
|
||||
to: user.email
|
||||
|
||||
@@ -98,6 +98,11 @@ module.exports = (app)->
|
||||
res.locals.csrfToken = req.session._csrf
|
||||
next()
|
||||
|
||||
app.use (req, res, next) ->
|
||||
res.locals.getReqQueryParam = (field)->
|
||||
return req.query?[field]
|
||||
next()
|
||||
|
||||
app.use (req, res, next)->
|
||||
res.locals.fingerprint = (path) ->
|
||||
if fingerprints[path]?
|
||||
|
||||
@@ -22,17 +22,16 @@ block content
|
||||
a(href='/login') #{translate("login_here")}
|
||||
|
||||
.form-group
|
||||
input.form-control(
|
||||
input.form-control#passwordField(
|
||||
type='password',
|
||||
name='password',
|
||||
placeholder='new password',
|
||||
required,
|
||||
ng-model="password",
|
||||
autofocus
|
||||
autofocus,
|
||||
complex-password
|
||||
)
|
||||
span.small.text-primary(
|
||||
ng-show="passwordResetForm.password.$invalid && passwordResetForm.password.$dirty"
|
||||
) #{translate("required")}
|
||||
span.small.text-primary(ng-show="passwordResetForm.password.$error.complexPassword", ng-bind-html="complexPasswordErrorMessage")
|
||||
input(
|
||||
type="hidden",
|
||||
name="passwordResetToken",
|
||||
@@ -43,3 +42,8 @@ block content
|
||||
type='submit',
|
||||
ng-disabled="passwordResetForm.$invalid"
|
||||
) #{translate("set_new_password")}
|
||||
|
||||
|
||||
script(type='text/javascript').
|
||||
window.usersEmail = "#{getReqQueryParam('email')}"
|
||||
window.passwordStrengthOptions = !{JSON.stringify(settings.passwordStrengthOptions || {})}
|
||||
@@ -113,10 +113,10 @@ define [
|
||||
|
||||
ngModelCtrl.$parsers.unshift (modelValue) ->
|
||||
isValid = passField.validatePass()
|
||||
email = asyncFormCtrl.getEmail() || window.usersEmail
|
||||
if !isValid
|
||||
scope.complexPasswordErrorMessage = passField.getPassValidationMessage()
|
||||
else if asyncFormCtrl.getEmail()?
|
||||
email = asyncFormCtrl.getEmail()
|
||||
else if (email? and email != "")
|
||||
startOfEmail = email?.split("@")?[0]
|
||||
if modelValue.indexOf(email) != -1 or modelValue.indexOf(startOfEmail) != -1
|
||||
isValid = false
|
||||
|
||||
@@ -57,7 +57,7 @@ describe "PasswordResetHandler", ->
|
||||
exists.should.equal true
|
||||
args = @EmailHandler.sendEmail.args[0]
|
||||
args[0].should.equal "passwordResetRequested"
|
||||
args[1].setNewPasswordUrl.should.equal "#{@settings.siteUrl}/user/password/set?passwordResetToken=#{@token}"
|
||||
args[1].setNewPasswordUrl.should.equal "#{@settings.siteUrl}/user/password/set?passwordResetToken=#{@token}&email=#{encodeURIComponent(@user.email)}"
|
||||
done()
|
||||
|
||||
it "should return exists = false for a holdingAccount", (done) ->
|
||||
|
||||
@@ -200,7 +200,7 @@ describe "UserController", ->
|
||||
@EmailHandler.sendEmail
|
||||
.calledWith("registered", {
|
||||
to: @user.email
|
||||
setNewPasswordUrl: "#{@settings.siteUrl}/user/password/set?passwordResetToken=#{@token}"
|
||||
setNewPasswordUrl: "#{@settings.siteUrl}/user/password/set?passwordResetToken=#{@token}&email=#{encodeURIComponent(@user.email)}"
|
||||
})
|
||||
.should.equal true
|
||||
|
||||
@@ -208,7 +208,7 @@ describe "UserController", ->
|
||||
@res.json
|
||||
.calledWith({
|
||||
email: @user.email
|
||||
setNewPasswordUrl: "#{@settings.siteUrl}/user/password/set?passwordResetToken=#{@token}"
|
||||
setNewPasswordUrl: "#{@settings.siteUrl}/user/password/set?passwordResetToken=#{@token}&email=#{encodeURIComponent(@user.email)}"
|
||||
})
|
||||
.should.equal true
|
||||
|
||||
|
||||
Reference in New Issue
Block a user