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', attributeBehavior: 'escape',
dialectOptions: { dialectOptions: {
ssl: { 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; 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) { async function checkToken(id) {
let tokenRes = await tokenModel.findOne( let tokenRes = await tokenModel.findOne(
{ {
@ -62,4 +77,6 @@ async function checkToken(id) {
return tokenRes; 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 = { module.exports = {
getUserByID, getUserByID,
@ -159,5 +170,6 @@ module.exports = {
addUser, addUser,
loginUser, loginUser,
updateProfile, updateProfile,
checkEmail checkEmail,
checkEmailDetails
}; };

View File

@ -243,6 +243,10 @@ app.auth = (function (app) {
location.replace(`/profile`); location.replace(`/profile`);
} }
function checkEmailRedirect(){
location.replace(`/checkemail`);
}
return { return {
getToken: getToken, getToken: getToken,
setToken: setToken, setToken: setToken,
@ -252,6 +256,7 @@ app.auth = (function (app) {
logInRedirect, logInRedirect,
homeRedirect, homeRedirect,
profileRedirect, profileRedirect,
checkEmailRedirect,
}; };
})(app); })(app);
@ -279,6 +284,8 @@ function formAJAX(btn, del) {
var $form = $(btn).closest("[action]"); // gets the 'form' parent var $form = $(btn).closest("[action]"); // gets the 'form' parent
var formData = $form.find("[name]").serializeObject(); // builds query formDataing var formData = $form.find("[name]").serializeObject(); // builds query formDataing
var method = $form.attr("method") || "post"; var method = $form.attr("method") || "post";
console.log("Form data", formData);
console.log("Form method", method);
app.util.actionMessage("Loading...", $form, "info"); 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 { sendContactEmail } = require("../functions/nodeMail");
const { generateUUID } = require("../functions/generateUUID");
const { } = require("../functions/api");
const express = require("express"); const express = require("express");
const router = express.Router(); const router = express.Router();
@ -75,7 +77,7 @@ router.post("/contact", async (req, res, next) => {
//reset //reset
router.post("/checkemail", async (req, res, next) => { router.post("/checkemail", async (req, res, next) => {
try{ try{
//console.log(req.body);
let Res = await checkEmail(req.body.email); let Res = await checkEmail(req.body.email);
if (!Res) { if (!Res) {
let error = new Error("Email not found"); let error = new Error("Email not found");
@ -83,17 +85,38 @@ router.post("/checkemail", async (req, res, next) => {
return next(error); return next(error);
} }
else{ else{
//console.log(Res); //user info lookup
send(req.body.email, req.body.name, req.body.message); 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({ return res.json({
message: "Reset Password Link has successfully sent to your email!", message: "Reset Password Link has successfully sent to your email!",
}); });
} }
}catch (error){ }catch (error){
console.error(error); console.error(error);
next(error); next(error);
} }
}); });
module.exports = router; 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"); res.render("resetpassword");
}); });
//check email page
router.get("/checkemail", function (req, res, next) {
res.render("checkemail");
});
//contact page //contact page
router.get("/contact", function (req, res, next) { router.get("/contact", function (req, res, next) {
res.render("contact"); 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"> <section class="wrapper">
<div class="form"> <div class="form">
<header>Reset Password</header> <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 <input type="email" name="email" placeholder="Email" required
pattern="\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*" /> pattern="\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*" />
<input type="submit" value="Reset Password" /> <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" "validator": "^13.11.0"
}, },
"devDependencies": { "devDependencies": {
"nodemon": "^3.0.2" "nodemon": "^3.0.3"
} }
} }