Guest User

Untitled

a guest
Jan 22nd, 2019
153
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.81 KB | None | 0 0
  1. let express = require('express');
  2. let mongo = require('mongodb');
  3. let app = express();
  4. const session = require('express-session');
  5. const mongoStore = require('connect-mongo')(session);
  6. app.use(express.static('client'));
  7. const path = require('path');
  8. let passport = require('passport')
  9. , LocalStrategy = require('passport-local').Strategy;
  10. app.use(passport.initialize());
  11. app.use(passport.session());
  12. let flash=require("connect-flash");
  13. app.use(flash());
  14. let multer = require('multer');
  15. let upload = multer({
  16. storage: multer.diskStorage({
  17. destination: 'client/uploads/',
  18. filename: (req, file, callback) => {
  19. callback(null, `${Date.now()}_${file.originalname}`);
  20. }
  21. })
  22. });
  23. let mongoClient;
  24. let sales;
  25. let sess;
  26. let accounts;
  27. var bodyParser = require('body-parser');
  28. app.use(bodyParser.urlencoded({ extended: true })); // support encoded bodies
  29. app.use(bodyParser.json());
  30.  
  31. const nodemailer = require('nodemailer');
  32.  
  33.  
  34.  
  35. let transporter = nodemailer.createTransport({
  36. service: 'gmail',
  37. auth: {
  38. user: '',
  39. pass: ''
  40. },
  41. tls: {
  42. rejectUnauthorized: false
  43. }
  44. });
  45.  
  46.  
  47. mongo.MongoClient.connect(process.env.MONGODB_URI, function (err, client) {
  48.  
  49. mongoClient = client;
  50.  
  51. app.listen(process.env.PORT || 8000);
  52.  
  53. sales = mongoClient.db(process.env.DB_NAME || 'AuctionTime').collection('sales');
  54. accounts = mongoClient.db(process.env.DB_NAME || 'AuctionTime').collection('accounts');
  55.  
  56. app.use(session(
  57. {
  58. secret: process.env.SESSION_SECRET || "Shh, its a secret!",
  59. store: new mongoStore({ db: mongoClient , url:process.env.MONGODB_URI })
  60. }
  61. ));
  62.  
  63. });
  64.  
  65. //check if user logged in
  66. app.get('/xxx', (request, response) => {
  67.  
  68. if (request.session.passport) {
  69.  
  70. getUserById(`${request.session.passport.user}`, function (result) {
  71.  
  72. response.json(result.username);
  73.  
  74. });
  75.  
  76. } else {
  77. response.send("no");
  78. }
  79.  
  80. });
  81.  
  82. let curdate = new Date().getTime();
  83.  
  84. setInterval(function () {
  85.  
  86. sales.find({ time: { $lte: curdate }, published: "open" }).toArray((err, results) => {
  87.  
  88. let maxbid = 0;
  89. let user_name;
  90. let product_name;
  91.  
  92. if (results) {
  93.  
  94. Loop(results);
  95. }
  96.  
  97. });
  98.  
  99. }, 3000);
  100.  
  101.  
  102. function Loop(results) {
  103.  
  104.  
  105. for (let i = 0; i < results.length; i++) {
  106.  
  107. product_name = results[i].product_name;
  108.  
  109. if (results[i].bids != null) {
  110.  
  111. for (let bid of results[i].bids) {
  112.  
  113. maxbid = bid.bid;
  114. user_name = bid.user;
  115.  
  116.  
  117. if (maxbid < bid.bid) {
  118.  
  119. maxbid = bid.bid;
  120. user_name = bid.user;
  121.  
  122. }
  123.  
  124.  
  125. }
  126.  
  127. sendMail("bidder",user_name, product_name ,"");
  128. sendMail("publisher",results[i].publisher, product_name , user_name);
  129.  
  130. }
  131.  
  132.  
  133.  
  134.  
  135. sales.updateOne({ _id: mongo.ObjectID(results[i]._id), published: "open" }, { $set: { published: "closed" } });
  136.  
  137. }
  138. }
  139.  
  140. function sendMail(to,user_name, product_name , winner) {
  141.  
  142. accounts.findOne({ username: user_name }, (err, result) => {
  143.  
  144. if (result) {
  145.  
  146. if(to == "publisher") {
  147.  
  148. var mailOptions = {
  149. to: result.email,
  150. subject: 'המכירה שלך נסגרה ! מישהו זכה במוצר שלך .',
  151. text: `היי,המכירה של המוצר שלך : ${product_name} נסגרה , ו- ${winner} זכה במוצר שלך !`
  152. };
  153.  
  154. } else {
  155.  
  156. var mailOptions = {
  157. to: result.email,
  158. subject: 'מזל טוב , המוצר שלך ! AuctionTime',
  159. text: `היי , זוהי הודעה אוטומטית מהאפליקציה AuctionTime , כדי להודיע לך שזכית במוצר: ${product_name}`
  160. };
  161.  
  162. }
  163.  
  164.  
  165. transporter.sendMail(mailOptions, function (error, info) {
  166. if (error) {
  167. console.log(error);
  168. } else {
  169. console.log('Email sent: ' + info.response);
  170. }
  171. });
  172.  
  173. }
  174.  
  175. });
  176.  
  177.  
  178. }
  179.  
  180.  
  181. function getByID(id, callback) {
  182.  
  183. sales.find({ _id: mongo.ObjectID(id) }, function (err, result) {
  184. result.toArray(function (err, result) {
  185.  
  186. callback(result[0]);
  187.  
  188. });
  189.  
  190. });
  191.  
  192. }
  193.  
  194. function getUserById(id, callback) {
  195.  
  196. accounts.find({ _id: mongo.ObjectID(id) }, function (err, result) {
  197. result.toArray(function (err, result) {
  198.  
  199. callback(result[0]);
  200.  
  201. });
  202.  
  203. });
  204.  
  205.  
  206. }
  207.  
  208.  
  209.  
  210. function getSales(callback) {
  211.  
  212. sales.find({}).toArray(function (err, result) {
  213.  
  214. callback(result);
  215. });
  216.  
  217. }
  218.  
  219.  
  220. app.get('/sales', (request, response) => {
  221.  
  222. getSales(function (result) {
  223. response.send(JSON.stringify(result));
  224.  
  225. });
  226.  
  227. });
  228.  
  229. app.get(`/sales/:id`, (request, response) => {
  230.  
  231. getByID(`${request.params.id}`, function (result) {
  232. response.send(JSON.stringify(result));
  233. });
  234.  
  235.  
  236. });
  237.  
  238.  
  239.  
  240. passport.use(new LocalStrategy(
  241. function (username, password, done) {
  242. accounts.findOne({ username: username }, function (err, user) {
  243. if (err) { return done(err); }
  244. if (!user) {
  245. return done(null, false, {message:'Incorrect username.' });
  246. } if (user && user.password != password) {
  247. return done(null, false, {message:'Incorrect password.' });
  248. }
  249. return done(null, user);
  250. });
  251. }
  252. ));
  253.  
  254. passport.serializeUser(function (user, done) {
  255. done(null, user._id);
  256. });
  257.  
  258. passport.deserializeUser(function (id, done) {
  259. accounts.findById(id, function (err, user) {
  260. done(err, user);
  261. });
  262. });
  263.  
  264.  
  265. app.post('/dologin',
  266. passport.authenticate('local', {
  267. successRedirect: '/#sales',
  268. failureRedirect: 'login.html',
  269. failureFlash: true
  270. })
  271. );
  272.  
  273. app.use('/postSales/:saleid/bids', function (req, res, next) {
  274.  
  275. if (!req.session.passport) {
  276.  
  277. res.send("<div class='alert warning'><strong>בעיה!</strong> אתה צריך להיות מחובר כדי לפרסם <a href='login.html'>התחבר</a></div>");
  278. } else {
  279. next();
  280. }
  281. });
  282.  
  283.  
  284.  
  285. app.post('/postSales/:saleid/bids', (request, response) => {
  286.  
  287. let time = new Date();
  288. let day = time.getDate();
  289. let year = time.getFullYear();
  290. let month = time.getMonth() + 1;
  291.  
  292. time = `${day}/${month}/${year}`;
  293.  
  294. getUserById(`${request.session.passport.user}`, function (result) {
  295.  
  296. //sales.find({_id:mongo.ObjectID(request.params.id)} , )
  297.  
  298. sales.updateOne({ _id: mongo.ObjectID(request.params.saleid) }, { $push: { bids: { user: result.username, bid: request.body.bid, time: time } } }, (err, result) => {
  299.  
  300. if (err) {
  301.  
  302. console.log(err);
  303.  
  304. } else {
  305. response.end('<div class="alert success">הוספת הצעת מחיר בהצלחה !</div>');
  306. }
  307. });
  308.  
  309. });
  310. });
  311.  
  312.  
  313. app.get('/logout', function(req, res){
  314. req.session.destroy(function (err) {
  315. res.redirect('/');
  316. });
  317. });
  318.  
  319. app.use('/postSales/newsale', function (req, res, next) {
  320.  
  321. if (!req.session.passport) {
  322.  
  323. res.send("<div class='alert warning'><strong>בעיה!</strong> אתה צריך להיות מחובר כדי לפרסם <a href='login.html'>התחבר</a></div>");
  324. } else {
  325. next();
  326. }
  327. });
  328.  
  329. let filenames = [];
  330.  
  331. app.post('/postSales/newsale' ,upload.array('picture' , 12) ,(request, response, next) => {
  332.  
  333.  
  334.  
  335. for(let i = 0; i < request.files.length; i++ ){
  336.  
  337. filenames.push(`uploads/${request.files[i].filename}`);
  338. }
  339.  
  340. getUserById(`${request.session.passport.user}`, function (result) {
  341.  
  342. sales.insertOne({ start_price: request.body.start_price,publisher:result.username ,discription:request.body.dis ,picture_links:filenames , product_name: request.body.product_name, time: request.body.timestamp, published: "open" }, (err, result) => {
  343.  
  344. if (err) {
  345. console.log(err);
  346. } else {
  347.  
  348. response.end("<div class='alert success'>הוספת את המוצר בהצלחה !</div>");
  349. }
  350. });
  351.  
  352. });
  353.  
  354.  
  355.  
  356.  
  357. });
  358.  
  359.  
  360. app.post('/sales/register', (request, response) => {
  361.  
  362. accounts.findOne({ username: request.body.username }, (err, result) => {
  363.  
  364. if (err) {
  365.  
  366. console.log(err);
  367.  
  368. } if (result) {
  369.  
  370. response.end("<div class='alert warning'>שם המשתמש קיים במערכת</div>");
  371.  
  372. } else {
  373.  
  374. accounts.insertOne(request.body, (err, result) => {
  375.  
  376. if (err) {
  377.  
  378. console.log(err);
  379.  
  380. } else {
  381.  
  382. response.send("<div class='alert success'>נירשמת בהצלחה</div>");
  383. }
  384.  
  385. });
  386.  
  387. }
  388.  
  389. });
  390.  
  391. });
Add Comment
Please, Sign In to add comment