diff --git a/packages/server/modules/emails/services/verification.js b/packages/server/modules/emails/services/verification.js index c64286475..a58fdae41 100644 --- a/packages/server/modules/emails/services/verification.js +++ b/packages/server/modules/emails/services/verification.js @@ -12,6 +12,10 @@ const sendEmailVerification = async ( { recipient } ) => { // we need to validate email here, since we'll send it out, // even if technically there is no chance ATM that an incorrect addr comes in const serverInfo = await getServerInfo() + const existingVerifications = await Verifications() + .where( { 'email': recipient } ) + if ( existingVerifications.some( ver => isVerificationValid( ver ) ) ) + throw new Error( 'You already have a valid verification message, please check your inbox' ) const verificationId = await createEmailVerification( { 'email': recipient } ) const verificationLink = new URL( `auth/verifyemail?t=${verificationId}`, process.env.CANONICAL_URL, @@ -27,6 +31,11 @@ const sendEmailVerification = async ( { recipient } ) => { } ) } +const isVerificationValid = ( { createdAt } ) => { + const timeDiff = Math.abs( Date.now() - new Date( createdAt ) ) + return timeDiff < 8.64e+7 +} + const prepareMessage = async ( { verificationLink, serverInfo } ) => { const subject = `Speckle Server ${serverInfo.name} email verification` const text = ` @@ -90,4 +99,4 @@ const createEmailVerification = async ( { email } ) => { return verification.id } -module.exports = { sendEmailVerification } +module.exports = { sendEmailVerification, isVerificationValid }