Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
@skava/react-server / src / deps / session / session.ts
Size: Mime:
/**
 * @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 }