UNPKG

apinode

Version:

An API server that can greatly reduce the work needed to implment API services. It can also cooperate with other API node to make it a mesh of services.

107 lines (96 loc) 2.51 kB
/*! * cnode * authors: Ben Lue * Copyright(c) 2015 Gocharm Inc. */ var async = require('async'), soar = require('sql-soar'), errUtil = require('../../../util/errUtil.js'), tokenUtil = require('../../../util/tokenUtil.js'), userUtil = require('../util/userUtil.js'); var GUEST_USER_ID = 20; var _tsWindow = 60 * 24 * 60 * 60 * 1000; var tknExpr = soar.sql('UserToken') .filter({ op: 'and', filters: [ {name: 'GrpUser_id', op: '='}, {name: 'token', op: '='} ] }), tknCmd = {op: 'delete', expr: tknExpr}; exports.run = function(rt, cb) { var uPro = rt.uPro, userID = uPro.userID, query = { GrpUser_id: userID, token: uPro.token }; soar.execute(tknCmd, query, function(err) { if (err) cb( userUtil.internErr() ); else soar.query('GrpUser', {GrpUser_id: userID}, (err, user) => { if (err) cb( userUtil.internErr() ); async.waterfall([ (cb) => { if (user.multiLogin) cb(); else { // let's destroy the old token var randomNum = uPro.token.substring(16); userUtil.destroyToken(uPro.userID, randomNum, (err) => { cb(err); }); } }, (cb) => { var appData = rt.app, digest = tokenUtil.generateDigest( appData.appKey, appData.appSecret ); issueGuestToken(appData.CApp_id, digest, rt.remoteAddr, cb); } ], (err, result) => { if (err) { console.log( err.stack ); return cb( userUtil.internErr() ); } cb( result ); }); /* // let's destroy the old token var randomNum = uPro.token.substring(16); userUtil.destroyToken(uPro.userID, randomNum, function(err) { if (err) cb( userUtil.internErr() ); else { //cb({code: 0, message: 'Ok', token: false}); var appData = rt.app, digest = tokenUtil.generateDigest( appData.appKey, appData.appSecret ); issueGuestToken(appData.CApp_id, digest, rt.remoteAddr, cb); } }); */ }); }); }; function issueGuestToken(caID, digest, devID, cb) { var randomNum = tokenUtil.random(), token = digest + randomNum, tknValid = Date.now() + _tsWindow; tokenUtil.recordToken(caID, GUEST_USER_ID, randomNum, tknValid, devID, function(err, pk) { if (err) cb(err); else { var result = { code: 0, message: 'Ok', token: { token: token, validTo: tknValid } }; cb( null, result ); } }); };