diff --git a/src/server/auth/auth.js b/src/server/auth/auth.js
index 4ca726d..da40fb3 100644
--- a/src/server/auth/auth.js
+++ b/src/server/auth/auth.js
@@ -16,7 +16,6 @@
'use strict';
-var util = require('util');
var logger = require('../common/log-manager');
var extend = require('../common/inherit').extend;
var utils = require('../common/utils');
@@ -25,8 +24,6 @@ var baseSvc = require('../common/n-svc').Svc;
var express = require('express');
var session = require('express-session');
-//var MongoStore = require('connect-mongo')(session);
-var FileStore = require('session-file-store')(session);
var SQLiteStore = require('connect-sqlite3')(session);
var passport = require('passport');
var corser = require('corser');
@@ -42,22 +39,12 @@ var morgan = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
-var multipart = require('connect-multiparty');
-var multipartMiddleware = multipart();
-
-
var config = global.app.config;
-function setXFrameOption (req, res, next) {
- res.setHeader('X-Frame-Options', 'DENY');
- next();
-}
-
var register = function (auth, conf, unitName, svcType) {
auth.set('views', __dirname + '/views');
auth.set('view engine', 'ejs');
- //auth.use(setXFrameOption);
auth.use(compression());
auth.use(express.static(__dirname + '/views'));
@@ -72,7 +59,14 @@ var register = function (auth, conf, unitName, svcType) {
auth.use(corser.create(
{
methods: ['GET', 'POST', 'DELETE'],
- requestHeaders: ['Authorization', 'Accept', 'Accept-Language', 'Content-Language', 'Content-Type', 'Last-Event-ID'],
+ requestHeaders: [
+ 'Authorization',
+ 'Accept',
+ 'Accept-Language',
+ 'Content-Language',
+ 'Content-Type',
+ 'Last-Event-ID'
+ ],
supportsCredentials: true,
maxAge: 86400 // as 1 day
}
@@ -110,11 +104,9 @@ var register = function (auth, conf, unitName, svcType) {
auth.use(user.router);
auth.use(acl.router);
auth.use(group.router);
- auth.use(function(err, req, res, next) {
+ auth.use(function(err, req, res) {
logger.debug('errorHandler middleware', err);
-
res.status(500).send('Internal server error');
- //res.send(500, 'Internal server error');
});
auth.disable('x-powered-by');
};
@@ -165,7 +157,7 @@ AuthSvr.prototype.start = function () {
logger.info('authorization https server is started at port ' + conf.httpsPort);
}
-}
+};
AuthSvr.prototype.stop = function () {
var self = this;
@@ -180,7 +172,7 @@ AuthSvr.prototype.stop = function () {
}
require('./lib/userdb').close();
-}
+};
//
// AuthSvc
@@ -200,22 +192,20 @@ extend(AuthSvc, baseSvc);
AuthSvc.prototype.start = function () {
var self = this;
self.authSvr.start();
-}
+};
AuthSvc.prototype.stop = function () {
var self = this;
self.authSvr.stop();
-}
+};
AuthSvc.prototype.started = function () {
-}
+};
AuthSvc.prototype.stopped = function () {
-}
-
-
-exports.Svc = AuthSvc
+};
+exports.Svc = AuthSvc;
diff --git a/src/server/auth/lib/oauth2-manager.js b/src/server/auth/lib/oauth2-manager.js
index d5b8831..63680d8 100644
--- a/src/server/auth/lib/oauth2-manager.js
+++ b/src/server/auth/lib/oauth2-manager.js
@@ -138,6 +138,7 @@ router.get('/webida/api/oauth/authorize',
});
}),
function (req, res, next) {
+ /*jshint camelcase: false */
var allow = { uid: req.user.uid,
client: req.oauth2.client.clientID,
transaction_id: req.oauth2.transactionID };
@@ -153,11 +154,15 @@ router.get('/webida/api/oauth/authorize',
client: req.oauth2.client,
isDevClient: false /*isDevClient*/ });
}
+ /*jshint camelcase: true */
},
+ /*jshint unused:false*/
+ // Once `next` is removed, the action of this method is getting weired.
function(err, req, res, next) {
logger.error('authorization err: ', err);
res.sendErrorPage(401, err);
},
+ /*jshint unused:true*/
server.decision()
);
@@ -170,7 +175,9 @@ router.post('/oauth/decision',
req.body.allow === 'on' ? true : false);
*/
+ /*jshint camelcase: false */
req.body.transaction_id = req.session.allow.transaction_id;
+ /*jshint camelcase: true */
next();
},
@@ -226,7 +233,7 @@ router.get('/webida/api/oauth/verify',
router.post('/webida/api/oauth/personaltoken',
userdb.verifyToken,
function (req, res, next) {
- var aclInfo = {uid: req.user.uid, action: 'auth:addNewPersonalToken', rsc: 'auth:*'};
+ var aclInfo = {uid: req.user.uid, action: 'auth:addNewPersonalToken', rsc: 'auth:' + req.user.userId};
userdb.checkAuthorize(aclInfo, function (err) {
if (!err) {
return next();
@@ -251,7 +258,7 @@ router.post('/webida/api/oauth/personaltoken',
router['delete']('/webida/api/oauth/personaltoken/:personaltoken',
userdb.verifyToken,
function (req, res, next) {
- var aclInfo = {uid: req.user.uid, action: 'auth:deletePersonalToken', rsc: 'auth:*'};
+ var aclInfo = {uid: req.user.uid, action: 'auth:deletePersonalToken', rsc: 'auth:' + req.user.userId};
userdb.checkAuthorize(aclInfo, function (err) {
if (!err) {
return next();
@@ -278,7 +285,7 @@ router['delete']('/webida/api/oauth/personaltoken/:personaltoken',
router.get('/webida/api/oauth/personaltoken',
userdb.verifyToken,
function (req, res, next) {
- var aclInfo = {uid: req.user.uid, action: 'auth:getPersonalTokens', rsc: 'auth:*'};
+ var aclInfo = {uid: req.user.uid, action: 'auth:getPersonalTokens', rsc: 'auth:' + req.user.userId};
userdb.checkAuthorize(aclInfo, function (err) {
if (!err) {
return next();
diff --git a/src/server/auth/lib/user-manager.js b/src/server/auth/lib/user-manager.js
index 76b377e..b1db880 100644
--- a/src/server/auth/lib/user-manager.js
+++ b/src/server/auth/lib/user-manager.js
@@ -17,11 +17,9 @@
'use strict';
var async = require('async');
-//var jquery = require('jquery');
var express = require('express');
var bodyParser = require('body-parser');
var passport = require('passport');
-//var login = require('connect-ensure-login');
var LocalStrategy = require('passport-local').Strategy;
var ClientPasswordStrategy = require('passport-oauth2-client-password').Strategy;
var BearerStrategy = require('passport-http-bearer').Strategy;
@@ -52,15 +50,8 @@ var router = express.Router();
router.use(bodyParser.urlencoded({ extended: true }));
router.use(bodyParser.json());
-//var urlencodedParser = bodyParser.urlencoded({ extended: true });
-//var jsonParser = bodyParser.json();
-
module.exports.router = router;
-//var sqlConn = userdb.getSqlConn();
-//var sqlConn = userdb.sqlConn;
-
-
function errLog(err, errMsg) {
if (err === 'undefined') {
logger.error('[userdb] ' + errMsg);
@@ -69,68 +60,6 @@ function errLog(err, errMsg) {
}
}
-function createDefaultPolicy(user, callback) {
- var token;
- async.waterfall([
- function (next) {
- userdb.getPersonalTokens(100000, function (err, result) {
- if (err) {
- return next(err);
- }
- if (result.length === 0) {
- return next(new ServerError(500, 'Creating default policy failed'));
- }
- token = result[0].data;
- return next(null);
- });
- }, function (next) {
- userdb.createPolicy(user.uid, config.services.auth.defaultAuthPolicy, token, function (err, policy) {
- if (err) {
- return next(new ServerError(500, 'Set default auth policy failed'));
- }
- return next(null, policy.pid);
- });
- }, function (pid, next) {
- userdb.assignPolicy({pid: pid, user: user.uid}, function (err) {
- if (err) {
- return next(new ServerError(500, 'Assign default auth policy failed'));
- }
- return next(null);
- });
- }, function (next) {
- userdb.createPolicy(user.uid, config.services.auth.defaultAppPolicy, token, function (err, policy) {
- if (err) {
- return next(new ServerError(500, 'Set default app policy failed'));
- }
- return next(null, policy.pid);
- });
- }, function (pid, next) {
- userdb.assignPolicy({pid: pid, user: user.uid}, function (err) {
- if (err) {
- return next(new ServerError(500, 'Assign default app policy failed'));
- }
- return next(null);
- });
- }, function (next) {
- userdb.createPolicy(user.uid, config.services.auth.defaultFSSvcPolicy, token, function (err, policy) {
- if (err) {
- return next(new ServerError(500, 'Set default fssvc policy failed'));
- }
- return next(null, policy.pid);
- });
- }, function (pid, next) {
- userdb.assignPolicy({pid: pid, user: user.uid}, function (err) {
- if (err) {
- return next(new ServerError(500, 'Assign default fssvc policy failed'));
- }
- return next(null);
- });
- }
- ], function (err) {
- return callback(err);
- });
-}
-
exports.start = function (/*svc*/) {
passport.serializeUser(function (user, done) {
logger.debug('serializeUser', user.uid);
@@ -259,7 +188,7 @@ exports.start = function (/*svc*/) {
if (err || !user) {
return next(new Error('Creating the account failed.' + err));
}
- createDefaultPolicy(user, function (err) {
+ userdb.createDefaultPolicy(user, function (err) {
if (err) {
return next(new Error('Creating the default policy for ' + user.email + ' failed.' +
err));
@@ -319,7 +248,7 @@ exports.start = function (/*svc*/) {
return done(new Error('Creating the account failed.' + err));
}
- createDefaultPolicy(user, function (err) {
+ userdb.createDefaultPolicy(user, function (err) {
if (err) {
return next(new Error('Creating the default policy for ' + user.email + ' failed.' +
err));
@@ -360,35 +289,36 @@ exports.init = function (callback) {
return next(err);
}
if (results.length > 0) {
- return next(null, results[0].uid);
+ return next(null, results[0]);
} else {
userdb.addUser(config.services.auth.adminAccount, function (err, user) {
if (err) {
return next(new ServerError('Creating the Admin account failed.' + err));
} else {
- return next(null, user.uid);
+ return next(null, user);
}
});
}
});
- }, function (uid, next) {
- userdb.updateUser({uid: uid}, {isAdmin: 1},
+ }, function (user, next) {
+ userdb.updateUser({uid: user.uid}, {isAdmin: 1},
function (err/*, user*/) {
if (err) {
return next(new Error('Activating the admin account failed.' + err));
}
- return next(null, uid);
+ user.isAdmin = 1;
+ return next(null, user);
}
);
- }, function (uid, next) {
- userdb.addNewPersonalToken(uid, cuid(), function (err, token) {
+ }, function (user, next) {
+ userdb.addNewPersonalToken(user.uid, cuid(), function (err, token) {
if (err) {
return next(err);
}
logger.info('Admin token:', token);
- return next(null, {uid: uid});
+ return next(null, user);
});
- }, createDefaultPolicy
+ }, userdb.createDefaultPolicy
], function (err) {
callback(err);
});
@@ -463,7 +393,7 @@ exports.createAdmin2 = function (callback) {
return next(null, {uid: uid});
});
},
- createDefaultPolicy
+ userdb.createDefaultPolicy
], function (err) {
return callback(err);
});
@@ -575,7 +505,7 @@ router.get('/signup', function (req, res) {
router.get('/webida/api/oauth/logout',
userdb.verifyToken,
function (req, res, next) {
- var aclInfo = {uid: req.user.uid, action: 'auth:logout', rsc: 'auth:*'};
+ var aclInfo = {uid: req.user.uid, action: 'auth:logout', rsc: 'auth:' + req.user.userId};
userdb.checkAuthorize(aclInfo, function (err) {
if (err) {
return res.sendfail(err);
@@ -592,7 +522,7 @@ router.get('/webida/api/oauth/logout',
router.get('/webida/api/oauth/myinfo',
userdb.verifyToken,
function (req, res, next) {
- var aclInfo = {uid: req.user.uid, action: 'auth:getMyInfo', rsc: 'auth:*'};
+ var aclInfo = {uid: req.user.uid, action: 'auth:getMyInfo', rsc: 'auth:' + req.user.userId};
userdb.checkAuthorize(aclInfo, function (err) {
if (err) {
return res.sendfail(err);
@@ -613,7 +543,7 @@ router.get('/webida/api/oauth/myinfo',
router['delete']('/webida/api/oauth/myinfo',
userdb.verifyToken,
function (req, res, next) {
- var aclInfo = {uid: req.user.uid, action: 'auth:deleteMyAccount', rsc: 'auth:*'};
+ var aclInfo = {uid: req.user.uid, action: 'auth:deleteMyAccount', rsc: 'auth:' + req.user.userId};
userdb.checkAuthorize(aclInfo, function (err) {
if (err) {
return res.sendfail(err);
@@ -637,7 +567,7 @@ router.post('/webida/api/oauth/changepassword',
multipartMiddleware,
userdb.verifyToken,
function (req, res, next) {
- var aclInfo = {uid: req.user.uid, action: 'auth:changeMyPassword', rsc: 'auth:*'};
+ var aclInfo = {uid: req.user.uid, action: 'auth:changeMyPassword', rsc: 'auth:' + req.user.userId};
userdb.checkAuthorize(aclInfo, function (err) {
if (err) {
return res.sendfail(err);
@@ -668,32 +598,6 @@ router.post('/webida/api/oauth/changepassword',
return res.sendok();
}
});
-
- /*var sqlConn = userdb.getSqlConn();
- sqlConn.beginTransaction(function (err) {
- if (err) {
- var errMsg = 'changepassword error in db';
- errLog(errMsg);
- return res.sendfail(errMsg);
- }
- userdb.updateUser({uid:req.user.uid}, {password: newPW}, function (err, user) {
- if (err || !user) {
- sqlConn.rollback(function () {
- return res.sendfail(err);
- });
- } else {
- sqlConn.commit(function (err) {
- if (err) {
- sqlConn.rollback(function () {
- return res.sendfail('changePassword failed(server internal error)');
- });
- }
-
- return res.sendok();
- });
- }
- });
- });*/
}
);
@@ -793,79 +697,6 @@ router.post('/activateaccount',
loginHandler(req, res)(null, user);
}
});
-
- /*var sqlConn = userdb.getSqlConn();
- sqlConn.beginTransaction(function (err) {
- if (err) {
- var errMsg = 'activateaccount error in db';
- errLog(errMsg, err);
- return res.sendfail(errMsg);
- }
-
- var password = new Buffer(req.body.password, 'base64').toString();
- var activationKey = req.body.activationKey;
- var user;
-
- logger.info('activateaccount post', req.body);
-
- async.waterfall([
- function (next) {
- if (password.length < 6) {
- return next('password length must be longer than 5 chareacters.');
- }
- return next(null);
- }, function (next) {
- userdb.findUser({activationKey: activationKey}, function (err, users) {
- if (err) {
- return next(new ServerError(503, 'Get userinfo failed'));
- }
-
- if (users.length === 0) {
- return next('Unknown user');
- }
-
- if (users[0].status === userdb.STATUS.APPROVED) {
- return next('Your account is already activated.');
- }
-
- if (users[0].activationKey !== activationKey) {
- return next('Invalid request.');
- }
-
- return next(null, users[0].uid);
- });
- }, function (uid, next) {
- userdb.updateUser({uid:uid}, {password: password, status: userdb.STATUS.APPROVED},
- function (err, result) {
- if (err || !result) {
- return next(new ServerError(503, 'Activating failed'));
- }
-
- user = result;
- return next(null);
- });
- }, function (next) {
- return createDefaultPolicy(user, next);
- }
- ], function (err) {
- if (err || !user) {
- sqlConn.rollback(function () {
- return res.sendfail(err);
- });
- } else {
- sqlConn.commit(function (err) {
- if (err) {
- sqlConn.rollback(function () {
- return res.sendfail('activateAccount failed(server internal error)');
- });
- }
-
- req.session.opener = config.services.auth.signup.webidaSite;
- loginHandler(req, res)(null, user);
- });
- }
- });
- });*/
}
);
@@ -895,12 +726,21 @@ function (req, res) {
router.get('/webida/api/oauth/deleteaccount',
userdb.verifyToken,
function (req, res, next) {
- var aclInfo = {uid: req.user.uid, action: 'auth:deleteAccount', rsc: 'auth:*'};
- userdb.checkAuthorize(aclInfo, function (err) {
+ var uid = req.query.uid;
+ userdb.findUserByUid(uid, function (err, user) {
if (err) {
return res.sendfail(err);
+ } else if (user) {
+ var aclInfo = {uid: req.user.uid, action: 'auth:deleteAccount', rsc: 'auth:' + user.userId};
+ userdb.checkAuthorize(aclInfo, function (err) {
+ if (err) {
+ return res.sendfail(err);
+ }
+ next();
+ });
+ } else {
+ return res.send(400, utils.fail('Unknown user by uid: ' + uid));
}
- next();
});
},
function (req, res) {
@@ -912,52 +752,6 @@ router.get('/webida/api/oauth/deleteaccount',
return res.sendok();
}
});
- /*var sqlConn = userdb.getSqlConn();
- sqlConn.beginTransaction(function (err) {
- if (err) {
- var errMsg = 'deleteaccount error in db';
- errLog(errMsg, err);
- return res.sendfail(errMsg);
- }
-
- var uid = req.query.uid;
-
- async.waterfall([
- function (next) {
- userdb.deleteUser(uid, function (err) {
- if (err) {
- return next('deleteAccount deleteUser failed.');
- }
-
- return next(null);
- });
- }, function (next) {
- userdb.deleteAllPersonalTokens(uid, function (err) {
- if (err) {
- return next('deleteAccount deletePersonalToken failed.');
- }
- return next(null);
- });
- }
- ], function (err) {
- if (err) {
- sqlConn.rollback(function () {
- return res.sendfail(err);
- });
- } else {
- sqlConn.commit(function (err) {
- if (err) {
- sqlConn.rollback(function () {
- return res.sendfail('deleteAccount failed(server internal error)');
- });
- }
-
- req.logout();
- return res.sendok();
- });
- }
- });
- });*/
}
);
@@ -991,31 +785,6 @@ function updateUser(req, res) {
return res.sendok(updatedUser);
}
});
- /* var sqlConn = userdb.getSqlConn();
- sqlConn.beginTransaction(function (err) {
- if (err) {
- var errMsg = 'updateUser error in db';
- errLog(errMsg, err);
- return res.sendfail(errMsg);
- }
- userdb.updateUser(field, updateInfo, function (err, updatedUser) {
- if (err || !updatedUser) {
- sqlConn.rollback(function () {
- return res.sendfail(err);
- });
- } else {
- sqlConn.commit(function (err) {
- if (err) {
- sqlConn.rollback(function () {
- return res.sendfail('deleteAccount failed(server internal error)');
- });
- }
-
- return res.sendok(updatedUser);
- });
- }
- });
- });*/
}
router.post('/webida/api/oauth/updateuser2',
@@ -1034,16 +803,17 @@ router.post('/webida/api/oauth/updateuser',
logger.info('[auth] updateUser', authInfo, user);
async.waterfall([
function (cb) {
- if (authInfo.uid) {
+ if (authInfo.userId) {
return cb();
}
userdb.findUser({email: authInfo.email}, function (err, users) {
if (err || users.length === 0) {
- return res.sendfail(new ClientError('Unknown user'));
+ return res.sendfail(new ClientError('Unknown user: ' + authInfo.email));
}
authInfo.uid = users[0].uid;
+ authInfo.userId = users[0].userId;
return cb();
});
}, function (cb) {
@@ -1053,7 +823,7 @@ router.post('/webida/api/oauth/updateuser',
return cb();
}
- rsc = 'auth:' + authInfo.uid;
+ rsc = 'auth:' + authInfo.userId;
aclInfo = {uid: req.user.uid, action: 'auth:updateUser', rsc: rsc};
userdb.checkAuthorize(aclInfo, function (err) {
if (err) {
@@ -1071,46 +841,6 @@ router.post('/webida/api/oauth/updateuser',
});
},
updateUser
- /*
- function (req, res) {
- var authInfo = req.body;
- var user = req.user;
- var field = {};
-
- if (authInfo.email) {
- field.email = authInfo.email;
- } else {
- authInfo.uid = parseInt(authInfo.uid);
- field.uid = authInfo.uid;
- }
-
- if (authInfo.isAdmin && !user.isAdmin)
- return res.send(401, utils.fail('Cannot update the isAdmin field if you are not a admin user.'));
-
- sqlConn.beginTransaction(function (err) {
- if (err)
- return next(err);
-
- userdb.updateUser(field, authInfo, function (err, updatedUser) {
- if (err || !updatedUser) {
- sqlConn.rollback(function () {
- return res.sendfail(err);
- });
- } else {
- sqlConn.commit(function (err) {
- if (err) {
- sqlConn.rollback(function () {
- return res.sendfail('deleteAccount failed(server internal error)');
- });
- }
-
- return res.sendok(updatedUser);
- });
- }
- });
- });
- }
- */
);
router.post('/webida/api/oauth/signup',
@@ -1127,61 +857,6 @@ router.post('/webida/api/oauth/signup',
return res.sendok();
}
});
- /*var sqlConn = userdb.getSqlConn();
- sqlConn.beginTransaction(function (err) {
- if (err) {
- var errMsg = 'signup error in db';
- errLog(errMsg, err);
- return res.sendfail(errMsg);
- }
-
- async.waterfall([
- function (next) {
- var authinfo = {email: email, password: key, activationKey: key};
- userdb.findOrAddUser(authinfo, function (err, result) {
- return next(err);
- });
- },
- function (next) {
- var redirect = config.services.auth.signup.activatingURL + key;
- var emailBody = 'Welcome to Webida!!'
- + 'This is the sign up validation email to webida.org of ' + email + ','
- + 'Please click belows.
'
- + '' + redirect + '';
-
- var mailOptions = {
- from: config.services.auth.signup.emailSender,
- to: email,
- subject: 'Email validation check for webida.org signup',
- html: emailBody
- };
-
- sendEmail(mailOptions, function (err, data) {
- if (err) {
- return res.status(503).send('Failed to send activating email.');
- }
- return next();
- });
- }
- ],
- function (err) {
- if (err) {
- sqlConn.rollback(function () {
- return res.sendfail(err);
- });
- } else {
- sqlConn.commit(function (err) {
- if (err) {
- sqlConn.rollback(function () {
- return res.sendfail('deleteAccount failed(server internal error)');
- });
- }
-
- return res.sendok();
- });
- }
- });
- });*/
}
);
diff --git a/src/server/auth/lib/userdb.js b/src/server/auth/lib/userdb.js
index 1a60746..7d81239 100644
--- a/src/server/auth/lib/userdb.js
+++ b/src/server/auth/lib/userdb.js
@@ -112,11 +112,12 @@ exports.createGuestSequence = function (callback) {
}, context);
}
], function (err, context) {
- if (err)
+ if (err) {
logger.error(err);
+ }
callback(err, context.data('seq'));
});
-}
+};
function createSubject(type, callback) {
db.transaction([
@@ -326,7 +327,9 @@ exports.getPersonalTokens = function (uid, callback, context) {
};
exports.verifyToken = function (req, res, next) {
+ /* jshint camelcase: false */
var token = req.headers.authorization || url.parse(req.url, true).query.access_token;
+ /* jshint camelcase: true */
if (!token) {
req.user = null;
return next();
@@ -1360,7 +1363,7 @@ exports.setLastLogin = function (uid, callback) {
exports.checkAuthorize = function (aclInfo, callback) {
// if uid === owner then return true;
var rscArr;
- var idArr = [0, 1];
+ var idArr = ['0', '1'];
function makeRscArr(rsc) {
var rscArr = [
@@ -1734,7 +1737,12 @@ exports.createDefaultPolicy = function (user, callback, context) {
return next(null);
}, context);
}, function (next) {
- exports.createPolicy(user.uid, config.services.auth.defaultAuthPolicy, token, function (err, policy) {
+ var userId = (user.isAdmin === 1) ? '*' : user.userId;
+ var defaultAuthPolicy = _.clone(config.services.auth.defaultAuthPolicy);
+ defaultAuthPolicy.resource = defaultAuthPolicy.resource.map(function (rsc) {
+ return _.template(rsc)({userId: userId});
+ });
+ exports.createPolicy(user.uid, defaultAuthPolicy, token, function (err, policy) {
if (err) {
return next(new ServerError(500, 'Set default auth policy failed'));
}
diff --git a/src/server/common/log-manager.js b/src/server/common/log-manager.js
index 08509d0..8e7ddb0 100644
--- a/src/server/common/log-manager.js
+++ b/src/server/common/log-manager.js
@@ -19,16 +19,11 @@
var dateFormat = require('dateformat');
var confMgr = require('./conf-manager');
var config = confMgr.conf;
-var email = require('emailjs/email');
var winston = require('winston');
var dateFormat = require('dateformat');
var cluster = require('cluster');
var path = require('path');
-var now = new Date();
-var nowStr = dateFormat(now, "yyyymmdd_HHMMss");
-
-
function getModuleFilename() {
var mod = module;
while (mod.parent) {
@@ -38,10 +33,10 @@ function getModuleFilename() {
}
-var name = (typeof global.app !== 'undefined' && global.app.name) || getModuleFilename();
-name = path.basename(name, '.js');
+var moduleFileName = (typeof global.app !== 'undefined' && global.app.name) || getModuleFilename();
+moduleFileName = path.basename(moduleFileName, '.js');
-var logFileName = config.logPath + '/' + name + '.log';
+var logFileName = config.logPath + '/' + moduleFileName + '.log';
function curTime() {
return dateFormat(new Date(), 'yyyy-mm-dd hh:MM:ss-l');
@@ -75,7 +70,7 @@ if (cluster.isMaster) {
});
} else {
- console.log('(console) logger %s in child proc ...', name);
+ console.log('(console) logger %s in child proc ...', moduleFileName);
logger = new (winston.Logger) ({
transports: [
new (winston.transports.Console)({
@@ -93,7 +88,7 @@ if (cluster.isMaster) {
module.exports = logger;
module.exports.stream = {
- write: function(msg, encoding) {
+ write: function(msg/*, encoding*/) {
logger.info(msg);
}
};
@@ -106,30 +101,6 @@ module.exports.simpleLogger = function (tagMessage) {
if (req.url) { loggingText = loggingText + ' : ' + req.url; }
logger.debug(loggingText);
next();
- }
-}
-
-module.exports.sendEmail = function (username, password, host, isSecure, sender, receiver, subject, message, callback) {
- var server = email.server.connect( {
- user: username,
- password: password,
- host: host,
- ssl: isSecure
- });
-
- server.send( {
- text: message,
- from: sender,
- to: receiver,
- //cc: ,
- subject: subject
- }, function(error, response) {
- if (error) {
- logger.error('email send error:' + error);
- } else {
- logger.info('Email sent: ' + response);
- callback(response);
- }
- });
-}
+ };
+};
diff --git a/src/server/common/server-base.js b/src/server/common/server-base.js
deleted file mode 100644
index a0aeeb5..0000000
--- a/src/server/common/server-base.js
+++ /dev/null
@@ -1,306 +0,0 @@
-/*
- * Copyright (c) 2012-2015 S-Core Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-'use strict';
-
-var logger = require('./log-manager');
-var domain = require('domain');
-
-
-var serverDomain = domain.create();
-exports.serverDomain = serverDomain;
-
-serverDomain.on('error', function(err) {
- logger.error('--- Server Domain Error ---', err.stack);
-
- logger.sendEmail('no-reply@webida.org', 'webidascore','dsmtp.naver.com', true,
-'webida ', 'DaiYoung Kim , wooyoung cho , sangjin ',
- '[webida-server-notice] Server encountered an critical error and will be shutdown', err.stack, function (message) {
- logger.info('sent email: ', message);
- logger.info('Exit server process after sent email');
- process.exit(); // TODO : need to process a graceful closing
- });
-
- // if SMPT server is not response until timeout, then exit process.
- setTimeout(function() {
- logger.info('Exit server process by timeout');
- process.exit(); // TODO : need
- }, 1000 * 60);
-});
-
-var EventEmitter = require('events').EventEmitter;
-var express = require('express');
-var connectDomain = require('connect-domain');
-var corser = require('corser');
-var fs = require('fs');
-
-var utils = require('./utils');
-var config = require('./conf-manager').conf;
-var authMgr = require('./auth-manager');
-
-
-// set logger format
-express.logger.format('dev2', function (tokens, req, res) {
- var status = res.statusCode;
- var len = parseInt(res.getHeader('Content-Length'), 10);
- var color = 32;
-
- if (status >= 500) { color = 31; }
- else if (status >= 400) { color = 33; }
- else if (status >= 300) { color = 36; }
-
- len = isNaN(len) ? '' : len = ' - ' + len;
-
- return '\u001b[90m' +
- req.ip + ' ' +
- req.method + ' ' +
- req.originalUrl + ' ' + '\u001b[' + color + 'm' + res.statusCode +
- ' \u001b[90m' + (new Date() - req._startTime) + 'ms' + len + '\u001b[0m';
-});
-
-function gracefulExit() {
- process.exit();
-}
-
-process.on('SIGINT', function () {
- logger.info('gracefully shutting down from SIGINT (Crtl-C)');
- gracefulExit();
-});
-
-process.on('SIGTERM', function () {
- logger.info('gracefully shutting down from SIGTERM');
- gracefulExit();
-});
-
-
-// custom middlewares
-function urlParser(req, res, next) {
- req.parsedUrl = require('url').parse(req.url, true);
- next();
-}
-
-/*
- * http Svr class
- */
-
-var httpSvr = function(service, host, port, ioOptions) {
- this.host = host;
- this.port = port;
- this.app = express();
- this.lsn = null;
- this.service = service;
- this.ioOptions = ioOptions;
- //this.init();
-}
-
-httpSvr.prototype.init = function() {
- var self = this;
-
- if (this.ioOptions) {
- self.app.http(this.ioOptions).io();
- } else {
- self.app.http().io();
- }
-
- self.setupMiddleware(self.app);
- self.setupIo(self.app);
- logger.info('httpSvr::init()');
-}
-
-function setXFrameOption (req, res, next) {
- res.setHeader('X-Frame-Options', 'SAMEORIGIN');
- next();
-}
-
-httpSvr.prototype.setupMiddleware = function(app) {
- logger.info('httpSvr::setupMiddleware');
- app.use(connectDomain());
- app.enable('trust proxy');
- app.use(express.compress());
- app.use(express.json());
- app.use(express.urlencoded());
- app.use(setXFrameOption);
- app.use(corser.create(
- {
- methods: ['GET', 'POST', 'DELETE'],
- requestHeaders: ['Authorization', 'Accept', 'Accept-Language', 'Content-Language', 'Content-Type', 'Last-Event-ID'],
- supportsCredentials: true,
- maxAge: 86400 // as 1 day
- }
- ));
- app.options('/webida/api/*', function (req, res) {
- // Just finish preflight request.
- res.writeHead(204);
- res.end();
- });
- app.use(express.logger({stream:logger.stream}));
- app.use(urlParser);
- app.use(utils.senders);
- app.use(logger.simpleLogger('REQUEST'));
- app.use(utils.onConnectError);
-
-}
-
-httpSvr.prototype.setupIo = function(app) {
- app.io.configure(function() {
- app.io.enable('browser client minification'); // send minified client
- app.io.enable('browser client gzip'); // gzip the file
- //app.io.set('log level', 1); // reduce logging
- app.io.set('log level', 7); // reduce logging
- app.io.set('authorization', function (handshake, accept) {
- var accessToken = handshake.query.access_token;
- if (accessToken) {
- logger.debug('Socket.io auth', accessToken);
- authMgr._verifyToken(accessToken, function (err, user) {
- if (err) {
- logger.debug('Verifying access token failed', arguments, accessToken);
- accept('Verifying access token failed.', false);
- } else {
- accept(null, true);
- logger.debug('Vefified access token', user);
- handshake.user = user;
- }
- });
- } else {
- logger.debug('Authorization failed.(No access_token)');
- accept('Authorization failed.(No access_token)', false);
- }
- });
- });
-}
-
-httpSvr.prototype.start = function () {
- var self = this;
-
- self.init();
- self.lsn = self.app.listen(self.port, self.host, function () {
- logger.info('Http server listening on port: %d', self.port);
- });
- self.service.emit.emit('svrStarted', this);
-}
-
-function closeServer(lsn) {
- if (lsn) {
- lsn.close();
- lsn = null;
- }
-}
-
-httpSvr.prototype.stop = function() {
- closeServer(this.lsn);
- this.service.emit.emit('svrStopped', this);
-}
-
-exports.httpSvr = httpSvr;
-
-/*
- * Service class is collection of servers
- */
-
-function Service(servername) {
- this.name = servername;
- this.config = config;
- this.supportHttps = true;
- this.serverList = new Array();
- this.emit = new EventEmitter();
-
- var self = this;
- this.emit.on('svrStarted', function(svr) {
- self.svrStarted(svr);
- });
-
- this.emit.on('svrStopped', function() {
- self.svrStopped(svr);
- });
-}
-
-Service.prototype.addSvr = function(svr) {
- this.serverList.push(svr);
-}
-
-Service.prototype.getConfig = function () {
- return this.config;
-}
-/*
- * start service should start all servers
- * if you want change default behavior of this function, then do overwride.
- */
-Service.prototype.start = function () {
- var self = this;
-
- var http = new httpSvr(self, config.httpHost, config.httpPort);
- this.addSvr(http);
- http.start();
-
- if (self.config.httpsHost && self.config.httpsPort) {
- // Set ssl keys for http server
- var options = {
- key: fs.readFileSync(config.sslKeyPath, 'utf8'),
- cert: fs.readFileSync(config.sslCertPath, 'utf8')
- };
-
- var https = new httpSvr(self, config.httpsHost, config.httpsPort, options);
- this.addSvr(https);
- https.start();
- }
-}
-
-Service.prototype.started = function() {
- logger.info('started');
-}
-
-/*
- * stop service that shutdowns all servers
- */
-Service.prototype.stop = function() {
- logger.info('stopping server');
- for (var i=0; i']
},
defaultAppPolicy: {
diff --git a/src/server/conf/mapper/user-mapper.json5 b/src/server/conf/mapper/user-mapper.json5
index ac612ba..5c19ac4 100644
--- a/src/server/conf/mapper/user-mapper.json5
+++ b/src/server/conf/mapper/user-mapper.json5
@@ -61,7 +61,7 @@
{#where} \
{#if userId} AND user_id = {{userId}} {/if} \
{#if uid !== undefined} AND uid = {{uid}} {/if} \
- {#if email} AND email LIKE CONCAT('%', {{email}}, '%') {/if} \
+ {#if email} AND email = {{email}} {/if} \
{#if name} AND name LIKE CONCAT('%', {{name}}, '%') {/if} \
{#if company} AND company LIKE CONCAT('%', {{company}}, '%') {/if} \
{#if telephone} AND telephone LIKE CONCAT('%', {{telephone}}, '%') {/if} \
diff --git a/src/server/fs/lib/console-manager.js b/src/server/fs/lib/console-manager.js
index 9213e60..03a7c46 100644
--- a/src/server/fs/lib/console-manager.js
+++ b/src/server/fs/lib/console-manager.js
@@ -266,8 +266,7 @@ function handleNewEvent(socket, options, cb) {
}
/* find keyword */
- while ((state !== STATE.DONE) &&
- (pos = msg.indexOf(KEYWORD)) !== -1) {
+ while ((state !== STATE.DONE) && (pos = msg.indexOf(KEYWORD)) !== -1) {
/* parse & get cpid */
if (state === STATE.CPID) {
cpid = parseInt(msg.substr(0, pos));
diff --git a/src/server/package.json b/src/server/package.json
index 2b2b517..ba43ad5 100644
--- a/src/server/package.json
+++ b/src/server/package.json
@@ -1,7 +1,11 @@
{
"name": "webida-server",
- "version": "0.0.41",
+ "version": "1.5.0",
"main": "./unit-manager.js",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/webida/webida-server.git"
+ },
"dependencies": {
"dateformat": "1.0.11",
"connect-domain": "*",
@@ -9,7 +13,6 @@
"express-session": "1.9.1",
"http-proxy": "0.10.3",
"http-master": "~1.0.18",
- "session-file-store": "0.0.12",
"connect-sqlite3": "0.9.5",
"socket.io": "1.2.0",
"hashmap": "1.0.1",
@@ -18,10 +21,8 @@
"unzip": "0.1.9",
"fstream": "0.1.25",
"corser": "2.0.0",
- "emailjs": "*",
"optimist": "0.6.0",
"underscore": "1.5.2",
- "ncp": "0.4.2",
"request": "*",
"winston": "~1.1.2",
"querystring": "*",
@@ -37,7 +38,6 @@
"nexpect": "0.4.2",
"connect-ensure-login": "0.1.x",
"oauth2orize": "0.x.x",
- "cryptojs": "*",
"url": "*",
"passport-local": "0.1.x",
"passport-http": "0.2.x",
@@ -46,7 +46,6 @@
"ejs": "0.7.x",
"optimist": "*",
"underscore": "*",
- "ssh-keygen": "*",
"async": "*",
"jquery": "*",
"passport-github": "*",
@@ -61,8 +60,6 @@
"fs-extra": "0.8.1",
"pty.js": "0.2.7-1",
"q": "1.0.1",
- "q-io": "1.11.0",
- "ref": "0.1.3",
"send": "0.2.0",
"shortid": "2.2.2",
"tmp": "0.0.23",
@@ -72,7 +69,6 @@
"mkdirp": "0.5.0",
"guid": "0.0.12",
"replace": "0.2.9",
- "terminal.js": "^1.0.3",
"lodash": "3.9.3",
"data-mapper": "*",
"cron": "^1.0.9",
@@ -80,6 +76,7 @@
"node-watch": "~0.3.4"
},
"devDependencies": {
+ "q-io": "1.11.0",
"connect": "~2.13.0"
}
}