scriptbox
Version:
Script box is a full VAS application
127 lines (116 loc) • 4 kB
JavaScript
var flash = require('connect-flash'),
passport = require('passport'),
LocalStrategy = require('passport-local').Strategy,
rnd = require("randomstring"),
adminUrl = "/admin";
// Passport Strategy.
passport.serializeUser(function(user, done) {
done(null, user.id);
});
passport.deserializeUser(function(id, done) {
Models.user.findOne({where: {username : id,actif : true}}, function (err, user) {
done(err, user);
});
});
passport.use(new LocalStrategy(
function(username, password, done) {
// asynchronous verification, for effect...
// Find the user by username. If there is no user with the given
// username, or the password is not correct, set the user to `false` to
// indicate failure and set a flash message. Otherwise, return the
// authenticated `user`.
Models.user.findOne({where: {username : username}}, function(err, user) {
if (err) { return done(err); }
if (!user) { return done(null, false, { message: 'Unknown user ' + username }); }
if (!user.actif ) { return done(null, false, { message: 'Utilisateur desactivé' }); }
if (!user.authentificate (password)) { return done(null, false, { message: 'Invalid password' }); }
return done(null, user);
});
}
));
function ensureAuthenticated(req, res, next) {
if (/^\/(css|vendors|js|images)/i.test(req.url) || req.isAuthenticated()) { return next(); }
if(req.method == "GET"){
req.session.redirect = adminUrl+req.url;
}
res.redirect('/login');
}
module.exports = function(server){
server.use(flash());
server.use(passport.initialize());
server.use(passport.session());
// Initialize Passport! Also use passport.session() middleware, to support
// persistent login sessions (recommended).
server.use(function(req,res,next){
/* Valide l'utilisate */
if(req.session.user){
req.user = {};
for(var i in req.session.user)
req.user[i] = req.session.user[i];
res.cookie('%23color-style', req.user.theme || "default",{ expires : false, path: adminUrl });
delete req.user.password;
delete req.user.salt;
swig.setDefaults({
locals: {
siteTitle : settings.title,
random : rnd,
user : req.user ,
gravatar : require("nodejs-gravatar").imageUrl
}
});
}else{
swig.setDefaults({
locals: {
siteTitle : settings.title,
random : rnd,
gravatar : require("nodejs-gravatar").imageUrl
}
});
}
next();
});
server.use(adminUrl+"/",function(req,res,next){
/* Valide l'utilisateur */
if(req.user){
return Models.user.findOne({where : {username : req.user.username}}, function(err,user){
if(err)
return next(err);
if(!user)
return res.redirect("/logout");
next();
});
}
next();
});
server.route("/login").
get(function(req, res){
if(req.isAuthenticated()) return res.redirect(adminUrl+'/');
res.render('page-signin', { user: req.user || {}, message: req.flash('error') });
}).post(
passport.authenticate('local', { failureRedirect: '/login', failureFlash: true }),
function(req, res) {
req.session.user = Object.create(req.user);
delete req.user.password;
res.redirect(req.session.redirect ||( adminUrl+'/'));
req.session.redirect = undefined;
});
server.route("/logout").
get(function(req, res){
var user = req.user || {};
req.session.user = req.user = null;
//res.render('page-signin', { user: user,message: req.flash('error') });
res.redirect("/login");
});
server.use(adminUrl, ensureAuthenticated);
//server.get(/^\/admin$/i,function(_,res){
// res.redirect(adminUrl+'/');
//})
server.route(adminUrl+"/")
.get(function(req,res){
res.render("admin",{user: req.user, messages : req.flash(), title : "Dashboard"});
});
server.use("/login",function(req,res,next){
if (req.isAuthenticated()) { return res.redirect(adminUrl); }
next();
});
}