From 32be41ea46d5bc7607ba130b06832a4f714b73bd Mon Sep 17 00:00:00 2001 From: newtbot Date: Sat, 20 Jan 2024 04:13:20 +0800 Subject: [PATCH] login WIP --- consumerWebsite/functions/apiDatabase.js | 66 +++++++++++++++++++++++- consumerWebsite/modules/app.js | 7 +++ consumerWebsite/public/css/sp.css | 4 +- consumerWebsite/public/js/app.js | 59 ++++++++++----------- consumerWebsite/routes/render.js | 5 +- consumerWebsite/routes/user.js | 41 +++++++++++---- consumerWebsite/views/signuplogin.ejs | 13 +++-- 7 files changed, 141 insertions(+), 54 deletions(-) diff --git a/consumerWebsite/functions/apiDatabase.js b/consumerWebsite/functions/apiDatabase.js index 7033e84..fcee670 100644 --- a/consumerWebsite/functions/apiDatabase.js +++ b/consumerWebsite/functions/apiDatabase.js @@ -2,10 +2,11 @@ const { sequelize } = require("../database/mySql.js"); const { apikeyModel } = require("../database/model/apikeyModel.js"); const { userModel } = require("../database/model/userModel.js"); const { Op, Sequelize } = require("sequelize"); -const { hashAPIKey } = require("../functions/bcrypt.js"); const { generateUUID } = require("../functions/generateUUID.js"); const { hashPassword , comparePassword , hashAPIKey } = require("../functions/bcrypt.js"); +//helper function + //api/v0/user/register @@ -19,15 +20,76 @@ async function addUser(user) { //hash password let hash = await hashPassword(user.password); - await userModel.create({ + const addRes = await userModel.create({ username: user.username, password: hash, email: user.email, address: user.address, phone: user.phone, }); + if (addRes){ + return true; + } + else{ + return false; + } } +//add token to db +async function addToken(userid , token) { + console.log(userid); + console.log(token); + +} + +async function loginUser(user) { + //look up username or email in db + const userRes = await userModel.findOne({ + where: { + [Op.or]: [ + { + username: user.userInfo, + }, + { + email: user.userInfo, + }, + ], + }, + }) + //if user exists + if (userRes){ + //compare password + let match = await comparePassword(user.password, userRes.password); + if (match){ + console.log(userRes.id); + console.log(userRes.username); + + //generate token + let token = await generateUUID(); + + //add to db + addToken(userRes.id, token); + + + //sucessful login + /* + 1) generate token + 2) store in db and localstorage (maybe hash it?) + 3) return userid and username and token and store in localstorage + */ + return { token: token, userid: userRes.id, username: userRes.username }; + } + else { + return false; + } + } + + else{ + return false; + } +} + + async function getAPIKey() { const apikey = await apikeyModel.findAll(); return apikey; diff --git a/consumerWebsite/modules/app.js b/consumerWebsite/modules/app.js index bd5f1e4..94d6c02 100644 --- a/consumerWebsite/modules/app.js +++ b/consumerWebsite/modules/app.js @@ -28,12 +28,19 @@ app.use("/", require("../routes/render")); //consumerWebsite\routes\render.js // Catch 404 and forward to error handler. If none of the above routes are // used, this is what will be called. app.use(function (req, res, next) { + if (req.is("application/json")) { var err = new Error("Not Found"); err.message = "Page not found"; err.status = 404; next(err); + } + else{ + res.status(404).render("404"); + } }); + + // Error handler. This is where `next()` will go on error app.use(function (err, req, res, next) { console.error(err.status || res.status, err.name, req.method, req.url); diff --git a/consumerWebsite/public/css/sp.css b/consumerWebsite/public/css/sp.css index 8c01b06..26082f9 100644 --- a/consumerWebsite/public/css/sp.css +++ b/consumerWebsite/public/css/sp.css @@ -65,7 +65,7 @@ body { header { font-size: 30px; text-align: center; - color: #fff; + color: #000000; font-weight: 600; cursor: pointer; } @@ -92,6 +92,7 @@ body { margin-top: 50px; } + form input { height: 60px; @@ -105,6 +106,7 @@ form border-radius: 8px; background: #fff; } + .form.login input { border: 1px diff --git a/consumerWebsite/public/js/app.js b/consumerWebsite/public/js/app.js index b450cbd..d2687d6 100644 --- a/consumerWebsite/public/js/app.js +++ b/consumerWebsite/public/js/app.js @@ -12,7 +12,7 @@ app.util = (function (app) { function actionMessage(message, $target, type, callback) { message = message || ""; - $target = $target.closest("div.card").find(".actionMessage"); + $target = $target.closest("div.iot-card").find(".actionMessage"); type = type || "info"; callback = callback || function () {}; @@ -29,9 +29,6 @@ app.util = (function (app) { }); } else { if (type) $target.addClass("bg-" + type); - message = - '' + - message; $target.html(message).slideDown("fast"); } setTimeout(callback, 10); @@ -137,6 +134,7 @@ app.api = (function (app) { complete: function (res, text) { callback( text !== "success" ? res.statusText : null, + //console.log(res.responseText), JSON.parse(res.responseText), res.status ); @@ -213,14 +211,15 @@ app.auth = (function (app) { location.href.replace(location.replace(`/login`)) || "/"; } - function homeRedirect(){ - window.location.href = - location.href.replace(location.replace(`/`)) || "/"; + function homeRedirect() { + window.location.href = location.href.replace(location.replace(`/`)) || "/"; } return { getToken: getToken, setToken: setToken, + setUserId: setUserId, + setUsername: setUsername, isLoggedIn: isLoggedIn, //logIn: logIn, logOut: logOut, @@ -231,31 +230,27 @@ app.auth = (function (app) { })(app); //ajax form submit -function formAJAX( btn, del ) { - event.preventDefault(); // avoid to execute the actual submit of the form. - var $form = $(btn).closest( '[action]' ); // gets the 'form' parent - var formData = $form.find( '[name]' ).serializeObject(); // builds query formDataing - var method = $form.attr('method') || 'post'; +function formAJAX(btn, del) { + event.preventDefault(); // avoid to execute the actual submit of the form. + var $form = $(btn).closest("[action]"); // gets the 'form' parent + var formData = $form.find("[name]").serializeObject(); // builds query formDataing + var method = $form.attr("method") || "post"; - // if( !$form.validate()) { - // app.util.actionMessage('Please fix the form errors.', $form, 'danger') - // return false; - // } - - app.util.actionMessage( - '
Loading...
', - $form, - 'info' - ); + // if( !$form.validate()) { + // app.util.actionMessage('Please fix the form errors.', $form, 'danger') + // return false; + // } - //console.log('Data being sent to', $form.attr('action'), formData) + app.util.actionMessage("Loading...", $form, "info"); - app.api[method]($form.attr('action'), formData, function(error, data){ - //console.log('Data back from the server', error, data) - app.util.actionMessage(data.message, $form, error ? 'danger' : 'success'); //re-populate table - if(!error){ - $form.trigger("reset"); - eval($form.attr('evalAJAX')); //gets JS to run after completion - } - }); -} \ No newline at end of file + //console.log('Data being sent to', $form.attr('action'), formData) + + app.api[method]($form.attr("action"), formData, function (error, data) { + //console.log('Data back from the server', error, data) + app.util.actionMessage(data.message, $form, error ? "danger" : "success"); //re-populate table + if (!error) { + $form.trigger("reset"); + eval($form.attr("evalAJAX")); //gets JS to run after completion + } + }); +} diff --git a/consumerWebsite/routes/render.js b/consumerWebsite/routes/render.js index b864966..642731d 100644 --- a/consumerWebsite/routes/render.js +++ b/consumerWebsite/routes/render.js @@ -56,10 +56,7 @@ router.get('/login', function(req, res, next) { res.render('signuplogin'); }); -//404 page -router.get('*', function(req, res, next) { - res.render('404'); -}); + module.exports = router; diff --git a/consumerWebsite/routes/user.js b/consumerWebsite/routes/user.js index 16ddaaf..f9025ff 100644 --- a/consumerWebsite/routes/user.js +++ b/consumerWebsite/routes/user.js @@ -1,15 +1,23 @@ -const { addUser , loginUser } = require("../functions/apiDatabase.js"); +const { addUser, loginUser } = require("../functions/apiDatabase.js"); const express = require("express"); const router = express.Router(); - // /user/register router.post("/register", async (req, res, next) => { try { - console.log("this is " , req.body); - await addUser(req.body); - res.status(200).json({ register: true }); + let Res = await addUser(req.body); + if (Res == false) { + let error = new Error("UserRegFailed"); + error.message = "The user failed to be craated"; + error.status = 400; + return next(error); + } + else{ + return res.json({ + message: "User created successfully", + }); + } } catch (error) { console.error(error); next(error); @@ -19,11 +27,23 @@ router.post("/register", async (req, res, next) => { //login router.post("/login", async (req, res, next) => { try { - console.log("this is " , req.body); - let res = await loginUser(req.body); - if (res == false){ - console.log("user not found"); + let Res = await loginUser(req.body); + if (Res == false) { + let error = new Error("User Login Failed"); + error.status = 400; + return next(error); } + else{ + //pass res back to form to be set in local storage + console.log(Res); + return res.json({ + message: "User login successfully", + token: Res.token, + userId: Res.userid, + username: Res.username, + }); + + } } catch (error) { console.error(error); next(error); @@ -35,7 +55,6 @@ router.post("/login", async (req, res, next) => { module.exports = router; - /* curl localhost/api/v0/user/register -H "Content-Type: application/json" -X POST -d '{"username": @@ -78,4 +97,4 @@ router.get('/:uid', async function(req, res, next){ module.exports = router; -*/ \ No newline at end of file +*/ diff --git a/consumerWebsite/views/signuplogin.ejs b/consumerWebsite/views/signuplogin.ejs index a73fd63..1734076 100644 --- a/consumerWebsite/views/signuplogin.ejs +++ b/consumerWebsite/views/signuplogin.ejs @@ -2,7 +2,7 @@
-