Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- "use strict";
- var mongoose = require("mongoose");
- var crypto = require("crypto");
- const express = require("express");
- var Customer = require("../server/models/customer");
- var Order = require("../server/models/order");
- var User = require("../server/models/user");
- const app = express();
- mongoose.connect(
- "mongodb://admin:Golden95!2345@ds239412.mlab.com:39412/quadbudscore"
- );
- var db = mongoose.connection;
- db.on("error", console.error.bind(console, "connection error:"));
- db.once("open", function() {
- // we're connected!
- console.log("Connected to remote DB");
- });
- const bodyParser = require("body-parser");
- app.use(bodyParser.urlencoded({ extended: true }));
- app.use(bodyParser.json());
- app.use(function(req, res, next) {
- res.header("Access-Control-Allow-Origin", "*");
- res.header(
- "Access-Control-Allow-Headers",
- "Origin, X-Requested-With, Content-Type, Accept"
- );
- next();
- });
- app.get("/", (req, res) => res.send("Hello World!"));
- app.get("/orders", (req, res) => {
- Order.find((err, orders) => {
- if (err) console.error(err);
- if (orders.length > 0) {
- console.log("Found orders: ", orders.length);
- }
- res.status(200).json({o: orders});
- });
- });
- app.get("/findOrders", (req, res) => {
- if (!req.query.phone) {
- res.status(500).json({err: 'No phone provided'});
- }
- Order.find({phone: req.query.phone}, (err, orders) => {
- if (err) console.error(err);
- res.status(200).json({reply: 'success', o: orders});
- });
- });
- app.post("/login", (req, res) => {
- //req.body has u & p
- if (req.body && req.body.u && req.body.p) {
- //hash & find
- var saltedHashbrowns = saltHashPassword(req.body.u + req.body.p);
- User.find({ loginHash: saltedHashbrowns.p.passwordHash }, (err, users) => {
- if (err) console.error(err);
- console.log("Found user(s)", users);
- if (users.length > 0) {
- if (users[0].name.includes("Scott")) {
- res.status(200).json({ reply: "Granted" });
- } else {
- res.status(500).json({ error: "Internal server error" });
- }
- } else {
- res.status(401).json({error: 'Unauthorized'});
- }
- });
- }
- });
- app.post("/markOrderVerified", (req, res) => {
- console.log(req.body);
- if (req.body.order._id) {
- Order.findById(req.body.order._id, (err, orders) => {
- if (err) console.log(err);
- if (orders) {
- orders.stage = 2;
- orders.save();
- res.status(200).json({ success: "ok" });
- } else {
- res.status(500).json({ error: "More than one order", errMsg: orders });
- }
- });
- } else {
- res.status(500).json({ error: "Internal server error" });
- }
- });
- app.post("/markOrderComplete", (req, res) => {
- console.log(req.body);
- if (req.body.order._id) {
- Order.findById(req.body.order._id, (err, orders) => {
- if (err) console.log(err);
- if (orders) {
- orders.completed = true;
- orders.stage = 4;
- orders.save();
- res.status(200).json({ success: "ok" });
- } else {
- res.status(500).json({ error: "More than one order", errMsg: orders });
- }
- });
- } else {
- res.status(500).json({ error: "Internal server error" });
- }
- });
- app.post("/newOrder", (req, res) => {
- //Req will have our body and our details for making a customer and new order to save in db.
- console.log(req.body);
- var orderRequest = req.body;
- var customer = new Customer({ name: "test" });
- //Map our request body to our order
- //Validate we have enough fields
- if (!orderRequest.name && !orderRequest.phone && !orderRequest.address) {
- res.status(500).json({error: "Missing name/phone/address"});
- }
- var order = new Order({
- order: orderRequest.order,
- address: orderRequest.address,
- phone: orderRequest.phone,
- name: orderRequest.name,
- payment: orderRequest.paymentMethod,
- notes: orderRequest.notes,
- stage: 1
- });
- //Let's try and find our existing customer
- //Use phone number
- Customer.find({ phone: orderRequest.phone }, function(err, customers) {
- if (err) return console.error(err);
- if (Array.isArray(customers) && customers.length > 0) {
- if (customers.length == 1) {
- console.log(
- "Found an existing customer with this phone number",
- customers[0]
- );
- //Add new order to existing orders
- let customer = customers[0];
- order._customer = customer;
- customer.orders.push(order);
- order.save(function(err, order) {
- if (err) console.error(err);
- console.log("Saved new order", order);
- res.status(200).json({reply: "Success, new order created", o: order});
- });
- } else {
- console.log(
- "Found multiple customers with this phone number",
- customers
- );
- res.status(500).json({error: "Multiple customers with this phone number", c: customers});
- }
- } else {
- //Create new
- customer.name = orderRequest.name;
- customer.email = orderRequest.email;
- customer.address = orderRequest.address;
- customer.phone = orderRequest.phone;
- customer.notes = orderRequest.notes;
- customer.orders.push(orderRequest.order);
- order.save(function(err, order) {
- if (err) console.error(err);
- console.log("Saved new order", order);
- });
- customer.save(function(err, customer) {
- if (err) return console.error(err);
- console.log("New customer saved");
- });
- }
- });
- });
- app.listen(3000, () => console.log("Example app listening on port 3000!"));
- /**
- * generates random string of characters i.e salt
- * @function
- * @param {number} length - Length of the random string.
- */
- var genRandomString = function(length) {
- return crypto
- .randomBytes(Math.ceil(length / 2))
- .toString("hex") /** convert to hexadecimal format */
- .slice(0, length); /** return required number of characters */
- };
- /**
- * hash password with sha512.
- * @function
- * @param {string} password - List of required fields.
- * @param {string} salt - Data to be validated.
- */
- var sha512 = function(password, salt) {
- var hash = crypto.createHmac(
- "sha512",
- "0cf4c58befcce2e2"
- ); /** Hashing algorithm sha512 */
- hash.update(password);
- var value = hash.digest("hex");
- return {
- salt: "0cf4c58befcce2e2",
- passwordHash: value
- };
- };
- function saltHashPassword(userpassword) {
- var salt = genRandomString(16); /** Gives us salt of length 16 */
- var passwordData = sha512(userpassword, salt);
- console.log("UserPassword = " + userpassword);
- console.log("Passwordhash = " + passwordData.passwordHash);
- console.log("nSalt = " + passwordData.salt);
- return { s: salt, p: passwordData };
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement