Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- let express = require('express');
- let mongo = require('mongodb');
- let app = express();
- const session = require('express-session');
- const mongoStore = require('connect-mongo')(session);
- app.use(express.static('client'));
- const path = require('path');
- let passport = require('passport')
- , LocalStrategy = require('passport-local').Strategy;
- app.use(passport.initialize());
- app.use(passport.session());
- let flash=require("connect-flash");
- app.use(flash());
- let multer = require('multer');
- let upload = multer({
- storage: multer.diskStorage({
- destination: 'client/uploads/',
- filename: (req, file, callback) => {
- callback(null, `${Date.now()}_${file.originalname}`);
- }
- })
- });
- let mongoClient;
- let sales;
- let sess;
- let accounts;
- var bodyParser = require('body-parser');
- app.use(bodyParser.urlencoded({ extended: true })); // support encoded bodies
- app.use(bodyParser.json());
- const nodemailer = require('nodemailer');
- let transporter = nodemailer.createTransport({
- service: 'gmail',
- auth: {
- user: '',
- pass: ''
- },
- tls: {
- rejectUnauthorized: false
- }
- });
- mongo.MongoClient.connect(process.env.MONGODB_URI, function (err, client) {
- mongoClient = client;
- app.listen(process.env.PORT || 8000);
- sales = mongoClient.db(process.env.DB_NAME || 'AuctionTime').collection('sales');
- accounts = mongoClient.db(process.env.DB_NAME || 'AuctionTime').collection('accounts');
- app.use(session(
- {
- secret: process.env.SESSION_SECRET || "Shh, its a secret!",
- store: new mongoStore({ db: mongoClient , url:process.env.MONGODB_URI })
- }
- ));
- });
- //check if user logged in
- app.get('/xxx', (request, response) => {
- if (request.session.passport) {
- getUserById(`${request.session.passport.user}`, function (result) {
- response.json(result.username);
- });
- } else {
- response.send("no");
- }
- });
- let curdate = new Date().getTime();
- setInterval(function () {
- sales.find({ time: { $lte: curdate }, published: "open" }).toArray((err, results) => {
- let maxbid = 0;
- let user_name;
- let product_name;
- if (results) {
- Loop(results);
- }
- });
- }, 3000);
- function Loop(results) {
- for (let i = 0; i < results.length; i++) {
- product_name = results[i].product_name;
- if (results[i].bids != null) {
- for (let bid of results[i].bids) {
- maxbid = bid.bid;
- user_name = bid.user;
- if (maxbid < bid.bid) {
- maxbid = bid.bid;
- user_name = bid.user;
- }
- }
- sendMail("bidder",user_name, product_name ,"");
- sendMail("publisher",results[i].publisher, product_name , user_name);
- }
- sales.updateOne({ _id: mongo.ObjectID(results[i]._id), published: "open" }, { $set: { published: "closed" } });
- }
- }
- function sendMail(to,user_name, product_name , winner) {
- accounts.findOne({ username: user_name }, (err, result) => {
- if (result) {
- if(to == "publisher") {
- var mailOptions = {
- from: 'youremail@gmail.com',
- to: result.email,
- subject: 'המכירה שלך נסגרה ! מישהו זכה במוצר שלך .',
- text: `היי,המכירה של המוצר שלך : ${product_name} נסגרה , ו- ${winner} זכה במוצר שלך !`
- };
- } else {
- var mailOptions = {
- from: 'youremail@gmail.com',
- to: result.email,
- subject: 'מזל טוב , המוצר שלך ! AuctionTime',
- text: `היי , זוהי הודעה אוטומטית מהאפליקציה AuctionTime , כדי להודיע לך שזכית במוצר: ${product_name}`
- };
- }
- transporter.sendMail(mailOptions, function (error, info) {
- if (error) {
- console.log(error);
- } else {
- console.log('Email sent: ' + info.response);
- }
- });
- }
- });
- }
- function getByID(id, callback) {
- sales.find({ _id: mongo.ObjectID(id) }, function (err, result) {
- result.toArray(function (err, result) {
- callback(result[0]);
- });
- });
- }
- function getUserById(id, callback) {
- accounts.find({ _id: mongo.ObjectID(id) }, function (err, result) {
- result.toArray(function (err, result) {
- callback(result[0]);
- });
- });
- }
- function getSales(callback) {
- sales.find({}).toArray(function (err, result) {
- callback(result);
- });
- }
- app.get('/sales', (request, response) => {
- getSales(function (result) {
- response.send(JSON.stringify(result));
- });
- });
- app.get(`/sales/:id`, (request, response) => {
- getByID(`${request.params.id}`, function (result) {
- response.send(JSON.stringify(result));
- });
- });
- passport.use(new LocalStrategy(
- function (username, password, done) {
- accounts.findOne({ username: username }, function (err, user) {
- if (err) { return done(err); }
- if (!user) {
- return done(null, false, {message:'Incorrect username.' });
- } if (user && user.password != password) {
- return done(null, false, {message:'Incorrect password.' });
- }
- return done(null, user);
- });
- }
- ));
- passport.serializeUser(function (user, done) {
- done(null, user._id);
- });
- passport.deserializeUser(function (id, done) {
- accounts.findById(id, function (err, user) {
- done(err, user);
- });
- });
- app.post('/dologin',
- passport.authenticate('local', {
- successRedirect: '/#sales',
- failureRedirect: 'login.html',
- failureFlash: true
- })
- );
- app.use('/postSales/:saleid/bids', function (req, res, next) {
- if (!req.session.passport) {
- res.send("<div class='alert warning'><strong>בעיה!</strong> אתה צריך להיות מחובר כדי לפרסם <a href='login.html'>התחבר</a></div>");
- } else {
- next();
- }
- });
- app.post('/postSales/:saleid/bids', (request, response) => {
- let time = new Date();
- let day = time.getDate();
- let year = time.getFullYear();
- let month = time.getMonth() + 1;
- time = `${day}/${month}/${year}`;
- getUserById(`${request.session.passport.user}`, function (result) {
- //sales.find({_id:mongo.ObjectID(request.params.id)} , )
- sales.updateOne({ _id: mongo.ObjectID(request.params.saleid) }, { $push: { bids: { user: result.username, bid: request.body.bid, time: time } } }, (err, result) => {
- if (err) {
- console.log(err);
- } else {
- response.end('<div class="alert success">הוספת הצעת מחיר בהצלחה !</div>');
- }
- });
- });
- });
- app.get('/logout', function(req, res){
- req.session.destroy(function (err) {
- res.redirect('/');
- });
- });
- app.use('/postSales/newsale', function (req, res, next) {
- if (!req.session.passport) {
- res.send("<div class='alert warning'><strong>בעיה!</strong> אתה צריך להיות מחובר כדי לפרסם <a href='login.html'>התחבר</a></div>");
- } else {
- next();
- }
- });
- let filenames = [];
- app.post('/postSales/newsale' ,upload.array('picture' , 12) ,(request, response, next) => {
- for(let i = 0; i < request.files.length; i++ ){
- filenames.push(`uploads/${request.files[i].filename}`);
- }
- getUserById(`${request.session.passport.user}`, function (result) {
- 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) => {
- if (err) {
- console.log(err);
- } else {
- response.end("<div class='alert success'>הוספת את המוצר בהצלחה !</div>");
- }
- });
- });
- });
- app.post('/sales/register', (request, response) => {
- accounts.findOne({ username: request.body.username }, (err, result) => {
- if (err) {
- console.log(err);
- } if (result) {
- response.end("<div class='alert warning'>שם המשתמש קיים במערכת</div>");
- } else {
- accounts.insertOne(request.body, (err, result) => {
- if (err) {
- console.log(err);
- } else {
- response.send("<div class='alert success'>נירשמת בהצלחה</div>");
- }
- });
- }
- });
- });
Add Comment
Please, Sign In to add comment