Advertisement
Guest User

Untitled

a guest
Jun 19th, 2019
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.99 KB | None | 0 0
  1. const express = require('express');
  2. const bodyParser = require("body-parser");
  3. const crypto = require('crypto');
  4. var session = require('express-session');
  5. const internalIp = require('internal-ip');
  6. const getPrices = require('./scrapers/getPrices.js');
  7. const dbConnection = require('./dbConnection.js');
  8. const app = express();
  9. app.use('/assets', express.static('./assets/'));
  10. const localIP = internalIp.v4.sync();
  11. var hotelNames = [];
  12. var urlsHotels = [];
  13. var usersList = [];
  14. var userInfo = new Object();
  15.  
  16. userInfo.id = undefined;
  17. userInfo.role = 0;
  18.  
  19. app.use(session({
  20. secret: 'secret',
  21. resave: true,
  22. saveUninitialized: true
  23. }));
  24.  
  25. app.get('/', function (req, res) {
  26. if (req.session.loggedin && userInfo.role == 0) {
  27. getHotelsdata(res);
  28. } else if (req.session.loggedin && userInfo.role == 1) {
  29. loadAdminPage(res);
  30. } else {
  31. res.redirect('/login');
  32. }
  33. });
  34.  
  35. app.use(bodyParser.urlencoded({ extended: false }));
  36. app.use(bodyParser.json());
  37.  
  38. app.get('/login',function(req,res){
  39. globalRes = res
  40. //res.sendFile(__dirname + "/views/login.html");
  41. res.render('./login.ejs', {
  42. 'localIP':localIP,
  43. });
  44. });
  45. app.post('/submitlogin',function(req,res){
  46. const password = crypto.createHash('sha256').update(req.body.password).digest('hex');
  47. const users = new Promise((resolve, reject) => {
  48. dbConnection
  49. .getUsers()
  50. .then(data => {
  51. resolve(data)
  52. })
  53. });
  54. Promise.all([users])
  55. .then(data => {
  56. usersList = data[0];
  57. var loginSuccess = "0";
  58. for(var i = 0; i < data[0].length; i++) {
  59. if(data[0][i][1] == req.body.user && data[0][i][2] == password) {
  60. req.session.loggedin = true;
  61. req.session.username = req.body.user;
  62. loginSuccess = "1";
  63. userInfo.id = data[0][i][0];
  64. userInfo.role = data[0][i][3];
  65. }
  66. }
  67. res.end(loginSuccess);
  68. });
  69. });
  70.  
  71. app.post('/deleteUser', function(req, res) {
  72. const deleteUser = new Promise((resolve, reject) => {
  73. dbConnection
  74. .deleteUser(req.body.user)
  75. .then(data => {
  76. resolve(data)
  77. response = data[0];
  78. })
  79. });
  80. Promise.all([deleteUser])
  81. .then(data=> {
  82. getUsersData(res, response);
  83. });
  84. })
  85.  
  86. app.post('/changePwd', function(req, res) {
  87. const currentPassword = crypto.createHash('sha256').update(req.body.currentPassword).digest('hex');
  88. const newPassword = crypto.createHash('sha256').update(req.body.newPassword).digest('hex');
  89. const changePwd = new Promise((resolve, reject) => {
  90. dbConnection
  91. .changePwd(currentPassword, newPassword)
  92. .then(data => {
  93. resolve(data)
  94. response = data[0];
  95. })
  96. });
  97. Promise.all([changePwd])
  98. .then(data=> {
  99. res.end(data[0]);
  100. });
  101. })
  102.  
  103. app.post('/addUser', function(req, res) {
  104. const password = crypto.createHash('sha256').update(req.body.password).digest('hex');
  105. var response;
  106. const insertUser = new Promise((resolve, reject) => {
  107. dbConnection
  108. .registerUser(req.body.user, password)
  109. .then(data => {
  110. resolve(data)
  111. response = data;
  112. })
  113. });
  114. Promise.all([insertUser])
  115. .then(data => {
  116. getUsersData(res, response);
  117. });
  118. });
  119.  
  120. app.get('/compare/:visitDay&:visitMonth&:visitYear&:leavingDay&:leavingMonth&:leavingYear', async function(req, res, next) {
  121. if (req.session.loggedin) {
  122. var results = new Array();
  123. const date1 = new Date(req.params.visitMonth + '-' + req.params.visitDay + '-' + req.params.visitYear);
  124. const date2 = new Date(req.params.leavingMonth + '-' + req.params.leavingDay + '-' + req.params.leavingYear);
  125. const timeDiff = Math.abs(date2.getTime() - date1.getTime());
  126. const nights = Math.ceil(timeDiff / (1000 * 3600 * 24));
  127. assignurls(req.params.visitYear, req.params.visitMonth, req.params.visitDay, req.params.leavingYear, req.params.leavingMonth, req.params.leavingDay);
  128. const getPrices = new Promise((resolve, reject) => {
  129. getPrices
  130. .getPrices(results, nights, urlsHotels)
  131. .then(data => {
  132. resolve(data)
  133. })
  134. });
  135. Promise.all([getPrices])
  136. .then(data => {
  137. loadPage(res, JSON.stringify(hotelNames), JSON.stringify(results), req.params.visitDay + "/" + req.params.visitMonth + "/" + req.params.visitYear, req.params.leavingDay + "/" + req.params.leavingMonth + "/" + req.params.leavingYear);
  138. });
  139. } else {
  140. res.redirect('/login');
  141. }
  142. });
  143.  
  144. app.get('/addHotel&:url&:name', function(req, res, next) {
  145. if (req.session.loggedin) {
  146. let url = req.params.url.split('');
  147. url.splice(44, 3);
  148. url[44] = 'visitYear';
  149. url.splice(46, 1);
  150. url[46] = 'visitMonth';
  151. url.splice(48, 1);
  152. url[48] = 'visitDay';
  153. url.splice(70, 3);
  154. url[70] = 'leavingYear';
  155. url.splice(72, 1);
  156. url[72] = 'leavingMonth';
  157. url.splice(74, 1);
  158. url[74] = 'leavingDay';
  159. url = url.join('');
  160. const insertHotel = new Promise((resolve, reject) => {
  161. dbConnection
  162. .insertValues(hotelNames, url, req.params.name, userInfo.id)
  163. .then(data => {
  164. resolve(data)
  165. })
  166. });
  167. Promise.all([insertHotel])
  168. .then(data => {
  169. getHotelsdata(res, data);
  170. });
  171. } else {
  172. res.redirect('/login');
  173. }
  174. });
  175.  
  176. app.get('/deleteHotel&:name', function(req, res, next) {
  177. if (req.session.loggedin) {
  178. const deleteHotel = new Promise((resolve, reject) => {
  179. dbConnection
  180. .deleteValues(req.params.name)
  181. .then(data => {
  182. resolve(data)
  183. })
  184. });
  185. Promise.all([deleteHotel])
  186. .then(data => {
  187. getHotelsdata(res, data);
  188. });
  189. } else {
  190. res.redirect('/login');
  191. }
  192. });
  193.  
  194. app.get('/logout', function(req, res, next) {
  195. req.session.loggedin = false;
  196. res.redirect('/');
  197. });
  198.  
  199. function assignurls(visitYear, visitMonth, visitDay, leavingYear, leavingMonth, leavingDay) {
  200. for(var i = 0; i<urlsHotels.length; i++) {
  201. var finalurl = urlsHotels[i].replace('visitYear', visitYear);
  202. finalurl = finalurl.replace('visitMonth', visitMonth);
  203. finalurl = finalurl.replace('visitDay', visitDay);
  204. finalurl = finalurl.replace('leavingYear', leavingYear);
  205. finalurl = finalurl.replace('leavingMonth', leavingMonth);
  206. finalurl = finalurl.replace('leavingDay', leavingDay);
  207. urlsHotels[i] = finalurl;
  208. }
  209. }
  210.  
  211. function getUsersData(res, response) {
  212. const users = new Promise((resolve, reject) => {
  213. dbConnection
  214. .getUsers()
  215. .then(data => {
  216. resolve(data);
  217. })
  218. });
  219. Promise.all([users])
  220. .then(data => {
  221. usersList = data[0];
  222. res.end(response);
  223. });
  224. }
  225.  
  226. function getHotelsdata(res, results) {
  227. const getNotelNames = new Promise((resolve, reject) => {
  228. dbConnection
  229. .getHotelNames(userInfo.id)
  230. .then(data => {
  231. resolve(data)
  232. })
  233. });
  234.  
  235. const getURLs = new Promise((resolve, reject) => {
  236. dbConnection
  237. .getURLs(userInfo.id)
  238. .then(data => {
  239. resolve(data)
  240. })
  241. });
  242. Promise.all([getNotelNames, getURLs])
  243. .then(data => {
  244. hotelNames = data[0];
  245. urlsHotels = data[1];
  246. loadPage(res, JSON.stringify(hotelNames), JSON.stringify([results]));
  247. });
  248. }
  249.  
  250. function loadPage(res, param1, param2, param3, param4) {
  251. res.render('./comparatorPage.ejs', {
  252. 'hotelNames':param1,
  253. 'results': param2,
  254. 'checkInDate': param3,
  255. 'checkOutDate': param4,
  256. 'localIP': localIP,
  257. });
  258. }
  259.  
  260. function loadAdminPage(res) {
  261. res.render('./adminPage.ejs', {
  262. 'usersList': JSON.stringify(usersList),
  263. 'localIP': localIP
  264. });
  265. }
  266.  
  267. app.listen(process.env.PORT || 3000);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement