Guest User

Untitled

a guest
Jan 22nd, 2019
140
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. from: 'youremail@gmail.com',
  150. to: result.email,
  151. subject: 'המכירה שלך נסגרה ! מישהו זכה במוצר שלך .',
  152. text: `היי,המכירה של המוצר שלך : ${product_name} נסגרה , ו- ${winner} זכה במוצר שלך !`
  153. };
  154.  
  155. } else {
  156.  
  157. var mailOptions = {
  158. from: 'youremail@gmail.com',
  159. to: result.email,
  160. subject: 'מזל טוב , המוצר שלך ! AuctionTime',
  161. text: `היי , זוהי הודעה אוטומטית מהאפליקציה AuctionTime , כדי להודיע לך שזכית במוצר: ${product_name}`
  162. };
  163.  
  164. }
  165.  
  166.  
  167. transporter.sendMail(mailOptions, function (error, info) {
  168. if (error) {
  169. console.log(error);
  170. } else {
  171. console.log('Email sent: ' + info.response);
  172. }
  173. });
  174.  
  175. }
  176.  
  177. });
  178.  
  179.  
  180. }
  181.  
  182.  
  183. function getByID(id, callback) {
  184.  
  185. sales.find({ _id: mongo.ObjectID(id) }, function (err, result) {
  186. result.toArray(function (err, result) {
  187.  
  188. callback(result[0]);
  189.  
  190. });
  191.  
  192. });
  193.  
  194. }
  195.  
  196. function getUserById(id, callback) {
  197.  
  198. accounts.find({ _id: mongo.ObjectID(id) }, function (err, result) {
  199. result.toArray(function (err, result) {
  200.  
  201. callback(result[0]);
  202.  
  203. });
  204.  
  205. });
  206.  
  207.  
  208. }
  209.  
  210.  
  211.  
  212. function getSales(callback) {
  213.  
  214. sales.find({}).toArray(function (err, result) {
  215.  
  216. callback(result);
  217. });
  218.  
  219. }
  220.  
  221.  
  222. app.get('/sales', (request, response) => {
  223.  
  224. getSales(function (result) {
  225. response.send(JSON.stringify(result));
  226.  
  227. });
  228.  
  229. });
  230.  
  231. app.get(`/sales/:id`, (request, response) => {
  232.  
  233. getByID(`${request.params.id}`, function (result) {
  234. response.send(JSON.stringify(result));
  235. });
  236.  
  237.  
  238. });
  239.  
  240.  
  241.  
  242. passport.use(new LocalStrategy(
  243. function (username, password, done) {
  244. accounts.findOne({ username: username }, function (err, user) {
  245. if (err) { return done(err); }
  246. if (!user) {
  247. return done(null, false, {message:'Incorrect username.' });
  248. } if (user && user.password != password) {
  249. return done(null, false, {message:'Incorrect password.' });
  250. }
  251. return done(null, user);
  252. });
  253. }
  254. ));
  255.  
  256. passport.serializeUser(function (user, done) {
  257. done(null, user._id);
  258. });
  259.  
  260. passport.deserializeUser(function (id, done) {
  261. accounts.findById(id, function (err, user) {
  262. done(err, user);
  263. });
  264. });
  265.  
  266.  
  267. app.post('/dologin',
  268. passport.authenticate('local', {
  269. successRedirect: '/#sales',
  270. failureRedirect: 'login.html',
  271. failureFlash: true
  272. })
  273. );
  274.  
  275. app.use('/postSales/:saleid/bids', function (req, res, next) {
  276.  
  277. if (!req.session.passport) {
  278.  
  279. res.send("<div class='alert warning'><strong>בעיה!</strong> אתה צריך להיות מחובר כדי לפרסם <a href='login.html'>התחבר</a></div>");
  280. } else {
  281. next();
  282. }
  283. });
  284.  
  285.  
  286.  
  287. app.post('/postSales/:saleid/bids', (request, response) => {
  288.  
  289. let time = new Date();
  290. let day = time.getDate();
  291. let year = time.getFullYear();
  292. let month = time.getMonth() + 1;
  293.  
  294. time = `${day}/${month}/${year}`;
  295.  
  296. getUserById(`${request.session.passport.user}`, function (result) {
  297.  
  298. //sales.find({_id:mongo.ObjectID(request.params.id)} , )
  299.  
  300. sales.updateOne({ _id: mongo.ObjectID(request.params.saleid) }, { $push: { bids: { user: result.username, bid: request.body.bid, time: time } } }, (err, result) => {
  301.  
  302. if (err) {
  303.  
  304. console.log(err);
  305.  
  306. } else {
  307. response.end('<div class="alert success">הוספת הצעת מחיר בהצלחה !</div>');
  308. }
  309. });
  310.  
  311. });
  312. });
  313.  
  314.  
  315. app.get('/logout', function(req, res){
  316. req.session.destroy(function (err) {
  317. res.redirect('/');
  318. });
  319. });
  320.  
  321. app.use('/postSales/newsale', function (req, res, next) {
  322.  
  323. if (!req.session.passport) {
  324.  
  325. res.send("<div class='alert warning'><strong>בעיה!</strong> אתה צריך להיות מחובר כדי לפרסם <a href='login.html'>התחבר</a></div>");
  326. } else {
  327. next();
  328. }
  329. });
  330.  
  331. let filenames = [];
  332.  
  333. app.post('/postSales/newsale' ,upload.array('picture' , 12) ,(request, response, next) => {
  334.  
  335.  
  336.  
  337. for(let i = 0; i < request.files.length; i++ ){
  338.  
  339. filenames.push(`uploads/${request.files[i].filename}`);
  340. }
  341.  
  342. getUserById(`${request.session.passport.user}`, function (result) {
  343.  
  344. 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) => {
  345.  
  346. if (err) {
  347. console.log(err);
  348. } else {
  349.  
  350. response.end("<div class='alert success'>הוספת את המוצר בהצלחה !</div>");
  351. }
  352. });
  353.  
  354. });
  355.  
  356.  
  357.  
  358.  
  359. });
  360.  
  361.  
  362. app.post('/sales/register', (request, response) => {
  363.  
  364. accounts.findOne({ username: request.body.username }, (err, result) => {
  365.  
  366. if (err) {
  367.  
  368. console.log(err);
  369.  
  370. } if (result) {
  371.  
  372. response.end("<div class='alert warning'>שם המשתמש קיים במערכת</div>");
  373.  
  374. } else {
  375.  
  376. accounts.insertOne(request.body, (err, result) => {
  377.  
  378. if (err) {
  379.  
  380. console.log(err);
  381.  
  382. } else {
  383.  
  384. response.send("<div class='alert success'>נירשמת בהצלחה</div>");
  385. }
  386.  
  387. });
  388.  
  389. }
  390.  
  391. });
  392.  
  393. });
Add Comment
Please, Sign In to add comment