const express = require("express"); const router = express.Router(); const auth = require("../auth/auth"); let controller = require("../controllers/controllers"); router.get("/", (req, res) => { auth.session_converter(req.cookies.session_token).then((key) => { if (key != null) { res.render("pages/index", { loggedIn: 'true' }); } else { res.render("pages/index", { loggedIn: 'false' }); } }); }); router.route("/register") .get((req, res) => { auth.session_converter(req.cookies.session_token).then((key) => { if (key != null) { res.redirect("/"); } else { res.render("pages/register"); } }); }) .post((req, res) => { controller.register( req.body.email, req.body.password, req.body.first_name, req.body.last_name ) .then((data) => { if (data == 200) { res.render("pages/register-verification-sent"); } else { res.render("pages/register-error") } }); }); router.route("/login") .get((req, res) => { auth.session_converter(req.cookies.session_token).then((key) => { if (key != null) { res.redirect("/"); } else { res.render("pages/login"); } }); }) .post((req, res) => { controller.login( req.body.email, req.body.password, req.headers["user-agent"], req.headers["x-forwarded-for"] || req.socket.remoteAddress ) .then((data) => { if (data[0] == 200) { res.cookie('session_token', Buffer.from(JSON.stringify({'user_id': data[1].id, 'session_token': data[1].session_token})).toString('base64'), { maxAge: 2592000000, httpOnly: true }); res.redirect("/"); } else if (data[0] == 204) { res.render("pages/login", { error: "Please confim your account by checking your email", }); } else if (data[0] == 205) { res.render("pages/login", { error: "Wrong Email or Password", }); } else { res.render("pages/login", { error: "Wrong Email or Password", }); } }); }); router.route("/logout") .get((req, res) => { auth.session_converter(req.cookies.session_token).then((key) => { if (key != null) { res.clearCookie("session_token"); auth.session_remove(key, req.cookies.session_token); res.redirect("/"); } else { res.redirect("/login"); } }); }) router.get("/verify-mail", (req, res) => { controller.verify_mail(req.query.token).then((data) => { if (data[0] == 200) { res.render("pages/register-verification-completed"); } else { res.redirect("/"); } }); }); router.route("/checkout") .get((req, res) => { auth.session_converter(req.cookies.session_token).then((key) => { if (key != null) { res.render("pages/checkout", { loggedIn: 'true' }); } else { res.redirect("/login"); } }); }) .post((req, res) => { auth.session_converter(req.cookies.session_token).then((key) => { console.log(key); if (key != null) { controller.checkout( req.body.firstName, req.body.lastName, req.body.phoneNumber, req.body.streetAddress1, req.body.streetAddress2, req.body.region, req.body.province, req.body.city, req.body.district, req.body.subDistrict, req.body.postalCode, req.body.logistic, req.body.data, key ) .then((data) => { if (data[0] == 201) { let total_price = 0; let state = 0; let order_data = JSON.parse(data[1].data); for (let i=0; i { state++; total_price += parseInt(resp[0].PRICE * order_data[i].quantity); if (state == order_data.length) { res.render("pages/payment", { orderId: data[1].order_id, totalPrice: total_price, }); } }); } } }); } else { res.redirect("/login"); } }); }); router.route("/reset-password") .get((req, res) => { if (!req.query.token) { res.redirect("/"); } else { res.render("pages/reset-password", { token: req.query.token }) } }) .post((req, res) => { controller.reset_password(req.query.token, req.body.password).then((data) => { if (data[0] == 200) { res.render("pages/reset-verification-completed"); } else { res.redirect("/"); } }); }); router.route("/forgot-password") .get((req, res) => { auth.session_converter(req.cookies.session_token).then((key) => { if (key != null) { res.redirect("/"); } else { res.render("pages/forgot-password"); } }); }) .post((req, res) => { controller.request_reset_password(req.body.email).then((data) => { if (data[0] == 200) { res.render("pages/forgot-verification-sent"); } else { res.redirect("/forgot-password"); } }); }); router.get("/products", (req, res) => { auth.session_converter(req.cookies.session_token).then((key) => { if (key != null) { controller.getProducts().then((data) => { res.render("pages/products", { data: data, loggedIn: 'true' }); }); } else { controller.getProducts().then((data) => { res.render("pages/products", { data: data, loggedIn: 'false' }); }); } }); }); router.get(["/product", "/product/:id"], (req, res) => { auth.session_converter(req.cookies.session_token).then((key) => { if (key != null) { controller.getProduct(req.params.id).then((data) => { res.render("pages/product", { data: data, loggedIn: 'true' }); }); } else { controller.getProduct(req.params.id).then((data) => { res.render("pages/product", { data: data, loggedIn: 'false' }); }); } }); }); router.get("/bag", (req, res) => { auth.session_converter(req.cookies.session_token).then((key) => { if (key != null) { res.render("pages/bag", { loggedIn: 'true' }); } else { res.render("pages/bag", { loggedIn: 'false' }); } }); }); router.get("/payment", (_req, res) => { res.redirect("/"); }); router.get("/transaction", (req, res) => { auth.session_converter(req.cookies.session_token).then((key) => { if (key != null) { controller.transaction(key).then((data) => { if (data[0] == 200) { res.render("pages/transaction", { data: data[1], loggedIn: 'true' }); } else { res.redirect("/"); } }); } else { res.redirect("/login"); } }); }); router.get("/about-us", (req, res) => { auth.session_converter(req.cookies.session_token).then((key) => { if (key != null) { res.render("pages/about-us", { loggedIn: 'true' }); } else { res.render("pages/about-us", { loggedIn: 'false' }); } }); }); router.get("/faq", (req, res) => { auth.session_converter(req.cookies.session_token).then((key) => { if (key != null) { res.render("pages/faq", { loggedIn: 'true' }); } else { res.render("pages/faq", { loggedIn: 'false' }); } }); }); module.exports = router;