yf-fpm-server
Version:
yf fast-platform api server
116 lines (92 loc) • 2.71 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _lodash = require('lodash');
var _lodash2 = _interopRequireDefault(_lodash);
var _exception = require('../utils/exception.js');
var _kit = require('../utils/kit');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
const ARG_ARRAY = 'method,appkey,timestamp,sign'.split(',');
let compare = ctx => {
let postData = ctx.request.body;
let dev = ctx.fpm.getConfig('dev') || 'DEV';
let apps = ctx.fpm.getClients();
let checkResult = checkArgs(postData, dev, apps);
if (checkResult.errno !== true) {
return checkResult;
}
let method = postData.method;
let appkey = postData.appkey;
let v = postData.v || ctx.fpm.getConfig('defaultVersion');
let timestamp = postData.timestamp;
timestamp = parseInt(timestamp);
if ('DEV' != dev) {
let delta = _lodash2.default.now() - timestamp;
if (Math.abs(delta / 100 / 60) > 30) {
return _exception.E.System.TIMEZONE_OVER;
}
}
let param = postData.param;
if (_lodash2.default.isString(param)) {
try {
param = JSON.parse(param);
} catch (e) {
return _exception.E.System.PARAM_IS_NOT_JSON;
}
}
return true;
};
let checkArgs = (args, dev, apps) => {
if (!args) {
return _exception.E.System.NO_POST_DATA;
}
for (let i in ARG_ARRAY) {
let a = ARG_ARRAY[i];
if (!_lodash2.default.has(args, a)) {
return _exception.E.System.LOST_PARAM(a);
}
}
if ('DEV' === dev) {
return true;
}
if (sign(args, apps)) {
return true;
}
return _exception.E.System.SIGN_ERROR;
};
let sign = (args, apps) => {
let sign = args.sign;
delete args.sign;
if (apps) {
args.masterKey = apps[args.appkey].secretkey;
} else {
args.masterKey = '123';
}
let ks = _lodash2.default.keys(args);
ks = ks.sort();
let strArgs = _lodash2.default.map(ks, k => {
let val = args[k];
if (_lodash2.default.isObject(val)) {
val = JSON.stringify(val);
}
return k + '=' + encodeURIComponent(val);
});
let content = strArgs.join('&');
let d = (0, _kit.md5)(content);
return d == sign;
};
exports.default = async (ctx, next) => {
let req = ctx.request;
let path = req.url;
if (path === '/api') {
let judgeResult = compare(ctx);
if (judgeResult === true) {
await next();
} else {
ctx.fail(judgeResult);
}
} else {
await next();
}
};