Repository URL to install this package:
|
Version:
1.2.7 ▾
|
/**
* @see https://github.com/jaredhanson/connect-ensure-login/blob/master/lib/ensureLoggedIn.js
*/
import util from 'util'
import React from 'react'
import { renderToString } from 'react-dom/server'
// can disable here conditionally (optimized)
function sessionPlugin(app) {
if (!process.env.IS_PASSWORD_PROTECTION_ENABLED) {
return emptyMiddleware
}
// done before using the plugins
serverCustomsBorderGuard()
addSessionMiddleware(app)
addRoutes(app)
return wrapEnsureLoggedIn(app)
}
// @alias nth(3)
function emptyMiddleware(req, res, next) {
next()
}
const loginRoute = '/skavalogin'
// or parts of it here (dynamic runtime)
function wrapEnsureLoggedIn(app) {
const { ensureLoggedIn } = require('./session.ensureLoggedIn')
const ensureLoggedInSession = ensureLoggedIn(loginRoute)
return function doNotEnsureLoggedInAlways(req, res, next) {
return ensureLoggedInSession(req, res, next)
}
}
function addRoutes(app) {
const passport = require('passport').default
// @todo !!!
const PasswordProtected = require('PasswordProtected')
app.get('/skavalogout', (req, res) => {
req.logout()
res.redirect(loginRoute)
})
app.get(loginRoute, (req, res) => {
const view = React.createComponent(PasswordProtected)
res.send(renderToString(view))
})
app.post(
loginRoute,
passport.authenticate('local', {
successRedirect: '/',
failureRedirect: loginRoute,
})
)
}
function addSessionMiddleware(app) {
const expressSession = require('express-session').default
const passport = require('passport').default
const { flash } = require('./session.flash')
/**
* @todo - remove
* https://github.com/jaredhanson/connect-flash/blob/master/lib/flash.js
*/
app.use(flash())
app.use(
expressSession({
secret: 'skava123',
resave: false,
saveUninitialized: false,
})
)
app.use(passport.initialize())
app.use(passport.session())
}
function serverCustomsBorderGuard() {
const Strategy = require('passport-local').default
const passport = require('passport').default
const records = [
{
id: 1,
username: 'skavapoc',
password: 'skava123',
},
]
async function findUser(username) {
const user = await records.find(record => record.username === username)
return user
}
const callbackFindUser = util.callbackify(findUser)
// Initialize Passport Options and mock
passport.use(
new Strategy((username, password, done) => {
callbackFindUser(username, (error, user) => {
if (error) {
console.log({ error })
return done(error)
}
if (!user) {
console.log('********** WRONG USERNAME *********')
return done(null, false, { message: 'Incorrect username.' })
}
if (user.password !== password) {
console.log('********** WRONG PASSWORD *********')
return done(null, false, { message: 'Incorrect password.' })
}
return done(null, user)
})
})
)
passport.serializeUser((user, done) => {
done(null, user.id)
})
passport.deserializeUser((id, done) => {
const user = records.find(record => record.id === id)
return done(null, user)
})
}
export { sessionPlugin }