Lint server, remove body-parser

This commit is contained in:
Kevin Thomas
2021-07-23 17:10:44 -07:00
parent 9f5a3a5ad8
commit 1be716d85a
10 changed files with 264 additions and 17123 deletions

17091
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -10,7 +10,6 @@
}, },
"dependencies": { "dependencies": {
"axios": "^0.21.1", "axios": "^0.21.1",
"body-parser": "^1.19.0",
"connect-ensure-login": "^0.1.1", "connect-ensure-login": "^0.1.1",
"cookie-parser": "^1.4.5", "cookie-parser": "^1.4.5",
"core-js": "^3.6.5", "core-js": "^3.6.5",

View File

@@ -1,44 +1,41 @@
const express = require('express'); const express = require('express')
const session = require('express-session') const session = require('express-session')
const cors = require('cors') const cors = require('cors')
const passport = require('passport'); const passport = require('passport')
const path = require('path'); const path = require('path')
const cookieParser = require('cookie-parser'); const cookieParser = require('cookie-parser')
const ensureLoggedIn = require('connect-ensure-login').ensureLoggedIn;
const bodyParser = require("body-parser")
const indexRouter = require('./routes/index'); const indexRouter = require('./routes/index')
const authRouter = require('./routes/auth'); const authRouter = require('./routes/auth')
const myaccountRouter = require('./routes/myaccount'); const myaccountRouter = require('./routes/myaccount')
const usersRouter = require('./routes/users'); const usersRouter = require('./routes/users')
const db = require('./db');
const app = express(); const app = express()
require('./boot/db')(); require('./boot/db')()
require('./boot/auth')(); require('./boot/auth')()
app.use(express.json()); app.use(express.json())
app.use(express.urlencoded({ extended: false })); app.use(express.urlencoded({ extended: false }))
app.use(cookieParser()); app.use(cookieParser())
app.use(express.static(path.join(__dirname, 'public'))); app.use(express.static(path.join(__dirname, 'public')))
app.use(session({ secret: "cats", resave: false, saveUninitialized: false })); app.use(session({ secret: 'cats', resave: false, saveUninitialized: false }))
app.use(function(req, res, next) { app.use(function (req, res, next) {
const msgs = req.session.messages || []; const msgs = req.session.messages || []
res.locals.messages = msgs; res.locals.messages = msgs
res.locals.hasMessages = !! msgs.length; res.locals.hasMessages = !!msgs.length
req.session.messages = []; req.session.messages = []
next(); next()
}); })
app.use(bodyParser.json()); app.use(express.json())
app.use(passport.initialize()); app.use(passport.initialize())
app.use(passport.authenticate('session')); app.use(passport.authenticate('session'))
app.use(cors()) app.use(cors())
// Define routes // Define routes
app.use('/', indexRouter); app.use('/', indexRouter)
app.use('/', authRouter); app.use('/', authRouter)
app.use('/myaccount', myaccountRouter); app.use('/myaccount', myaccountRouter)
app.use('/users', usersRouter); app.use('/users', usersRouter)
module.exports = app; module.exports = app

View File

@@ -3,17 +3,16 @@
/** /**
* Module dependencies. * Module dependencies.
*/ */
const app = require('../app'); const app = require('../app')
const debug = require('debug')('example:server'); const debug = require('debug')('example:server')
const http = require('http');
const https = require('https') const https = require('https')
const fs = require('fs') const fs = require('fs')
/** /**
* Get port from environment and store in Express. * Get port from environment and store in Express.
*/ */
const port = normalizePort(process.env.PORT || '3000'); const port = normalizePort(process.env.PORT || '3000')
app.set('port', port); app.set('port', port)
/** /**
* HTTPS options. * HTTPS options.
@@ -26,68 +25,66 @@ const httpsOptions = {
/** /**
* Create HTTP server. * Create HTTP server.
*/ */
const server = https.createServer(httpsOptions, app); const server = https.createServer(httpsOptions, app)
/** /**
* Listen on provided port, on all network interfaces. * Listen on provided port, on all network interfaces.
*/ */
server.listen(port); server.listen(port)
server.on('error', onError); server.on('error', onError)
server.on('listening', onListening); server.on('listening', onListening)
/** /**
* Normalize a port into a number, string, or false. * Normalize a port into a number, string, or false.
*/ */
function normalizePort(val) { function normalizePort (val) {
const port = parseInt(val, 10); const port = parseInt(val, 10)
if (isNaN(port)) { if (isNaN(port)) {
// named pipe // named pipe
return val; return val
} }
if (port >= 0) { if (port >= 0) {
// port number // port number
return port; return port
} }
return false; return false
} }
/** /**
* Event listener for HTTP server "error" event. * Event listener for HTTP server "error" event.
*/ */
function onError(error) { function onError (error) {
if (error.syscall !== 'listen') { if (error.syscall !== 'listen') {
throw error; throw error
} }
const bind = typeof port === 'string' const bind = typeof port === 'string'
? 'Pipe ' + port ? 'Pipe ' + port
: 'Port ' + port; : 'Port ' + port
// handle specific listen errors with friendly messages // handle specific listen errors with friendly messages
switch (error.code) { switch (error.code) {
case 'EACCES': case 'EACCES':
console.error(bind + ' requires elevated privileges'); console.error(bind + ' requires elevated privileges')
process.exit(1); process.exit(1)
break;
case 'EADDRINUSE': case 'EADDRINUSE':
console.error(bind + ' is already in use'); console.error(bind + ' is already in use')
process.exit(1); process.exit(1)
break;
default: default:
throw error; throw error
} }
} }
/** /**
* Event listener for HTTP server "listening" event. * Event listener for HTTP server "listening" event.
*/ */
function onListening() { function onListening () {
const addr = server.address(); const addr = server.address()
const bind = typeof addr === 'string' const bind = typeof addr === 'string'
? 'pipe ' + addr ? 'pipe ' + addr
: 'port ' + addr.port; : 'port ' + addr.port
debug('Listening on ' + bind); debug('Listening on ' + bind)
} }

View File

@@ -1,37 +1,35 @@
const passport = require('passport'); const passport = require('passport')
const Strategy = require('passport-local'); const Strategy = require('passport-local')
const crypto = require('crypto'); const crypto = require('crypto')
const db = require('../db'); const db = require('../db')
module.exports = function() {
module.exports = function () {
// Configure the local strategy for use by Passport. // Configure the local strategy for use by Passport.
// //
// The local strategy requires a `verify` function which receives the credentials // The local strategy requires a `verify` function which receives the credentials
// (`username` and `password`) submitted by the user. The function must verify // (`username` and `password`) submitted by the user. The function must verify
// that the password is correct and then invoke `cb` with a user object, which // that the password is correct and then invoke `cb` with a user object, which
// will be set at `req.user` in route handlers after authentication. // will be set at `req.user` in route handlers after authentication.
passport.use(new Strategy(function(username, password, cb) { passport.use(new Strategy(function (username, password, cb) {
db.get('SELECT rowid AS id, * FROM users WHERE username = ?', [ username ], function(err, row) { db.get('SELECT rowid AS id, * FROM users WHERE username = ?', [username], function (err, row) {
if (err) { return cb(err); } if (err) { return cb(err) }
if (!row) { return cb(null, false, { message: 'Incorrect username or password.' }); } if (!row) { return cb(null, false, { message: 'Incorrect username or password.' }) }
crypto.pbkdf2(password, row.salt, 10000, 32, 'sha256', function(err, hashedPassword) { crypto.pbkdf2(password, row.salt, 10000, 32, 'sha256', function (err, hashedPassword) {
if (err) { return cb(err); } if (err) { return cb(err) }
if (!crypto.timingSafeEqual(row.hashed_password, hashedPassword)) { if (!crypto.timingSafeEqual(row.hashed_password, hashedPassword)) {
return cb(null, false, { message: 'Incorrect username or password.' }); return cb(null, false, { message: 'Incorrect username or password.' })
} }
const user = { const user = {
id: row.id.toString(), id: row.id.toString(),
username: row.username, username: row.username,
displayName: row.name displayName: row.name
}; }
return cb(null, user); return cb(null, user)
}); })
}); })
})); }))
// Configure Passport authenticated session persistence. // Configure Passport authenticated session persistence.
// //
@@ -40,16 +38,15 @@ module.exports = function() {
// typical implementation of this is as simple as supplying the user ID when // typical implementation of this is as simple as supplying the user ID when
// serializing, and querying the user record by ID from the database when // serializing, and querying the user record by ID from the database when
// deserializing. // deserializing.
passport.serializeUser(function(user, cb) { passport.serializeUser(function (user, cb) {
process.nextTick(function() { process.nextTick(function () {
cb(null, { id: user.id, username: user.username }); cb(null, { id: user.id, username: user.username })
}); })
}); })
passport.deserializeUser(function(user, cb) { passport.deserializeUser(function (user, cb) {
process.nextTick(function() { process.nextTick(function () {
return cb(null, user); return cb(null, user)
}); })
}); })
}
};

View File

@@ -1,15 +1,7 @@
const db = require('../db'); const db = require('../db')
module.exports = function() { module.exports = function () {
db.serialize(function () {
db.serialize(function() { db.run('CREATE TABLE IF NOT EXISTS users ( username TEXT UNIQUE, hashed_password BLOB, salt BLOB, name TEXT)')
db.run("CREATE TABLE IF NOT EXISTS users ( \ })
username TEXT UNIQUE, \ }
hashed_password BLOB, \
salt BLOB, \
name TEXT \
)");
});
//db.close();
};

View File

@@ -1,18 +1,18 @@
const express = require('express'); const express = require('express')
const passport = require('passport'); const passport = require('passport')
const router = express.Router(); const router = express.Router()
router.post('/login/password', passport.authenticate('local'), function(req, res, next) { router.post('/login/password', passport.authenticate('local'), function (req, res, next) {
if(req.user) { if (req.user) {
res.json(req.user); res.json(req.user)
} else { } else {
res.statusCode = 403; res.statusCode = 403
} }
}); })
router.get('/logout', function(req, res, next) { router.get('/logout', function (req, res, next) {
req.logout(); req.logout()
}); })
module.exports = router; module.exports = router

View File

@@ -1,8 +1,8 @@
const express = require('express'); const express = require('express')
const router = express.Router(); const router = express.Router()
router.get('/', function(req, res, next) { router.get('/', function (req, res, next) {
res.json({ user: req.user }); res.json({ user: req.user })
}); })
module.exports = router; module.exports = router

View File

@@ -1,23 +1,23 @@
const express = require('express'); const express = require('express')
const ensureLoggedIn = require('connect-ensure-login').ensureLoggedIn; const ensureLoggedIn = require('connect-ensure-login').ensureLoggedIn
const db = require('../db'); const db = require('../db')
const router = express.Router(); const router = express.Router()
/* GET users listing. */ /* GET users listing. */
router.get('/', router.get('/',
ensureLoggedIn(), ensureLoggedIn(),
function(req, res, next) { function (req, res, next) {
db.get('SELECT rowid AS id, username, name FROM users WHERE rowid = ?', [ req.user.id ], function(err, row) { db.get('SELECT rowid AS id, username, name FROM users WHERE rowid = ?', [req.user.id], function (err, row) {
if (err) { return next(err); } if (err) { return next(err) }
const user = { const user = {
id: row.id.toString(), id: row.id.toString(),
username: row.username, username: row.username,
displayName: row.name displayName: row.name
}; }
res.render('profile', { user: user }); res.render('profile', { user: user })
}); })
}); })
module.exports = router; module.exports = router

View File

@@ -1,33 +1,33 @@
const express = require('express'); const express = require('express')
const crypto = require('crypto'); const crypto = require('crypto')
const db = require('../db'); const db = require('../db')
const router = express.Router(); const router = express.Router()
router.post('/', function(req, res, next) { router.post('/', function (req, res, next) {
console.log("REQ: ", req.body) console.log('REQ: ', req.body)
const salt = crypto.randomBytes(16); const salt = crypto.randomBytes(16)
crypto.pbkdf2(req.body.password, salt, 10000, 32, 'sha256', function(err, hashedPassword) { crypto.pbkdf2(req.body.password, salt, 10000, 32, 'sha256', function (err, hashedPassword) {
if (err) { return next(err); } if (err) { return next(err) }
db.run('INSERT INTO users (username, hashed_password, salt, name) VALUES (?, ?, ?, ?)', [ db.run('INSERT INTO users (username, hashed_password, salt, name) VALUES (?, ?, ?, ?)', [
req.body.username, req.body.username,
hashedPassword, hashedPassword,
salt, salt,
req.body.name req.body.name
], function(err) { ], function (err) {
if (err) { return next(err); } if (err) { return next(err) }
const user = { const user = {
id: this.lastID.toString(), id: this.lastID.toString(),
username: req.body.username, username: req.body.username,
displayName: req.body.name displayName: req.body.name
}; }
req.login(user, function(err) { req.login(user, function (err) {
if (err) { return next(err); } if (err) { return next(err) }
}); })
}); })
}); })
}); })
module.exports = router; module.exports = router