From 6c798ad4db80426b367877a1caf71458f0557631 Mon Sep 17 00:00:00 2001 From: "aysel.afsar" Date: Wed, 13 Apr 2016 14:56:35 -0400 Subject: [PATCH] LT-236: Add expiration time for password reset link --- Packages/active-entry/lib/ActiveEntry.js | 31 ++++++++++++++++++------ Packages/active-entry/server/methods.js | 20 +++++++++++++++ Packages/lesiontracker/package.js | 1 - 3 files changed, 44 insertions(+), 8 deletions(-) diff --git a/Packages/active-entry/lib/ActiveEntry.js b/Packages/active-entry/lib/ActiveEntry.js index 1a15fa509..dd78f8fc4 100755 --- a/Packages/active-entry/lib/ActiveEntry.js +++ b/Packages/active-entry/lib/ActiveEntry.js @@ -361,16 +361,33 @@ ActiveEntry.resetPassword = function(passwordValue, confirmPassword) { return; } - Accounts.resetPassword(Session.get('_resetPasswordToken'), passwordValue, function(error) { + // Check token is expired + Meteor.call('checkResetTokenIsExpired',Session.get('_resetPasswordToken'), function(error, isTokenExpired) { if (error) { - ActiveEntry.errorMessages.set("resetPassword", error.message); + console.log(error.message); return; } - Session.set('_resetPasswordToken', null); - // Update last login time - Meteor.call("updateLastLoginDate"); - var ActiveEntryConfig = Session.get('Photonic.ActiveEntry'); - Router.go(ActiveEntryConfig.signIn.destination); + + if (isTokenExpired) { + console.log("Your link is expired"); + // Go to forgotPassword to create a new reset link + ActiveEntry.errorMessages.set("forgotPassword", 'Your link is expired. Please create a new reset link.'); + Router.go('/forgotPassword'); + return; + } + + Accounts.resetPassword(Session.get('_resetPasswordToken'), passwordValue, function(error) { + if (error) { + ActiveEntry.errorMessages.set("resetPassword", error.message); + return; + } + Session.set('_resetPasswordToken', null); + // Update last login time + Meteor.call("updateLastLoginDate"); + var ActiveEntryConfig = Session.get('Photonic.ActiveEntry'); + Router.go(ActiveEntryConfig.signIn.destination); + }); + }); }; diff --git a/Packages/active-entry/server/methods.js b/Packages/active-entry/server/methods.js index f11a5e7bc..5a0df52c7 100644 --- a/Packages/active-entry/server/methods.js +++ b/Packages/active-entry/server/methods.js @@ -164,6 +164,26 @@ Meteor.methods({ return true; } + return false; + }, + + checkResetTokenIsExpired: function(token) { + var user = Meteor.users.findOne({"services.password.reset.token": token}); + if (!user) { + return; + } + var tokenCreatedTime = user.services.password.reset.when; + if (!tokenCreatedTime) { + return; + } + // Token will be expired if created time is over 30 min as default + tokenCreatedTime.setTime(tokenCreatedTime.getTime() + 30*60000); + if (tokenCreatedTime < new Date()) { + // Remove reset token + Meteor.users.update({_id: user._id}, {$unset: {'services.password.reset': 1}}); + return true; + } + return false; } diff --git a/Packages/lesiontracker/package.js b/Packages/lesiontracker/package.js index cc905a869..76b0638b3 100644 --- a/Packages/lesiontracker/package.js +++ b/Packages/lesiontracker/package.js @@ -238,7 +238,6 @@ Package.onUse(function(api) { api.export('Measurements', [ 'client', 'server' ]); api.export('Studies', [ 'client', 'server' ]); api.export('Timepoints', [ 'client', 'server' ]); - api.export('Reviewers', [ 'client', 'server' ]); });