let session = require( 'express-session' );
let passport = require('passport');
let LocalStrategy = require('passport-local').Strategy;
let app = express();
let udb = require( 'node-udb2' )( app );
udb.initialize({
baseUrl: config.udb.baseUrl
});
app.use( session( config.session ) );
app.use(passport.initialize());
app.use(passport.session());
passport.serializeUser( udb.defaultUserSerializer );
passport.deserializeUser( udb.defaultUserDeserializer );
passport.use( "local", new LocalStrategy(
{ usernameField: 'email', passwordField: 'password' },
udb.defaultUserAuthenticator ));
function authenticated( req, res, next ) {
if ( req.isAuthenticated() ) { return next(); }
var realm = req.headers['realm' ] || 'local';
passport.authenticate( realm, function( err, user, info ) {
if ( err ) return res.status( 401 ).send( err.message );
if ( ! user ) return res.status( 401 ).send( info.message );
if ( user.session && user.session.expire ) {
req.session.cookie.expires = new Date( Date.now() + (user.session.expire * 1000) );
delete user.session;
}
req.logIn( user, function( err ) {
next();
});
})( req, res, next );
}
app.post( '/endpoint', authenticated, udb.requestorHas( ["super-admin","admin"] ), function( req, res, next ) {
if ( udb.userHas( req.user, "admin" ) ) { ... }
udb.request({
uri: "/db/accounts/" + req.user.account.id + "/users",
method: "GET",
qs: udb.filter({ where: { status: "LOCKED" } })
}, function( err, users ) {
if ( err ) return next( err );
res.json( users );
});
});