@nos-sdk/nos-node-sdk
Version:
NOS Node.js SDK实现了NOS对象操作接口,基于此SDK能方便快速地实现JavaScript应用程序来使用NOS的对象存储服务。
32 lines • 1.4 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const crypto_1 = require("crypto");
const ramda_1 = require("ramda");
const ramda_adjunct_1 = require("ramda-adjunct");
const resource_1 = require("./resource");
// lower-case header name
const normalizeHeaders = ramda_adjunct_1.renameKeysWith(ramda_1.toLower);
const canonicalizedHeaders = ramda_1.pipe(ramda_1.pickBy((_, key) => key.startsWith('x-nos-')), ramda_1.toPairs, ramda_1.sortBy(ramda_1.prop('0')), ramda_1.map(ramda_1.join(':')), ramda_1.join('\n'));
const normalizeDate = function (date) {
return new Date(date).toUTCString();
};
const joinParts = ramda_1.join('\n');
function signature(secretKey, verb, headers, resource) {
headers = normalizeHeaders(headers);
const contentMD5 = headers['content-md5'] || '';
const contentType = headers['content-type'] || '';
const date = normalizeDate(headers['date'] || Date.now());
const parts = [
verb.toUpperCase(),
contentMD5,
contentType,
date,
`${canonicalizedHeaders(headers)}\n${resource_1.getResourceString(resource)}`.trim(),
];
const hmac = crypto_1.createHmac('sha256', secretKey);
const content = joinParts(parts);
hmac.update(content);
return hmac.digest('base64');
}
exports.signature = signature;
//# sourceMappingURL=authorization.js.map