-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathapp.js
More file actions
132 lines (113 loc) · 3.74 KB
/
app.js
File metadata and controls
132 lines (113 loc) · 3.74 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
// inlcude all of our necessary libraries
var express = require("express");
var path = require('path');
var bodyParser = require('body-parser')
var cookieParser = require('cookie-parser');
var session = require('express-session');
var pgSession = require('connect-pg-simple')(session);
var expressValidator = require('express-validator');
var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;
var flash = require('express-flash-notification');
var bcrypt = require('bcrypt');
var ejs = require('ejs');
var engines = require('consolidate');
var app = express();
const fileUpload = require('express-fileupload');
app.use(fileUpload());
// include all of our js modules
var db = require('./helpers/db.js');
var index = require('./routes/index.js');
app.use(cookieParser());
app.use(session({
store: new pgSession({
pool : db, // Connection pool
tableName : 'session'
}),
secret: process.env.FOO_COOKIE_SECRET,
resave: false,
cookie: { maxAge: 30 * 24 * 60 * 60 * 1000 } // 30 days
}));
app.use(flash(app));
app.use(passport.initialize());
app.use(passport.session());
// to include out css and handlebar files
app.use(express.static(__dirname + '/assets'));
app.set('views', path.join(__dirname, 'views'));
//app.engine('ejs', engines.ejs);
//app.engine('handlebars', engines.handlebars);
app.set('view engine', 'hbs');
var hbs = require('express-handlebars');
app.engine('hbs', hbs({
extname: 'hbs',
partialsDir : [
// path to your partials
path.join(__dirname, 'views/partials'),
],
helpers: {
inc: function(value, options) { return parseInt(value) + 1; }
}
}));
app.use(bodyParser.json()); // to support JSON-encoded bodies
app.use(bodyParser.urlencoded({ // to support URL-encoded bodies
extended: true
}));
app.use(expressValidator());
// to store whether a user is logged in
app.use(function(req, res, next) {
res.locals.isAuthenticated = req.isAuthenticated();
next();
});
// to store whether a user is an administrator
app.use(function(req, res, next) {
if (req.user != null) {
res.locals.isAdmin = req.user.role;
}
next();
});
// to load homepage
app.use("/", index);
app.post("/request_add", (req,res) => {
let sampleFile = req.files.sampleFile;
// Use the mv() method to place the file somewhere on your server
sampleFile.mv('./scripts/docs/' + sampleFile.name, function(err) {
if (err)
return res.status(500).send(err);
db.query('INSERT INTO requests(doc_name, request_type) VALUES ($1, \'add\')', [sampleFile.name], function(err, results, fields) {
if(err) {done(err)}
});
});
res.redirect('/')
});
// authenticate the user
passport.use(new LocalStrategy(
function(username, password, done) {
db.query('SELECT user_id, password, is_admin FROM user_account WHERE username = $1', [username], function(err, results, fields) {
if(err) {done(err)}
if (results.length == 0) {
done(null, false);
}
else {
const hash = results.rows[0].password.toString();
bcrypt.compare(password, hash, function(err, response) {
if (response == true) {
var today = new Date();
var last_login = today.toISOString().split('.')[0]+"Z";
db.query('UPDATE user_account SET last_login = $1 WHERE username = $2', [last_login, username], function(err1, results1, fields1) {
if(err1) {done(err1)}
return done(null, {user_id: results.rows[0].user_id, role: results.rows[0].is_admin});
});
}
else {
return done(null, false);
}
});
}
})
}
));
// starts the server instance
app.listen(8000,function(){
console.log("Live at Port 8000");
});
module.exports = app