106 lines
2.6 KiB
JavaScript
Executable File
106 lines
2.6 KiB
JavaScript
Executable File
const express = require('express')
|
|
const path = require('path')
|
|
const app = express()
|
|
const morgan = require('morgan')
|
|
const ascii = require('./ascii')
|
|
const cors = require('cors')
|
|
|
|
var passport = require('passport')
|
|
var Strategy = require('passport-local').Strategy
|
|
const session = require('express-session')
|
|
const FileStore = require('session-file-store')(session)
|
|
|
|
const { User } = require('./db/models')
|
|
|
|
const port = process.env.PORT || 1337
|
|
|
|
passport.use(
|
|
new Strategy({ usernameField: 'email' }, async (email, password, cb) => {
|
|
const user = await User.findOne({ where: { email: email } })
|
|
if (!user) return cb(null, false)
|
|
if (!user.correctPassword(password)) return cb(null, false)
|
|
return cb(null, user)
|
|
})
|
|
)
|
|
|
|
passport.serializeUser((user, cb) => {
|
|
cb(null, user.id)
|
|
})
|
|
|
|
passport.deserializeUser(async (id, cb) => {
|
|
try {
|
|
const user = await User.findByPk(id)
|
|
cb(null, user)
|
|
} catch (err) {
|
|
return cb(err)
|
|
}
|
|
})
|
|
|
|
app.use(morgan('tiny'))
|
|
app.use(cors())
|
|
// body parsing middleware
|
|
app.use(express.json())
|
|
app.use(express.urlencoded({ extended: true }))
|
|
app.use(require('body-parser').text())
|
|
|
|
app.use(
|
|
session({
|
|
store: new FileStore(),
|
|
secret: 'keyboard cat',
|
|
resave: false,
|
|
saveUninitialized: true,
|
|
})
|
|
)
|
|
app.use(passport.initialize())
|
|
app.use(passport.session())
|
|
|
|
app.use('/api', require('./api'))
|
|
|
|
// if (process.env.NODE_ENV === 'production') {
|
|
// // Express will serve up production assets
|
|
// app.use(express.static(path.join(__dirname, 'dist')))
|
|
// }
|
|
|
|
app.get('/login', (req, res) => {
|
|
res.send('Not logged in.\n')
|
|
})
|
|
|
|
app.post('/login', async (req, res, next) => {
|
|
try {
|
|
const user = await User.findOne({ where: { email: req.body.email } })
|
|
if (!user) {
|
|
console.log('User does not exist:', req.body.email)
|
|
res.status(401).send('Wrong username and/or password')
|
|
} else if (!user.correctPassword(req.body.password)) {
|
|
console.log('Incorrect password for user:', req.body.email)
|
|
res.status(401).send('Wrong username and/or password')
|
|
} else {
|
|
req.login(user, err => (err ? next(err) : res.json(user)))
|
|
}
|
|
} catch (err) {
|
|
next(err)
|
|
}
|
|
})
|
|
|
|
app.get('/logout', function(req, res) {
|
|
req.logout()
|
|
res.redirect('/')
|
|
})
|
|
|
|
app.get('*', (req, res) => {
|
|
res.sendFile(path.resolve(__dirname, '..', 'public', 'index.html'))
|
|
})
|
|
|
|
// error handling endware
|
|
app.use((err, req, res, next) => {
|
|
console.error(err)
|
|
console.error(err.stack)
|
|
res.status(err.status || 500).send(err.message || 'Internal server error.')
|
|
next()
|
|
})
|
|
|
|
app.listen(port, () => {
|
|
console.log('\n' + ascii + '\n')
|
|
console.log(`Doin' haxor stuff on port ${port}`)
|
|
})
|