Advertisement
Guest User

Untitled

a guest
May 22nd, 2018
168
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. const express = require('express');
  2. const fs = require('fs');
  3. const bcrypt = require('bcrypt');
  4. const jwt = require('jsonwebtoken');
  5. const validator = require('validator');
  6. const striptags = require('striptags');
  7. const nodemailer = require('nodemailer');
  8. const randomstring = require("randomstring");
  9. const date = require('date-and-time');
  10. const config = require('../config.json');
  11. const conn = require('../includes/db');
  12.  
  13. const router = express.Router();
  14. const saltRounds = 10;
  15. const transporter = nodemailer.createTransport({
  16.     host: config.MAIL_HOST,
  17.     port: config.MAIL_PORT,
  18.     secure: config.MAIL_SECURE,
  19.     auth: {
  20.         user: config.MAIL_USER,
  21.         pass: config.MAIL_PASS
  22.     },
  23.     tls: {
  24.         rejectUnauthorized: false
  25.     }
  26. });
  27.  
  28. // Login
  29. router.post('/login', function (req, res) {
  30.     if (req.body.email && req.body.password) {
  31.         var email = striptags(req.body.email.trim());
  32.         var password = req.body.password.trim();
  33.  
  34.         if (email && password) {
  35.             conn.query("SELECT * FROM users WHERE email = ?", [email], function (err, result) {
  36.                 if (err) {
  37.                     res.status(500).json({ message: 'MySQL Hiba' });
  38.                 }
  39.                 else if (result.length == 1) {
  40.                     var json = JSON.parse(JSON.stringify(result))[0];
  41.  
  42.                     if (bcrypt.compareSync(password, json.password)) {
  43.                         if (json.active == 1) {
  44.                             jwt.sign({ json }, config.secret, { expiresIn: '30min' }, (err, token) => {
  45.                                 res.json({
  46.                                     token
  47.                                 });
  48.                             });
  49.                         }
  50.                         else res.status(401).json({ message: 'Ez a fiók nincs aktiválva!' });
  51.                     }
  52.                     else res.status(401).json({ message: 'Hibás email címet vagy jelszót írtál be!' });
  53.                 }
  54.                 else res.status(401).json({ message: 'Hibás email címet vagy jelszót írtál be!' });
  55.             });
  56.         }
  57.         else res.status(500).json({ message: "Nem töltöttél ki minden mezőt!" });
  58.     }
  59.     else res.status(500).json({ message: "Rendszerhiba történt! Kérlek vedd fel velünk a kapcsolatot." });
  60. });
  61.  
  62. // Register
  63. router.post('/register', function (req, res) {
  64.     if (req.body.lastname && req.body.firstname && req.body.email && req.body.password && req.body.passwordAgain) {
  65.         var lastname = striptags(req.body.lastname.trim());
  66.         var firstname = striptags(req.body.firstname.trim());
  67.         var email = striptags(req.body.email.trim());
  68.         var password = req.body.password.trim();
  69.         var passwordAgain = req.body.passwordAgain.trim();
  70.  
  71.         if (lastname && firstname && email && password && passwordAgain) {
  72.             if (validator.isLength(lastname, 3, 20) && validator.isLength(firstname, 3, 20)) {
  73.                 if (validator.isLength(email, 6, 40) && validator.isEmail(email)) {
  74.                     if (validator.isLength(password, 8, 32)) {
  75.                         if (password == passwordAgain) {
  76.                             conn.query("SELECT * FROM users WHERE email = ?", [email], function (err, result) {
  77.                                 if (err) {
  78.                                     res.status(500).json({ message: 'MySQL Hiba' });
  79.                                 }
  80.                                 else if (result.length == 0) {
  81.                                     var salt = bcrypt.genSaltSync(saltRounds);
  82.                                     var hash = bcrypt.hashSync(password, salt);
  83.                                     var now = new Date();
  84.  
  85.                                     conn.query("INSERT INTO users (email, password, active, credit, admin, regdate) VALUES (?, ?, 0, 0, 0, ?)", [email, hash, date.format(now, 'YYYY-MM-DD HH:mm:ss')], function (err, result) {
  86.                                         if (err) {
  87.                                             res.status(500).json({ message: 'MySQL Hiba' });
  88.                                         }
  89.                                         else {
  90.                                             var userId = result.insertId;
  91.  
  92.                                             conn.query("INSERT INTO users_personal_info (user_id, lastname, firstname) VALUES (?, ?, ?)", [userId, lastname, firstname], function (err, result) {
  93.                                                 if (err) {
  94.                                                     res.status(500).json({ message: 'MySQL Hiba' });
  95.                                                 }
  96.                                                 else {
  97.                                                     var token = randomstring.generate(30);
  98.  
  99.                                                     conn.query("INSERT INTO users_activate (user_id, token) VALUES (?, ?)", [userId, token], function (err, result) {
  100.                                                         if (err) {
  101.                                                             res.status(500).json({ message: 'MySQL Hiba' });
  102.                                                         }
  103.                                                         else {
  104.                                                             fs.readFile('./templates/auth/register.html', 'utf8', function read(err, data) {
  105.                                                                 if (err) {
  106.                                                                     res.status(500).json({ message: 'Nem lehetett elküldeni az emailt! Kérlek vedd fel velünk a kapcsolatot.' });
  107.                                                                 } else {
  108.                                                                     var template = data.replace('{token}', token);
  109.  
  110.                                                                     var mailOptions = {
  111.                                                                         from: 'info@srkhost.eu',
  112.                                                                         to: email,
  113.                                                                         subject: 'Fiók Aktiválás - SRKHOST',
  114.                                                                         html: template
  115.                                                                     };
  116.  
  117.                                                                     transporter.sendMail(mailOptions, function (error, info) {
  118.                                                                         if (error) {
  119.                                                                             res.status(500).json({ message: 'Nem lehetett elküldeni az emailt! Kérlek vedd fel velünk a kapcsolatot.' });
  120.                                                                         } else {
  121.                                                                             res.json({ message: "Sikeres regisztráció! Emailben elküldük az aktiváló linket." });
  122.                                                                         }
  123.                                                                     });
  124.                                                                 }
  125.                                                             });
  126.                                                         }
  127.                                                     });
  128.                                                 }
  129.                                             });
  130.                                         }
  131.                                     });
  132.                                 }
  133.                                 else res.status(500).json({ message: "Ezzel az email címmel már regisztráltak!" });
  134.                             });
  135.                         }
  136.                         else res.status(500).json({ message: "Nem egyeznek meg a jelszavak!" });
  137.                     }
  138.                     else res.status(500).json({ message: "A jelszónak 8 és 32 karakter között kell lennie!" });
  139.                 }
  140.                 else res.status(500).json({ message: "Nem megfelelő email cím!" });
  141.             }
  142.             else res.status(500).json({ message: "A vezetéknév és a keresztnév minimum 3 karakteres, maximum 20 karakteres lehet!" });
  143.         }
  144.         else res.status(500).json({ message: "Nem töltöttél ki minden mezőt!" });
  145.     }
  146.     else res.status(500).json({ message: "Rendszerhiba történt! Kérlek vedd fel velünk a kapcsolatot." });
  147. });
  148.  
  149. // Activate
  150. router.post('/activate', function (req, res) {
  151.     if (req.body.token) {
  152.         var token = req.body.token.trim();
  153.  
  154.         conn.query("SELECT * FROM users_activate WHERE token = ?", [token], function (err, result) {
  155.             if (err) {
  156.                 res.status(500).json({ message: 'MySQL Hiba' });
  157.             }
  158.             else if (result.length == 1) {
  159.                 var json = JSON.parse(JSON.stringify(result))[0];
  160.  
  161.                 conn.query("UPDATE users SET active = 1 WHERE id = ?", [json.user_id], function (err, result) {
  162.                     if (err) {
  163.                         res.status(500).json({ message: 'MySQL Hiba' });
  164.                     }
  165.                     else {
  166.                         conn.query("DELETE FROM users_activate WHERE token = ?", [token], function (err, result) {
  167.                             if (err) {
  168.                                 res.status(500).json({ message: 'MySQL Hiba' });
  169.                             }
  170.                             else {
  171.                                 res.json({ message: "Sikeres fiók aktiválás! Most már beléphetsz." });
  172.                             }
  173.                         });
  174.                     }
  175.                 });
  176.             }
  177.             else res.status(500).json({ message: "Nem található aktivációs token!" });
  178.         });
  179.     }
  180.     else res.status(500).json({ message: "Rendszerhiba történt! Kérlek vedd fel velünk a kapcsolatot." });
  181. });
  182.  
  183. // Forgot Password
  184. router.post('/forgot-password', function (req, res) {
  185.     if (req.body.email) {
  186.         var email = striptags(req.body.email.trim());
  187.         if (email) {
  188.             if (validator.isLength(email, 6, 40) && validator.isEmail(email)) {
  189.                 conn.query('SELECT * FROM users WHERE email = ?', [email], function (err, result) {
  190.                     if (err) {
  191.                         res.status(500).json({ message: 'MySQL Hiba' });
  192.                     }
  193.                     else {
  194.                         if (result.length == 1) {
  195.                             var user = JSON.parse(JSON.stringify(result))[0];
  196.  
  197.                             conn.query("SELECT * FROM users_forgot_password WHERE user_id = ? AND used = 0", [user.id], function (err, result) {
  198.                                 if (err) {
  199.                                     res.status(500).json({ message: 'MySQL Hiba' });
  200.                                 }
  201.                                 else {
  202.                                     if (result.length > 0) {
  203.                                         var forgot_password = JSON.parse(JSON.stringify(result))[0];
  204.                                         conn.query("UPDATE users_forgot_password SET used = 1 WHERE id = ?", [forgot_password.id], function (err, result) {
  205.                                             if (err) {
  206.                                                 res.status(500).json({ message: 'MySQL Hiba' });
  207.                                             }
  208.                                         });
  209.                                     }
  210.                                 }
  211.                             });
  212.  
  213.                             var token = randomstring.generate(40);
  214.                             var now = new Date();
  215.  
  216.                             conn.query("INSERT INTO users_forgot_password (user_id, token, used, creadate) VALUES (?, ?, 0, ?)", [user.id, token, date.format(now, 'YYYY-MM-DD HH:mm:ss')], function (err, result) {
  217.                                 if (err) {
  218.                                     res.status(500).json({ message: 'MySQL Hiba' });
  219.                                 }
  220.                                 else {
  221.                                     fs.readFile('./templates/auth/forgotPassword.html', 'utf8', function read(err, data) {
  222.                                         if (err) {
  223.                                             res.status(500).json({ message: 'Nem lehetett elküldeni az emailt! Kérlek vedd fel velünk a kapcsolatot.' });
  224.                                         } else {
  225.                                             var template = data.replace('{token}', token);
  226.  
  227.                                             var mailOptions = {
  228.                                                 from: 'info@srkhost.eu',
  229.                                                 to: user.email,
  230.                                                 subject: 'Jelszó változtatás - SRKHOST',
  231.                                                 html: template
  232.                                             };
  233.  
  234.                                             transporter.sendMail(mailOptions, function (error, info) {
  235.                                                 if (error) {
  236.                                                     res.status(500).json({ message: 'Nem lehetett elküldeni az emailt! Kérlek vedd fel velünk a kapcsolatot.' });
  237.                                                 } else {
  238.                                                     res.json({ message: "Sikeres jelszó kérés! Emailben elküldtük az új jelszó beállító linket." });
  239.                                                 }
  240.                                             });
  241.                                         }
  242.                                     });
  243.                                 }
  244.                             });
  245.                         }
  246.                         else res.status(500).json({ message: 'Nem található email cím!' });
  247.                     }
  248.                 });
  249.             }
  250.             else res.status(500).json({ message: "Nem megfelelő email cím!" });
  251.         }
  252.         else res.status(500).json({ message: "Nem töltöttél ki minden mezőt!" });
  253.     }
  254.     else res.status(500).json({ message: "Rendszerhiba történt! Kérlek vedd fel velünk a kapcsolatot." });
  255. });
  256.  
  257. // New password
  258. router.post('/new-password', function (req, res) {
  259.     if (req.body.token && req.body.password && req.body.passwordAgain) {
  260.         var token = req.body.token.trim();
  261.         var password = req.body.password.trim();
  262.         var passwordAgain = req.body.passwordAgain.trim();
  263.  
  264.         if (token && password && passwordAgain) {
  265.             if (validator.isLength(password, 8, 32)) {
  266.                 if (password == passwordAgain) {
  267.                     conn.query("SELECT * FROM users_forgot_password WHERE token = ? AND used = 0", [token], function (err, result) {
  268.                         if (err) {
  269.                             res.status(500).json({ message: 'MySQL Hiba' });
  270.                         }
  271.                         else {
  272.                             if (result.length == 1) {
  273.                                 var forgot_password = JSON.parse(JSON.stringify(result))[0];
  274.  
  275.                                 var salt = bcrypt.genSaltSync(saltRounds);
  276.                                 var hash = bcrypt.hashSync(password, salt);
  277.  
  278.                                 conn.query("UPDATE users SET password = ? WHERE id = ?", [hash, forgot_password.user_id], function (err, result) {
  279.                                     if (err) {
  280.                                         res.status(500).json({ message: 'MySQL Hiba' });
  281.                                     }
  282.                                     else {
  283.                                         conn.query("UPDATE users_forgot_password SET used = 1 WHERE id = ?", [forgot_password.id], function (err, result) {
  284.                                             if (err) {
  285.                                                 res.status(500).json({ message: 'MySQL Hiba' });
  286.                                             }
  287.                                             else {
  288.                                                 fs.readFile('./templates/auth/newPassword.html', 'utf8', function read(err, data) {
  289.                                                     if (err) {
  290.                                                         res.status(500).json({ message: 'Nem lehetett elküldeni az emailt! Kérlek vedd fel velünk a kapcsolatot.' });
  291.                                                     } else {
  292.                                                         conn.query("SELECT * FROM users WHERE id = ?", [forgot_password.user_id], function (err, result) {
  293.                                                             if (err) {
  294.                                                                 res.status(500).json({ message: 'Nem lehetett elküldeni az emailt! Kérlek vedd fel velünk a kapcsolatot.' });
  295.                                                             }
  296.                                                             else {
  297.                                                                 var user = JSON.parse(JSON.stringify(result))[0];
  298.  
  299.                                                                 var mailOptions = {
  300.                                                                     from: 'info@srkhost.eu',
  301.                                                                     to: user.email,
  302.                                                                     subject: 'Jelszavad megváltozott - SRKHOST',
  303.                                                                     html: data
  304.                                                                 };
  305.  
  306.                                                                 transporter.sendMail(mailOptions, function (error, info) {
  307.                                                                     if (error) {
  308.                                                                         res.status(500).json({ message: 'Nem lehetett elküldeni az emailt! Kérlek vedd fel velünk a kapcsolatot.' });
  309.                                                                     } else {
  310.                                                                         res.json({ message: "Sikeres jelszó kérés! Emailben elküldtük az új jelszó beállító linket." });
  311.                                                                     }
  312.                                                                 });
  313.                                                             }
  314.                                                         });
  315.                                                     }
  316.                                                 });
  317.                                             }
  318.                                         });
  319.                                     }
  320.                                 });
  321.                             }
  322.                             else res.status(500).json({ message: "Nem található token!" });
  323.                         }
  324.                     });
  325.                 }
  326.                 else res.status(500).json({ message: "Nem egyeznek meg a jelszavak!" });
  327.             }
  328.             else res.status(500).json({ message: "A jelszónak 8 és 32 karakter között kell lennie!" });
  329.         }
  330.         else res.status(500).json({ message: "Nem töltöttél ki minden mezőt!" });
  331.     }
  332.     else res.status(500).json({ message: "Rendszerhiba történt! Kérlek vedd fel velünk a kapcsolatot." });
  333. });
  334.  
  335. // Change password
  336. router.post('/change-password', function (req, res) {
  337.     if (req.body.oldPass && req.body.newPass && req.body.newPassAgain) {
  338.         var oldPass = req.body.oldPass.trim();
  339.         var newPass = req.body.newPass.trim();
  340.         var newPassAgain = req.body.newPassAgain.trim();
  341.  
  342.         if (oldPass && newPass && newPassAgain) {
  343.             conn.query("SELECT * FROM users WHERE id = ?", [req.user.json.id], function (err, result) {
  344.                 if (err) {
  345.                     res.status(500).json({ message: 'MySQL Hiba' });
  346.                 }
  347.                 else {
  348.                     var user = JSON.parse(JSON.stringify(result))[0];
  349.  
  350.                     if (bcrypt.compareSync(oldPass, user.password)) {
  351.                         if (validator.isLength(newPass, 8, 32) && validator.isLength(newPassAgain, 8, 32)) {
  352.                             if (newPass == newPassAgain) {
  353.                                 var salt = bcrypt.genSaltSync(saltRounds);
  354.                                 var hash = bcrypt.hashSync(newPass, salt);
  355.  
  356.                                 conn.query("UPDATE users SET password = ? WHERE id = ?", [hash, req.user.json.id], function (err, result) {
  357.                                     if (err) {
  358.                                         res.status(500).json({ message: 'MySQL Hiba' });
  359.                                     }
  360.                                     else {
  361.                                         res.json({ message: "Sikeres jelszó változtatás!" });
  362.                                     }
  363.                                 });
  364.                             }
  365.                             else res.status(500).json({ message: "Nem egyeznek meg a jelszavak!" });
  366.                         }
  367.                         else res.status(500).json({ message: "Az új jelszónak 8 és 32 karakter között kell lennie!" });
  368.                     }
  369.                     else res.status(500).json({ message: "Nem megfelelő régi jelszó!" });
  370.                 }
  371.             });
  372.         }
  373.         else res.status(500).json({ message: "Nem töltöttél ki minden mezőt!" });
  374.     }
  375.     else res.status(500).json({ message: "Rendszerhiba történt! Kérlek vedd fel velünk a kapcsolatot." });
  376. });
  377.  
  378. // Update User Data
  379. router.post('/update-user', function (req, res) {
  380.     if (req.body.user) {
  381.         var lastname = striptags(req.body.user.lastname).trim();
  382.         var firstname = striptags(req.body.user.firstname).trim();
  383.         var address1 = striptags(req.body.user.address1).trim();
  384.         var address2 = striptags(req.body.user.address2).trim();
  385.         var country = striptags(req.body.user.country).trim();
  386.         var county = striptags(req.body.user.county).trim();
  387.         var state = striptags(req.body.user.state).trim();
  388.         var post_code = req.body.user.post_code;
  389.         var phone_number = striptags(req.body.user.phone_number).trim();
  390.         var company = striptags(req.body.user.company).trim();
  391.  
  392.         if (lastname && firstname && country) {
  393.             if (validator.isLength(lastname, 3, 20) && validator.isLength(firstname, 3, 20)) {
  394.                 conn.query("UPDATE users_personal_info SET lastname = ?, firstname = ?, address1 = ?, address2 = ?, country = ?, county = ?, state = ?, post_code = ?, phone_number = ?, company = ?",
  395.                     [lastname, firstname, address1, address2, country, county, state, post_code, phone_number, company], function (err, result) {
  396.                         if (err) {
  397.                             res.status(500).json({ message: 'MySQL Hiba' });
  398.                         }
  399.                         else {
  400.                             res.json({ message: "Sikeres adat szerkesztés!" });
  401.                         }
  402.                     });
  403.             }
  404.             else res.status(500).json({ message: "A vezetéknév és a keresztnév minimum 3 karakteres, maximum 20 karakteres lehet!" });
  405.         }
  406.         else res.status(500).json({ message: "Nem töltöttél ki minden mezőt!" });
  407.     }
  408.     else res.status(500).json({ message: "Rendszerhiba történt! Kérlek vedd fel velünk a kapcsolatot." });
  409. });
  410.  
  411. // Check Token
  412. router.get('/checktoken', function (req, res) {
  413.     res.json({ message: 'Megfelelő token!' });
  414. });
  415.  
  416. // User Data
  417. router.get('/info', function (req, res) {
  418.     conn.query('SELECT * FROM users WHERE id = ?', [req.user.json.id], function (err, result) {
  419.         if (err) {
  420.             res.status(500).json({ message: 'MySQL Hiba' });
  421.         }
  422.         else {
  423.             var user = JSON.parse(JSON.stringify(result))[0];
  424.  
  425.             conn.query('SELECT * FROM users_personal_info WHERE user_id = ?', [user.id], function (err, result) {
  426.                 if (err) {
  427.                     res.status(500).json({ message: 'MySQL Hiba' });
  428.                 }
  429.                 else {
  430.                     var userData = JSON.parse(JSON.stringify(result))[0];
  431.  
  432.                     res.json({
  433.                         "id": user.id,
  434.                         "email": user.email,
  435.                         "credit": user.credit,
  436.                         "admin": user.admin,
  437.                         "lastname": userData.lastname,
  438.                         "firstname": userData.firstname,
  439.                         "address1": userData.address1,
  440.                         "address2": userData.address2,
  441.                         "country": userData.country,
  442.                         "county": userData.county,
  443.                         "state": userData.state,
  444.                         "post_code": userData.post_code,
  445.                         "phone_number": userData.phone_number,
  446.                         "company": userData.company
  447.                     });
  448.                 }
  449.             })
  450.         }
  451.     });
  452. });
  453.  
  454. // Is Admin
  455. router.get('/isAdmin', function (req, res) {
  456.     conn.query("SELECT id, admin FROM users WHERE id = ?", [req.user.json.id], function(err, result) {
  457.         if (err) {
  458.             res.status(500).json({ message: 'MySQL Hiba' });
  459.         }
  460.         else {
  461.             var user = JSON.parse(JSON.stringify(result))[0];
  462.  
  463.             if(user.admin == 1) {
  464.                 res.json({ message: "A felhasználó admin!" });
  465.             }
  466.             else res.status(500).json({ message: "A felhasználó nem admin!" });
  467.         }
  468.     });
  469. });
  470.  
  471. // Logout
  472. router.post('/logout', function (req, res) {
  473.     res.json({ message: 'Sikeres kilépés!' });
  474. });
  475.  
  476. module.exports = router;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement