Updated token hash, use repo instead of prisma for data fetching
This commit is contained in:
parent
c04c52aed0
commit
93abf4b631
31
src/repositories/passwordResetTokenRepository.ts
Normal file
31
src/repositories/passwordResetTokenRepository.ts
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
import prisma from '../utilities/prisma' // Import the global Prisma instance
|
||||||
|
|
||||||
|
class PasswordResetTokenRepository {
|
||||||
|
async getById(id: number): Promise<any> {
|
||||||
|
try {
|
||||||
|
return await prisma.passwordResetToken.findUnique({
|
||||||
|
where: {
|
||||||
|
id
|
||||||
|
}
|
||||||
|
})
|
||||||
|
} catch (error: any) {
|
||||||
|
// Handle error
|
||||||
|
throw new Error(`Failed to get password reset token by ID: ${error.message}`)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async getByUserId(userId: number): Promise<any> {
|
||||||
|
try {
|
||||||
|
return await prisma.passwordResetToken.findFirst({
|
||||||
|
where: {
|
||||||
|
userId
|
||||||
|
}
|
||||||
|
})
|
||||||
|
} catch (error: any) {
|
||||||
|
// Handle error
|
||||||
|
throw new Error(`Failed to get password reset token by user ID: ${error.message}`)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default new PasswordResetTokenRepository()
|
@ -1,5 +1,6 @@
|
|||||||
import bcrypt from 'bcryptjs'
|
import bcrypt from 'bcryptjs'
|
||||||
import UserRepository from '../repositories/userRepository'
|
import UserRepository from '../repositories/userRepository'
|
||||||
|
import PasswordResetTokenRepository from '../repositories/passwordResetTokenRepository'
|
||||||
import prisma from '../utilities/prisma'
|
import prisma from '../utilities/prisma'
|
||||||
import { User, PasswordResetToken } from '@prisma/client'
|
import { User, PasswordResetToken } from '@prisma/client'
|
||||||
import config from '../utilities/config'
|
import config from '../utilities/config'
|
||||||
@ -61,12 +62,13 @@ class UserService {
|
|||||||
* Reset password
|
* Reset password
|
||||||
* @param email
|
* @param email
|
||||||
*/
|
*/
|
||||||
async resetPassword(email: string): Promise<boolean | undefined> {
|
async resetPassword(email: string): Promise<boolean> {
|
||||||
|
|
||||||
const user = await UserRepository.getByEmail(email)
|
const user = await UserRepository.getByEmail(email)
|
||||||
if ( !user ) return
|
if ( !user ) return false
|
||||||
const token = await bcrypt.genSalt(10)
|
|
||||||
const latestToken = await prisma.passwordResetToken.findFirst({ where: { userId: user.id } })
|
const token = await bcrypt.hash(new Date().getTime().toString(), 10)
|
||||||
|
const latestToken = await PasswordResetTokenRepository.getByUserId(user.id)
|
||||||
|
|
||||||
//Check if password reset has been requested recently
|
//Check if password reset has been requested recently
|
||||||
if (latestToken) {
|
if (latestToken) {
|
||||||
@ -74,7 +76,7 @@ class UserService {
|
|||||||
const tokenExpiryDate = new Date(Date.now() - 24 * 60 * 60 * 1000);
|
const tokenExpiryDate = new Date(Date.now() - 24 * 60 * 60 * 1000);
|
||||||
const isTokenExpired = latestToken.createdAt < tokenExpiryDate
|
const isTokenExpired = latestToken.createdAt < tokenExpiryDate
|
||||||
|
|
||||||
if (!isTokenExpired) return
|
if (!isTokenExpired) return false
|
||||||
}
|
}
|
||||||
|
|
||||||
prisma.passwordResetToken.create({
|
prisma.passwordResetToken.create({
|
||||||
@ -84,31 +86,31 @@ class UserService {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
return
|
const transporter = NodeMailer.createTransport({
|
||||||
|
host: config.SMTP_HOST,
|
||||||
|
port: config.SMTP_PORT,
|
||||||
|
secure: false,
|
||||||
|
auth: {
|
||||||
|
user: config.SMTP_USER,
|
||||||
|
pass: config.SMTP_PASSWORD,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
// const transporter = NodeMailer.createTransport({
|
try {
|
||||||
// host: config.SMTP_HOST,
|
await transporter.sendMail({
|
||||||
// port: config.SMTP_PORT,
|
from: config.SMTP_USER,
|
||||||
// secure: false,
|
to: email,
|
||||||
// auth: {
|
subject: "Reset your password",
|
||||||
// user: config.SMTP_USER,
|
text: "A password reset has been requested, reset your password here: " + config.CLIENT_URL + "/#" + token, // Plain text body
|
||||||
// pass: config.SMTP_PASSWORD,
|
html: "<p>A password reset has been requested, reset your password here: <a href='" + config.CLIENT_URL + "/#" + token + "'>" + config.CLIENT_URL + "/#token=" + token + "</a></p>", // Html body
|
||||||
// },
|
});
|
||||||
// });
|
|
||||||
//
|
|
||||||
// const info = await transporter.sendMail({
|
|
||||||
// from: config.SMTP_USER,
|
|
||||||
// to: email,
|
|
||||||
// subject: "Reset your password",
|
|
||||||
// text: "A password reset has been requested, reset your password here: " + config.CLIENT_URL + "/" + token, // Plain text body
|
|
||||||
// html: "<p>A password reset has been requested, reset your password here: " + config.CLIENT_URL + "/" + token + "</p>", // Html body
|
|
||||||
// });
|
|
||||||
// console.log("Message sent: %s", info.messageId);
|
|
||||||
|
|
||||||
|
return true
|
||||||
|
} catch (error: any) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// if (info) {
|
|
||||||
// return true
|
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -62,7 +62,7 @@ async function addHttpRoutes(app: Application) {
|
|||||||
})
|
})
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Register
|
* Reset password
|
||||||
* @param req
|
* @param req
|
||||||
* @param res
|
* @param res
|
||||||
*/
|
*/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user