· 7 years ago · Feb 18, 2019, 02:08 PM
1var express = require('express'),
2 bodyParser = require('body-parser'),
3 pg = require('pg'),
4 passport = require('passport'),
5 request = require('request'),
6 bcrypt = require('bcrypt-nodejs'),
7 path = require('path'),
8 pug = require('pug'),
9 http = require('http'),
10 flash = require('connect-flash'),
11 uuid = require('uuid/v4'),
12 expressSession = require('express-session');
13require('dotenv').config();
14var conString = "postgres://postgres:Password@123@localhost:5432/postgres";
15const LocalStrategy = require('passport-local').Strategy
16const API_KEY = '';
17var currentAccountsData = [];
18
19// Connecting to the Database client and defined an end method
20var client = new pg.Client(conString);
21client.connect()
22 .then(()=>{console.log('Connected to the Database')})
23 .catch(e=>{console.log(err)});
24
25// function(err, res){
26// if(err){ console.log(err)}
27// if(res){ console.log("Connected to the Database")}
28// });
29//client.on('drain', client.end.bind(client));
30
31// The application takes
32var app = express(); var router = express.Router();
33// app.use(require('cookie-parser'))
34app.use(expressSession({resave: false, saveUninitialized: true, secret: 'mySecretKey'}));
35app.use(passport.initialize());
36app.use(passport.session());
37app.use(bodyParser.urlencoded({extended: true}));
38app.use(bodyParser.json());
39app.set('views',__dirname+'/views');
40app.set('view engine', 'pug');
41app.set('view options', {layout:false})
42
43// Check with the DB whether the table exists, create if any descrepancy
44// const query = client.query("CREATE TABLE IF NOT EXISTS dummy(id PRIMARY KEY SERIAL, name VARCHAR(20), author VARCHAR(20))");
45// query.on('end', ()=>{ client.end(); });
46app.use(flash());
47app.use('/',router);
48
49router.route('/create')
50 .get((req,res)=>{
51 // res.status(200).send("Some UI");
52 res.json()
53 //res.render('join', {title: "Join", userData: req.user, messages: {danger: req.flash('danger'), warning: req.flash('warning'), success: req.flash('success')}});
54 })
55 .post((req,res)=>{
56 //req.body.password = bcrypt.hashSync("hello",5);
57 bcrypt.hash(req.body.password, null, null, function(err, hash) {
58 console.log(hash);
59 req.body.password = hash;
60 });
61 //console.log(typeof(req.body.password))
62 console.log("Hash is " + req.body.password);
63 client.query('SELECT ID FROM USERS WHERE USERNAME = $1',[req.body.username],(err,result)=>{
64 if(err){console.log(err+'q');res.status(404).send(err)}
65 else if(result.rows[0]){
66 //req.flash('warning', "This user is already registered. <a href='/login'>Log in!</a>");
67 console.log("User already exists")
68 //res.redirect('/create');
69 res.status(200).send("User already exists")
70 }
71 else{
72 client.query('INSERT INTO USERS(USERNAME, PASSWORD) VALUES($1,$2)',
73 [req.body.username,req.body.password],
74 (err,result)=>{if(err){console.log(err+'w'); res.status(500).send(err)}});
75 res.status(200).send("Account created");
76 }
77 })
78 });
79router.route('/login')
80 .get((req,res)=>{
81 if(req.isAuthenticated()){
82 res.render('/account')
83 console.log('Logged in')
84 }
85 else{
86 //res.status(200).send('some UI');
87 res.render('/login');
88 console.log(req.isAuthenticated());
89 }
90 })
91 .post(passport.authenticate('local',{
92 successRedirect: '/account',
93 failureRedirect : '/login'
94 }),(req,res)=>{
95 if(req.body.remember){
96 req.session.cookie.maxAge= 20*60*1000;
97 }
98 else{
99 req.session.cookie.expires=false;
100 }
101 })
102router.route('/account')
103 .get((req,res)=>{
104 if(req.isAuthenticated()){
105 client.query('SELECT * FROM TRANSACTIONS', (err, result)=>{
106 if(err){
107 console.log(err);
108 res.status(500).send(err);
109 }
110 else{
111 console.log(result.rows.length);
112 res.json(result.rows);
113 }
114 });
115 }
116 else res.render('login');
117 })
118 .post((req,res)=>{
119 client.query('INSERT INTO TRANSACTIONS(UID,USERNAME,HRS,WAGEPAID) VALUES($1,$2,$3,$4)',[req.body.uid,req.body.username,req.body.hrs,req.body.wagepaid],(err,result)=>{
120 if(err){
121 console.log(err+'Rr');
122 res.status(500).send(err);
123 }
124 else{
125 res.send(result.rows[0]);
126 }
127 })
128 //console.log(req.body.author)
129 })
130 .delete((req,res)=>{
131 client.query('DELETE FROM TRANSACTIONS WHERE UID = $1',[req.body.id],(err,result)=>{
132 if(err){
133 console.log(err+'RT');
134 res.status(500).send(err);
135 }
136 else{
137 res.send(result.rows[0]);
138 }
139 })
140 })
141 .patch((req,res)=>{
142 if(req.body.name){client.query('UPDATE TRANSACTIONS SET USERNANE = $1 WHERE UID = $2',[req.body.username,req.body.uid],(err,result)=>{if(err){console.log(err);res.status(500).send(err);}});}
143 if(req.body.author){client.query('UPDATE TRANSACTIONS SET HRS = $1 WHERE UID = $2',[req.body.hrs,req.body.uid],(err,result)=>{if(err){console.log(err);res.status(500).send(err);}});}
144 if(req.body.read){client.query('UPDATE TRANSACTIONS SET WAGEPAID = $1 WHERE UID = $2',[req.body.wagepaid,req.body.uid],(err,result)=>{if(err){console.log(err);res.status(500).send(err);}});}
145 client.query('SELECT UID,USERNAME,HRS,WAGEPAID FROM TRANSACTIONS WHERE UID = $1',[req.body.uid],(err,result)=>{
146 if(err){
147 console.log(err);
148 res.status(500).send(err);
149 }
150 else if(result.rows.length >0) res.json(result.rows[0]);
151 else res.json({ Response: 'Cannot find a book with given ID'})
152 })
153 });
154
155router.route('/account/:uid')
156 .get((req,res)=>{
157 if(req.isAuthenticated()){
158 client.query('SELECT UID,USERNAME,HRS,WAGEPAID FROM TRANSACTIONS WHERE UID = $1',[req.params.uid],(err,result)=>{
159 if(err){
160 console.log(err);
161 res.status(500).send(err);
162 }
163 else if(result.rows.length >0) res.json(result.rows[0]);
164 else res.json({ Response: 'Cannot find a book with given ID'})
165 })
166 }
167 else{
168 res.render('login')
169 }
170 })
171 .put((req,res)=>{
172 client.query('UPDATE TRANSACTIONS SET USERNAME = $1 WHERE ID = $2',[req.body.username,req.body.uid],(err,result)=>{if(err){console.log(err);res.status(500).send(err);}});
173 client.query('UPDATE TRANSACTIONS SET HRS = $1 WHERE ID = $2',[req.body.hrs,req.body.uid],(err,result)=>{if(err){console.log(err);res.status(500).send(err);}});
174 client.query('UPDATE TRANSACTIONS SET WAGEPAID = $1 WHERE ID = $2',[req.body.wagepaid,req.body.uid],(err,result)=>{if(err){console.log(err);res.status(500).send(err);}});
175 client.query('SELECT UID,USERNAME,HRS,WAGEPAID FROM TRANSACTIONS WHERE ID = $1',[req.params.id],(err,result)=>{
176 if(err){
177 console.log(err);
178 res.status(500).send(err);
179 }
180 else if(result.rows.length >0) res.json(result.rows[0]);
181 else res.json({ Response: 'Cannot find a book with given ID'})
182 })
183 });
184
185
186app.get('/logout',(req,res)=>{
187 console.log(req.isAuthenticated());
188 req.logout();
189 console.log(req.isAuthenticated());
190 res.redirect('/login')
191})
192app.get('/', (req,res)=>{
193 res.render('index',{title: "Home", userData: req.user, messages: {danger: req.flash('danger'), warning: req.flash('warning'), success: req.flash('success')}});
194 console.log(req.user);
195 //res.send('This is your notes. You can start writing into it or explore more options')
196});
197
198passport.use('local',new LocalStrategy({passReqToCallback: true}, (req,username,password,done)=>{
199 loginAttempt();
200 async function loginAttempt(){
201 client.query('SELECT * FROM USERS WHERE USERNAME = $1',[username],(err,result)=>{
202 if(err){
203 console.log(err+'ee');
204 return done(err);
205 }
206 if(result.rows[0] == null){
207 //res.send("No user exists");
208 console.log("nut Logged inn")
209 return done(null, false)
210
211 }
212 else{
213 if(bcrypt.compareSync(password,result.rows[0].password)){
214 //res.status(500).send("Welcome "+result.rows[0].username);
215 console.log("Logged in")
216 return done(null,[{user: result.rows[0].username}]);
217 }
218 else return done(null);//res.send("Incorrect Password");
219 }
220
221 });
222 }
223}))
224
225passport.serializeUser((user,done)=>{
226 done(null,user)
227})
228passport.deserializeUser((user,done)=>{
229 done(null,user)
230})
231app.listen(5000);