Guest User

Untitled

a guest
Jun 30th, 2018
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.68 KB | None | 0 0
  1. const express = require('express');
  2. const PORT = 3000;
  3. const path = require('path');
  4. const bcrypt = require('bcrypt-nodejs')
  5. const bodyParser = require('body-parser');
  6. const cookieSession = require('cookie-session');
  7. const nodeSassMiddleware = require('node-sass-middleware');
  8. const app = express();
  9.  
  10. /* Database Config */
  11. const knexConfig = require('./knexfile.js')
  12. const knex = require('knex')(knexConfig.development);
  13.  
  14. app.set("view engine", "ejs");
  15.  
  16. app.use(nodeSassMiddleware({
  17. src: path.join(__dirname, './scss'),
  18. dest: path.join(__dirname, '../public'),
  19. debug: true,
  20. outputStyle: 'compressed'
  21. }));
  22.  
  23. app.use(bodyParser.urlencoded({extended: true}));
  24. app.use(express.static(path.join(__dirname, '../public')));
  25.  
  26. app.use(cookieSession({
  27. name: 'session',
  28. keys: ['random']
  29. }));
  30.  
  31. /* Routes */
  32. app.get("/", (req, res) => {
  33. let templateVars = { user:
  34. { userName: req.session.username,
  35. loggedIn: req.session.logged_in }
  36. };
  37. res.render("index", templateVars);
  38. });
  39.  
  40. app.get("/404", (req, res) => {
  41. let templateVars = { user:
  42. { userName: req.session.username,
  43. loggedIn: req.session.logged_in }
  44. };
  45. res.render("error", templateVars)
  46. });
  47.  
  48. app.get("/new", (req, res) => {
  49. if (req.session.user_id) {
  50. let templateVars = { user:
  51. { userName: req.session.username,
  52. loggedIn: req.session.logged_in }
  53. };
  54. res.render("new_map", templateVars);
  55. } else {
  56. res.redirect("/");
  57. }
  58. });
  59.  
  60. app.get("/register", (req, res) => {
  61. let templateVars = { user:
  62. { userName: req.session.username,
  63. loggedIn: req.session.logged_in }
  64. };
  65. res.render("register", templateVars);
  66. });
  67.  
  68. app.post("/register", (req, res) => {
  69. let salt = bcrypt.genSaltSync(10);
  70. let username = req.body.username;
  71. let password = bcrypt.hashSync(req.body.password, salt);
  72.  
  73. knex('users')
  74. .insert({
  75. username: username,
  76. password: password
  77. })
  78. .returning('id')
  79. .then((id) => {
  80. req.session.user_id = id;
  81. req.session.username = username;
  82. req.session.logged_in = true;
  83. res.redirect("/new");
  84. })
  85. .catch((error) => {
  86. res.redirect("/register")
  87. })
  88. });
  89.  
  90. app.get('/login', (req, res) => {
  91. let templateVars = { user:
  92. { userName: req.session.username,
  93. loggedIn: req.session.logged_in }
  94. };
  95. res.render('login', templateVars);
  96. })
  97.  
  98. app.post('/login', (req, res) => {
  99. let username = req.body.username;
  100. let password = req.body.userpassword;
  101.  
  102. knex('users')
  103. .where({ username: username })
  104. .then((data) => {
  105. console.log(data[0]);
  106. if (data.length <= 0) {
  107. res.redirect("/register");
  108. return;
  109. } else {
  110. if (bcrypt.compareSync(password, data[0].password)) {
  111. let salt = bcrypt.genSaltSync(10);
  112. req.session.user_id = data[0].id;
  113. req.session.username = data[0].username;
  114. req.session.logged_in = true;
  115. console.log('successful login ' + req.body);
  116. res.redirect("/")
  117. } else {
  118. res.redirect('login');
  119. }
  120. }
  121. });
  122. });
  123.  
  124. app.post('/logout', (req, res) => {
  125. req.session = null;
  126. res.redirect('/login');
  127. })
  128.  
  129. app.get('/users/id', (req, res) => {
  130. let templateVars =
  131. { user:
  132. { userName: req.session.username,
  133. loggedIn: req.session.logged_in }
  134. }
  135. res.render('profile', templateVars);
  136. })
  137.  
  138. app.get('/maps/id', (req, res) => {
  139. res.render('display_map');
  140. })
  141.  
  142. app.post('/maps', (req, res) => {
  143. let mapName = req.body.name;
  144. let user = req.session.user_id;
  145.  
  146. knex('maps')
  147. .insert({ mapname: mapName, created_by: user })
  148. .returning('id')
  149. .then((id) => {
  150. res.json({
  151. id: id[0]
  152. })
  153. })
  154. })
  155.  
  156. app.get('/maps/:id', (req, res) => {
  157. let map = req.params.id;
  158. knex('maps')
  159. .where({ id: map })
  160. .then((rows) => {
  161. let map = rows[0];
  162. console.log(rows, map);
  163. knex('markers')
  164. .where({ map_id: map.id })
  165. .then((markers) => {
  166. let templateVars =
  167. { user:
  168. { userName: req.session.username,
  169. loggedIn: req.session.logged_in },
  170.  
  171. map: {
  172. name: map.mapname,
  173. id: map.id,
  174. createdBy: map.created_by,
  175. markers: markers
  176. }
  177. }
  178. res.render('display_map', templateVars);
  179. })
  180. })
  181. })
  182.  
  183. app.post('/markers', (req, res) => {
  184. console.log(req.body);
  185. let map = req.body.mapId;
  186. let lat = req.body.markerLat;
  187. let long = req.body.markerLng;
  188.  
  189. knex('markers')
  190. .insert({ map_id: map, latitude: lat, longitude: long })
  191. .then((marker) => {
  192. console.log(marker)
  193. res.sendStatus(200)
  194. })
  195. })
  196.  
  197. app.post('/favorites', (req, res) => {
  198. knex('favorites')
  199. .insert( { map_id: req.body.mapId, user_id: req.session.user_id })
  200. .then((favorite) => {
  201. res.sendStatus(200);
  202. })
  203. })
  204.  
  205.  
  206. app.get('/users/:id', (req, res) => {
  207. let user = req.params.id;
  208. knex('users')
  209. .where({ id: user })
  210. .then((row) => {
  211. let info = {
  212. name: '',
  213. maps: [],
  214. favorites: []
  215. };
  216. info.name = row[0].username;
  217. knex('favorites')
  218. .where({ user_id: user })
  219. .join('maps', 'favorites.map_id', '=', 'maps.id')
  220. .then((row) => {
  221. row.forEach((fav) => {
  222. info.favorites.push([fav.map_id, fav.mapname])
  223. })
  224. knex('maps')
  225. .where({ created_by: user })
  226. .then((row) => {
  227. row.forEach((map) => {
  228. info.maps.push([map.id, map.mapname])
  229. })
  230. let templateVars = {
  231. data: {
  232. profile: info.name,
  233. profileMaps: info.maps,
  234. profileFavorites: info.favorites
  235. },
  236. user: {
  237. userName: req.session.username,
  238. loggedIn: req.session.logged_in
  239. }
  240. }
  241. res.render('profile', templateVars);
  242. })
  243. })
  244. })
  245. })
  246.  
  247. /* Start */
  248. app.listen(PORT, () => {
  249. console.log(` => * Maps server listening on port ${PORT} *`);
  250. });
Add Comment
Please, Sign In to add comment