UNPKG

aliyun-sdk

Version:
75 lines (58 loc) 2.02 kB
var ALY = require('../core'); require('./rest'); require('./json'); function randomNumbers(count) { var num = ''; for (var i = 0; i < count; i++) { num += Math.floor(Math.random() * 10); } return num; } /** * @api private */ ALY.ServiceInterface.Pop = { buildRequest: function buildRequest(req) { ALY.ServiceInterface.Rest.buildRequest(req); ALY.ServiceInterface.Pop.populateBody(req); }, extractError: function extractError(resp) { ALY.ServiceInterface.Json.extractError(resp); }, extractData: function extractData(resp) { resp.data = JSON.parse(resp.httpResponse.body.toString()); }, populateBody: function populateBody(req) { req.httpRequest.headers['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8'; var body = req.params; var date = ALY.util.date.getDate(); body.Format = "JSON"; body.Version = req.service.api.apiVersion; body.AccessKeyId = req.service.config.accessKeyId; body.SignatureVersion = "1.0"; body.SignatureMethod = "HMAC-SHA1"; body.SignatureNonce = String(date.getTime()) + randomNumbers(4); body.Timestamp = ALY.util.date.iso8601(date); // sign var headers = []; ALY.util.each(body, function (name) { headers.push(name); }); headers.sort(function (a, b) { return a < b ? -1 : 1; }); var canonicalizedQueryString = ""; ALY.util.arrayEach.call(this, headers, function (name) { canonicalizedQueryString += "&" + name + "=" + ALY.util.popEscape(body[name]); }); var stringToSign = 'POST&%2F&' + ALY.util.popEscape(canonicalizedQueryString.substr(1)); body.Signature = ALY.util.crypto.hmac(req.service.config.secretAccessKey + '&', stringToSign, 'base64', 'sha1'); // body var bodyString = ALY.util.queryParamsToString(body); req.httpRequest.body = bodyString; }, buildJSON: function buildJSON(params, rules, api) { var builder = new ALY.JSON.Builder(rules, api); return builder.build(params); } };