UNPKG

cd-cluster

Version:

A lightweight Continuous Deployment / Continuous Integration platform written in node.

113 lines (105 loc) 2.47 kB
var async = require('async'); var utils = require('../libs/utils'); var token = require('../libs/token'); var errFactory = require('../libs/err_factory'); var userModule = require('../modules/user'); var users = userModule.getUsers(); exports.getSignupViewHandler = function (req, res) { res.render('signup'); }; exports.getLoginViewHandler = function (req, res) { res.render('login'); }; exports.getLogoutViewHandler = function (req, res) { res.clearCookie('cdc_id_token'); res.redirect('/login'); }; exports.signupHandler = function (req, res, next) { var user; var isFirst = users.length === 0; async.waterfall([ function (next) { utils.receiveJSON(req, next); }, function (data, next) { user = data; var username = data['username'] || ''; var password = data['password']; utils.checkParams([username, password, /^\w+$/.test(username)], next); }, function (next) { checkConflict(user['username'], next); }, function (next) { if (isFirst) { user['enabled'] = true; user['is_admin'] = true; } else { user['enabled'] = false; user['is_admin'] = false; } user['password'] = token.md5(user['password']); userModule.addUser(user, next); }, function (next) { token.sign({ username: user['username'] }, next); } ], function (err, jwt) { if (err) { next(err); } else { if (isFirst) { res.cookie('cdc_id_token', jwt['id_token']); } res.json({ data: 'ok' }); } }); }; exports.loginHandler = function (req, res, next) { var username; var password; async.waterfall([ function (next) { utils.receiveJSON(req, next); }, function (data, next) { username = data['username']; password = data['password']; utils.checkParams([username, password], next); }, function (next) { var user = userModule.getUser(username); if (user && user['password'] === token.md5(password) && user['enabled']) { next(); } else { next(errFactory.unauthorized('Incorrect username or password')); } }, function (next) { token.sign({ username: username }, next); } ], function (err, jwt) { if (err) { next(err); } else { res.cookie('cdc_id_token', jwt['id_token']); res.json({ data: jwt }); } }); }; function checkConflict(username, next) { var user = userModule.getUser(username); if (user) { next(errFactory.conflictError('User `' + username + '` is already exists.')); } else { next(); } }