Advertisement
Guest User

Untitled

a guest
Nov 24th, 2017
113
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. const express = require('express');
  2. const bodyParser = require('body-parser');
  3. const storage = require('./modules/storage.js');
  4. const check = require('./modules/auth.js');
  5. const fileload = require('express-fileupload');
  6. let routeAdd = require('./routes/add');
  7. let routeAutos = require('./routes/autos');
  8. let routeAuto = require('./routes/auto');
  9. let routes = require('./routes/index');
  10. let routerReg = require('./routes/register');
  11. let rourtAuth = require('./routes/auth');
  12. const cookieParser = require('cookie-parser');
  13. const session = require('express-session');
  14. const crypto = require('crypto');
  15. const passport = require('passport');
  16. const LocalStrategy = require('passport-local').Strategy;
  17. let path = require('path');
  18. let auth = require('basic-auth');
  19.  
  20. const app = express();
  21. app.set('view engine', 'ejs');
  22. app.use(express.static('public'));
  23. app.use(bodyParser.urlencoded({ extended: false }));
  24. app.use(bodyParser.json());
  25. app.use(fileload());
  26. app.use(cookieParser());
  27. app.use(session({
  28.     secret: 'SEGReT$25_',
  29.     resave: false,
  30.     saveUninitialized: true
  31. }));
  32. app.use(passport.initialize());
  33. app.use(passport.session());
  34.  
  35. // app.use(function (req, res, next) {
  36. //     res.status(404);
  37. //     // respond with json
  38. //     if (req.accepts('json')) {
  39. //         res.setHeader('Content-Type', 'application/json');
  40. //         res.send(JSON.stringify({ "message": "Not found", "documentation_url": "docs/api/v1" }, null, 2));
  41. //         return;
  42. //     }
  43. // });
  44.  
  45. const sendFileOpts = {
  46.     root: path.join(__dirname, 'views')
  47. };
  48.  
  49. app.use('/', routes);
  50. app.use('/', routerReg);
  51. app.use('/', rourtAuth);
  52. app.use('/', routeAdd);
  53. app.use('/', routeAutos);
  54. app.use('/', routeAuto);
  55.  
  56. const serverSalt = "45%sAlT_";
  57.  
  58. function sha512(password, salt) {
  59.     const hash = crypto.createHmac('sha512', salt);
  60.     hash.update(password);
  61.     const value = hash.digest('hex');
  62.     return {
  63.         salt: salt,
  64.         passwordHash: value
  65.     };
  66. };
  67.  
  68. function basicAuth(callback, param, req, res) {
  69.     let credentials = auth(req);
  70.     if (credentials) {
  71.         storage.userGetByUsername(credentials.name)
  72.             .then(() => {
  73.                 callback(param);
  74.             })
  75.             .catch(() => {
  76.                 res.setHeader('Content-Type', 'application/json');
  77.                 res.send(JSON.stringify({ "message": "Invalid username or password", "documentation_url": "docs/api/v1" }, null, 2));
  78.             });
  79.     } else {
  80.         res.setHeader('Content-Type', 'application/json');
  81.         res.send(JSON.stringify({ "message": "Required auth", "documentation_url": "docs/api/v1" }, null, 2));
  82.     }
  83. }
  84.  
  85. app.get('/api/v1/users',
  86.     (req, res) => {
  87.         function getAllUsers() {
  88.             storage.usersGetAll()
  89.                 .then(users => {
  90.                     let outUsers = [];
  91.                     for (let user of users)
  92.                         outUsers.push({
  93.                             "id": user._id,
  94.                             "username": user.username,
  95.                             "role": user.role,
  96.                             "api_url": "/api/v1/users/" + user.username
  97.                         });
  98.  
  99.                     res.setHeader('Content-Type', 'application/json');
  100.                     res.send(JSON.stringify(outUsers, null, 2));
  101.                 })
  102.         }
  103.         basicAuth(getAllUsers, null, req, res);
  104.     });
  105.  
  106. app.get('/api/v1/cars',
  107.     (req, res) => {
  108.         function getAllCars() {
  109.             storage.getAll()
  110.                 .then(cars => {
  111.                     let outCars = [];
  112.                     for (let car of cars)
  113.                         outCars.push({
  114.                             "id": car._id,
  115.                             "model": car.model,
  116.                             "size_class": car.size_class,
  117.                             "doors": car.doors,
  118.                             "engine_volume": car.engine_volume,
  119.                             "engine_type": car.engine_type,
  120.                             "start_date": car.start_date,
  121.                             "api_url": "/api/v1/cars/" + car._id
  122.                         });
  123.  
  124.                     res.setHeader('Content-Type', 'application/json');
  125.                     res.send(JSON.stringify(outCars, null, 2));
  126.                 });
  127.         }
  128.         basicAuth(getAllCars, null, req, res);
  129.     });
  130.  
  131. app.post('/api/v1/cars/delete/:id',
  132.     check.checkAdmin,
  133.     (req, res) => {
  134.         const id = parseInt(req.params.auto_id);
  135.         storage.remove(id).then(() => {
  136.             res.setHeader('Content-Type', 'application/json');
  137.             res.send(JSON.stringify({ "message": "Object deleted", "documentation_url": "docs/api/v1" }, null, 2));
  138.         })
  139.     });
  140.  
  141. app.get('/api/v1/cars/:id',
  142.     (req, res) => {
  143.  
  144.         function getCar(param) {
  145.             storage.getById(param)
  146.                 .then(car => {
  147.                     let outCar = {
  148.                         "id": car._id,
  149.                         "model": car.model,
  150.                         "size_class": car.size_class,
  151.                         "doors": car.doors,
  152.                         "engine_volume": car.engine_volume,
  153.                         "engine_type": car.engine_type,
  154.                         "start_date": car.start_date,
  155.                         "api_url": "/api/v1/cars/" + car._id
  156.                     };
  157.                     res.setHeader('Content-Type', 'application/json');
  158.                     res.send(JSON.stringify(outCar, null, 2));
  159.                 })
  160.                 .catch(error => {
  161.                     console.log(error);
  162.                     res.setHeader('Content-Type', 'application/json');
  163.                     res.send(JSON.stringify({ "message": "404 not found", "documentation_url": "docs/api/v1" }, null, 2));
  164.                 });
  165.         }
  166.  
  167.         basicAuth(getCar, req.params.id, req, res);
  168.     });
  169.  
  170. app.get('/api/v1/users/:username',
  171.     (req, res) => {
  172.         function getUser(param) {
  173.             storage.userGetByUsername(param)
  174.                 .then(user => {
  175.                     let outuser = {
  176.                         "id": user._id,
  177.                         "username": user.username,
  178.                         "role": user.role,
  179.                         "api_url": "/api/v1/users/" + user.username
  180.                     };
  181.                     res.setHeader('Content-Type', 'application/json');
  182.                     res.send(JSON.stringify(outuser, null, 2));
  183.                 })
  184.                 .catch(error => {
  185.                     console.log(error);
  186.                     res.setHeader('Content-Type', 'application/json');
  187.                     res.send(JSON.stringify({ "message": "404 not found", "documentation_url": "docs/api/v1" }, null, 2));
  188.                 });
  189.         }
  190.         basicAuth(getUser, req.params.username, req, res);
  191.     });
  192.  
  193. app.get('/docs/api/v1',
  194.     (req, res) => {
  195.         res.sendFile('api.html', sendFileOpts);
  196.     });
  197.  
  198. app.use(function (req, res, next) {
  199.     res.status(404);
  200.     // respond with json
  201.     if (req.accepts('json')) {
  202.         res.setHeader('Content-Type', 'application/json');
  203.         res.send(JSON.stringify({ "message": "Not found", "documentation_url": "docs/api/v1" }, null, 2));
  204.         return;
  205.     }
  206. });
  207. app.listen(process.env.PORT || 5000);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement