diff --git a/api/controller/account.js b/api/controller/account.js index 23fb03f..97d3ccf 100644 --- a/api/controller/account.js +++ b/api/controller/account.js @@ -1,45 +1,59 @@ import db from "./../db"; - +const config = require("../../config"); +let jwt = require('jsonwebtoken'); export const getAccount = (req, res) => { - let id = req.params.id; - // let sql=`SELECT * from MyGuests where Id=${id}`; - let sql = "SELECT * from customer where id_customer = ?"; - db.query(sql, id, (err, response) => { + let email = req.body.email; + let sql = `SELECT * from customer where email = '${email}'`; + db.query(sql, (err, response) => { if (err) throw err; res.status(200); res.json(response); }); }; -export const checkAccount = (req, res) =>{ +export const login = (req, res) => { let email = req.body.email; let pass = req.body.pass; let sql = `SELECT * FROM customer WHERE email ='${email}' AND password='${pass}';`; - db.query(sql,(err,response)=> { - if(err) throw err; + db.query(sql, (err, response) => { + if (err) throw err; res.status(200); - res.json(response); - }) + if (response.length) { + let token = jwt.sign({ email: email }, config.myJWTSecretKey, { + expiresIn: "24h" + }); + res.json({ + success: true, + message: "Authentication successful", + token: token + }); + } else { + res.status(403); + res.json({ + success: false, + message: "Incorrect Email or Password" + }); + } + }); }; -export const addAccount = (req, res) =>{ - console.log(req); +export const register = (req, res) => { let email = req.body.email; let name = req.body.name; let phone = req.body.phone; let address = req.body.address; let pass = req.body.pass; let sql = `INSERT INTO customer (email,PASSWORD,name,phone,address) VALUES ('${email}','${pass}','${name}','${phone}','${address}');`; - db.query(sql,(err,response)=> { - if(err) throw err; + db.query(sql, (err, response) => { + if (err) throw err; res.status(200); res.json(response); - }) + }); }; -export const checkEmail = (req,res)=>{ +export const checkEmail = (req, res) => { let email = req.body.email; let sql = `SELECT * FROM customer WHERE email='${email}';`; - db.query(sql, (err, response)=>{ + db.query(sql, (err, response) => { if (err) throw err; res.status(200); res.json(response); - }) -} + }); +}; diff --git a/api/controller/guest.js b/api/controller/guest.js deleted file mode 100644 index 3e2ebd2..0000000 --- a/api/controller/guest.js +++ /dev/null @@ -1,10 +0,0 @@ -import db from './../db'; - -export const getGuests = (req, res) => { - let sql = 'SELECT * FROM MyGuests' - db.query(sql, (err, response) => { - if (err) throw err - res.status(200); - res.json(response) - }) -} \ No newline at end of file diff --git a/api/controller/postOrder.js b/api/controller/postOrder.js index 660bd6a..9988899 100644 --- a/api/controller/postOrder.js +++ b/api/controller/postOrder.js @@ -1,17 +1,14 @@ import db from "./../db"; export const postOrder = (req, res) => { - console.log(req.body); let salad = req.body.ingredients.salad; let cheese = req.body.ingredients.cheese; let meat = req.body.ingredients.meat; let bacon = req.body.ingredients.bacon; let price = req.body.price; - let id_customer = req.body.customer.id; - let sql = `call addOrder (${salad}, - ${cheese}, ${meat}, - ${bacon}, ${price}, - ,'${id_customer}');`; + let id_customer = req.body.id_customer; + let sql = `CALL addOrder (${id_customer},${salad},${cheese}, ${meat},${bacon}, ${price});`; db.query(sql, (err, response) => { + console.log(sql); if (err) throw err; res.json(response); }); diff --git a/api/router.js b/api/router.js index 8109755..5b4262a 100644 --- a/api/router.js +++ b/api/router.js @@ -1,25 +1,23 @@ -import { getGuests } from "./controller/guest"; -import { getAccount, checkAccount, addAccount,checkEmail} from "./controller/account"; +import { getAccount, login, register,checkEmail} from "./controller/account"; import { getProducts, getLengthProducts } from "./controller/product"; import { postOrder } from "./controller/postOrder"; import { insertProducts } from "./controller/insertProducts"; +const middleware = require('../middleware'); const routes = (app) => { - app.route('/guest') - .get(getGuests); - app.route('/account/:id') - .get(getAccount); app.route('/account') - .post(checkAccount); + .post(middleware.checkToken,getAccount); + app.route('/login') + .post(login); app.route('/existance') .post(checkEmail); app.route('/register') - .post(addAccount) + .post(register) app.route('/product') .get(getProducts); app.route('/product/length').get(getLengthProducts); app.route('/product/insert/:name&:color&:price').get(insertProducts); - app.route("/order").post(postOrder); + app.route("/order").post(middleware.checkToken,postOrder); } export default routes; \ No newline at end of file diff --git a/config.js b/config.js new file mode 100644 index 0000000..40a9443 --- /dev/null +++ b/config.js @@ -0,0 +1,3 @@ +module.exports = { + myJWTSecretKey : "<-tuesday->" +}; \ No newline at end of file diff --git a/middleware.js b/middleware.js new file mode 100644 index 0000000..c3dda51 --- /dev/null +++ b/middleware.js @@ -0,0 +1,29 @@ +let jwt = require('jsonwebtoken'); +const config = require('./config'); +let checkToken = (req, res, next)=>{ + let token = req.headers.authorization; + if(token.startsWith('Bearer ')){ + token = token.slice(7, token.length); + } + if(token){ + jwt.verify(token, config.myJWTSecretKey, (err, decoded)=>{ + if(err) { + return res.json({ + success: false, + message: 'Token is not valid' + }); + } else{ + req.decoded = decoded; + next(); + } + }); + } else { + return res.json({ + success: false, + message: 'Auth token is not supplied' + }); + } +}; +module.exports = { + checkToken: checkToken +} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 39a3f1f..d0340d3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1831,6 +1831,11 @@ "node-releases": "^1.1.23" } }, + "buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" + }, "bytes": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", @@ -2226,6 +2231,14 @@ "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", "dev": true }, + "ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "requires": { + "safe-buffer": "^5.0.1" + } + }, "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -3467,6 +3480,49 @@ "minimist": "^1.2.0" } }, + "jsonwebtoken": { + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", + "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==", + "requires": { + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^5.6.0" + }, + "dependencies": { + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "requires": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "requires": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", @@ -3497,12 +3553,37 @@ "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", "dev": true }, + "lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=" + }, "lodash.isarray": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-4.0.0.tgz", "integrity": "sha1-KspJayjEym1yZxUxNZDALm6jRAM=", "dev": true }, + "lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=" + }, + "lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=" + }, + "lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=" + }, + "lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" + }, "lodash.isregexp": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/lodash.isregexp/-/lodash.isregexp-4.0.1.tgz", @@ -3512,8 +3593,12 @@ "lodash.isstring": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=", - "dev": true + "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=" + }, + "lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=" }, "loose-envify": { "version": "1.4.0", @@ -4977,8 +5062,7 @@ "semver": { "version": "5.7.0", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", - "dev": true + "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==" }, "semver-diff": { "version": "2.1.0", diff --git a/package.json b/package.json index 66b1b41..ea34695 100644 --- a/package.json +++ b/package.json @@ -19,9 +19,11 @@ "nodemon": "^1.19.1" }, "dependencies": { + "body-parser": "^1.19.0", "cors": "^2.8.5", "dotenv": "^8.0.0", "express": "^4.17.1", + "jsonwebtoken": "^8.5.1", "moment": "^2.24.0", "mysql": "^2.17.1", "uuid": "^3.3.2" diff --git a/server.js b/server.js index d3e889f..a05d83d 100644 --- a/server.js +++ b/server.js @@ -5,7 +5,7 @@ import cors from 'cors'; const app = express(); dotenv.config(); app.use(cors()) -app.use(express.json()) +app.use(express.json()); routes(app); app.listen(process.env.PORT) console.log('app running on port ', process.env.PORT); \ No newline at end of file