This commit is contained in:
noot 2024-01-30 15:58:05 +08:00
parent 884209ee9c
commit 4346f92471
10 changed files with 2357 additions and 1119 deletions

View File

@ -15,7 +15,7 @@ const sequelize = new Sequelize(
attributeBehavior: 'escape',
dialectOptions: {
ssl: {
ca: fs.readFileSync(path.resolve(__dirname, '../cert/DigiCertGlobalRootCA.crt.pem')),
ca: fs.readFileSync(path.resolve(__dirname, '../cert/DigiCertGlobalRootCA.crt_3.pem')),
},
},

View File

@ -50,6 +50,21 @@ async function addToken(userId, permission, isKey ,expiry) {
return token.id + "-" + uuid;
}
async function addPasswordResetToken(data , token){
let hashtoken = await hash(uuid);
let currentDate = new Date();
let tokenToLive = new Date(currentDate.getTime() + 15 * 60000);
let tokenRes = await tokenModel.create({
userid: data.id,
token: hashtoken,
permission: "canRead",
isKey: "isNotKey",
expiration: tokenToLive,
});
return true;
}
async function checkToken(id) {
let tokenRes = await tokenModel.findOne(
{
@ -62,4 +77,6 @@ async function checkToken(id) {
return tokenRes;
}
module.exports = { addToken, getTokenByToken , checkToken};
module.exports = { addToken, getTokenByToken , checkToken , addPasswordResetToken};

View File

@ -152,6 +152,17 @@ async function checkEmail(email) {
}
async function checkEmailDetails(email) {
let emailRes = await userModel.findOne({
where: {
email: email,
},
});
if (!emailRes) return false;
return emailRes;
}
module.exports = {
getUserByID,
@ -159,5 +170,6 @@ module.exports = {
addUser,
loginUser,
updateProfile,
checkEmail
checkEmail,
checkEmailDetails
};

View File

@ -243,6 +243,10 @@ app.auth = (function (app) {
location.replace(`/profile`);
}
function checkEmailRedirect(){
location.replace(`/checkemail`);
}
return {
getToken: getToken,
setToken: setToken,
@ -252,6 +256,7 @@ app.auth = (function (app) {
logInRedirect,
homeRedirect,
profileRedirect,
checkEmailRedirect,
};
})(app);
@ -279,6 +284,8 @@ function formAJAX(btn, del) {
var $form = $(btn).closest("[action]"); // gets the 'form' parent
var formData = $form.find("[name]").serializeObject(); // builds query formDataing
var method = $form.attr("method") || "post";
console.log("Form data", formData);
console.log("Form method", method);
app.util.actionMessage("Loading...", $form, "info");

View File

@ -1,5 +1,7 @@
const { addUser, loginUser, checkEmail } = require("../functions/user");
const { addUser, loginUser, checkEmail , checkEmailDetails } = require("../functions/user");
const { sendContactEmail } = require("../functions/nodeMail");
const { generateUUID } = require("../functions/generateUUID");
const { } = require("../functions/api");
const express = require("express");
const router = express.Router();
@ -75,7 +77,7 @@ router.post("/contact", async (req, res, next) => {
//reset
router.post("/checkemail", async (req, res, next) => {
try{
//console.log(req.body);
let Res = await checkEmail(req.body.email);
if (!Res) {
let error = new Error("Email not found");
@ -83,17 +85,38 @@ router.post("/checkemail", async (req, res, next) => {
return next(error);
}
else{
//console.log(Res);
send(req.body.email, req.body.name, req.body.message);
//user info lookup
let data = await checkEmailDetails(req.body.email);
//console.log(data);
//token generation and insert into token table
const token = await generateUUID();
let tokenRes = await addPasswordResetToken(data , token);
//email user with temp token link
if (!tokenRes) return false;
//email logic to send reset password link
return res.json({
message: "Reset Password Link has successfully sent to your email!",
});
}
}catch (error){
console.error(error);
next(error);
}
});
module.exports = router;
/*
router.get('/login/resetpassword/:token', async function(req, res, next){
res.render('reset_password', {});
});
*/

View File

@ -38,6 +38,11 @@ router.get("/resetpassword", function (req, res, next) {
res.render("resetpassword");
});
//check email page
router.get("/checkemail", function (req, res, next) {
res.render("checkemail");
});
//contact page
router.get("/contact", function (req, res, next) {
res.render("contact");

View File

@ -0,0 +1,17 @@
<%- include('logintop') %>
<body>
<section class="wrapper">
<div class="form">
<!-- -->
<div class="error-contents">
<h3>Please check your email for the reset password link</h3>
</div>
<br>
<a>Dont have an account?</a> <a href="/login">Sign Up</a>
<br>
<a>Already have an account?</a> <a href="/login">Login</a>
</div>
</section>
</body>

View File

@ -4,7 +4,7 @@
<section class="wrapper">
<div class="form">
<header>Reset Password</header>
<form action="auth/checkemail" method="POST" onsubmit="formAJAX(this)">
<form action="auth/checkemail" onsubmit="formAJAX(this) "evalAJAX="app.auth.checkEmailRedirect();">
<input type="email" name="email" placeholder="Email" required
pattern="\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*" />
<input type="submit" value="Reset Password" />

3377
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -51,6 +51,6 @@
"validator": "^13.11.0"
},
"devDependencies": {
"nodemon": "^3.0.2"
"nodemon": "^3.0.3"
}
}