UNPKG

@resin/pinejs

Version:

Pine.js is a sophisticated rules-driven API engine that enables you to define rules in a structured subset of English. Those rules are used in order for Pine.js to generate a database schema and the associated [OData](http://www.odata.org/) API. This make

96 lines (81 loc) 2.28 kB
import * as _express from 'express' import * as _passport from 'passport' import * as _passportLocal from 'passport-local' import * as Promise from 'bluebird' const permissions = require('../sbvr-api/permissions') // Returns a middleware that will handle logging in using `username` and `password` body properties export let login: ( fn: ( err: any, user: {} | undefined, req: _express.Request, res: _express.Response, next: _express.NextFunction, ) => void ) => _express.RequestHandler // Returns a middleware that logs the user out and then calls next() export let logout: _express.RequestHandler export const checkPassword: _passportLocal.VerifyFunction = (username, password, done: (error: undefined, user?: any) => void) => permissions.checkPassword(username, password) .catchReturn(false) .asCallback(done) const setup = (app: _express.Application) => { if (!process.browser) { const passport: typeof _passport = require('passport') app.use(passport.initialize()) app.use(passport.session()) const { Strategy: LocalStrategy }: typeof _passportLocal = require('passport-local') passport.serializeUser((user, done) => { done(null, user) }) passport.deserializeUser((user, done) => { done(null, user) }) passport.use(new LocalStrategy(checkPassword)) login = (fn) => (req, res, next) => passport.authenticate('local', (err: any, user?: {}) => { if (err || user == null) { fn(err, user, req, res, next) return } req.login(user, (err) => { fn(err, user, req, res, next) }) })(req, res, next) logout = (req, _res, next) => { req.logout() next() } } else { let loggedIn = false let loggedInUser: any = null app.use((req, _res, next) => { if (loggedIn === false) { req.user = loggedInUser } next() }) login = (fn) => (req, res, next) => checkPassword(req.body.username, req.body.password, (err, user) => { if (user) { loggedIn = true loggedInUser = user } fn(err, user, req, res, next) }) logout = (req, _res, next) => { req.user = null loggedIn = false loggedInUser = null next() } } return Promise.resolve() } export const config = { models: [{ customServerCode: { setup }, }], }