UNPKG

oss-client

Version:

Aliyun OSS(Object Storage Service) Node.js Client

145 lines 12 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.buildCanonicalString = buildCanonicalString; exports.computeSignature = computeSignature; exports.authorization = authorization; exports.signatureForURL = signatureForURL; const node_util_1 = require("node:util"); const node_crypto_1 = __importDefault(require("node:crypto")); const encodeCallback_js_1 = require("./encodeCallback.js"); const debug = (0, node_util_1.debuglog)('oss-client:sign'); const OSS_PREFIX = 'x-oss-'; /** * build canonicalized resource * @see https://help.aliyun.com/zh/oss/developer-reference/include-signatures-in-the-authorization-header#section-rvv-dx2-xdb */ function buildCanonicalizedResource(resourcePath, parameters) { let canonicalizedResource = `${resourcePath}`; let separatorString = '?'; if (typeof parameters === 'string') { if (parameters.trim()) { canonicalizedResource += separatorString + parameters; } } else if (Array.isArray(parameters)) { parameters.sort(); canonicalizedResource += separatorString + parameters.join('&'); } else if (parameters) { const compareFunc = (entry1, entry2) => { if (entry1[0] > entry2[0]) { return 1; } else if (entry1[0] < entry2[0]) { return -1; } return 0; }; const processFunc = (key) => { canonicalizedResource += separatorString + key; if (parameters[key] || parameters[key] === 0) { canonicalizedResource += `=${parameters[key]}`; } separatorString = '&'; }; for (const key of Object.keys(parameters).sort(compareFunc)) { processFunc(key); } } debug('canonicalizedResource: %o', canonicalizedResource); return canonicalizedResource; } function lowercaseKeyHeader(headers) { const lowercaseHeaders = {}; if (headers) { for (const name in headers) { lowercaseHeaders[name.toLowerCase()] = headers[name]; } } return lowercaseHeaders; } function buildCanonicalString(method, resourcePath, request, expiresTimestamp) { const headers = lowercaseKeyHeader(request.headers); const headersToSign = {}; const signContent = [ method.toUpperCase(), headers['content-md5'] ?? '', headers['content-type'], expiresTimestamp || headers['x-oss-date'], ]; for (const key of Object.keys(headers)) { if (key.startsWith(OSS_PREFIX)) { headersToSign[key] = String(headers[key]).trim(); } } for (const key of Object.keys(headersToSign).sort()) { signContent.push(`${key}:${headersToSign[key]}`); } signContent.push(buildCanonicalizedResource(resourcePath, request.parameters)); return signContent.join('\n'); } function computeSignature(accessKeySecret, canonicalString) { const signature = node_crypto_1.default.createHmac('sha1', accessKeySecret); return signature.update(Buffer.from(canonicalString)).digest('base64'); } function authorization(accessKeyId, accessKeySecret, canonicalString) { // https://help.aliyun.com/zh/oss/developer-reference/include-signatures-in-the-authorization-header return `OSS ${accessKeyId}:${computeSignature(accessKeySecret, canonicalString)}`; } function signatureForURL(accessKeySecret, options, resource, expiresTimestamp) { const headers = {}; const subResource = options.subResource ?? {}; if (options.process) { subResource['x-oss-process'] = options.process; } if (options.trafficLimit) { subResource['x-oss-traffic-limit'] = `${options.trafficLimit}`; } if (options.response) { const customResponseHeaders = options.response; for (const k in customResponseHeaders) { subResource[`response-${k.toLowerCase()}`] = customResponseHeaders[k]; } } if (options['Content-MD5'] && !options['content-md5']) { options['content-md5'] = options['Content-MD5']; } if (options['Content-Md5'] && !options['content-md5']) { options['content-md5'] = options['Content-Md5']; } if (options['content-md5']) { headers['content-md5'] = options['content-md5']; } if (options['Content-Type'] && !options['content-type']) { options['content-type'] = options['Content-Type']; } if (options['content-type']) { headers['content-type'] = options['content-type']; } // copy other x-oss-* headers for (const key in options) { const lowerKey = key.toLowerCase(); if (lowerKey.startsWith('x-oss-')) { headers[lowerKey] = options[key]; } } if (options.callback) { const callbackOptions = (0, encodeCallback_js_1.encodeCallback)(options.callback); subResource.callback = callbackOptions.callback; if (callbackOptions.callbackVar) { subResource['callback-var'] = callbackOptions.callbackVar; } } const canonicalString = buildCanonicalString(options.method, resource, { headers, parameters: subResource, }, `${expiresTimestamp}`); return { Signature: computeSignature(accessKeySecret, canonicalString), subResource, }; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy91dGlsL3NpZ24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFnRUEsb0RBNkJDO0FBRUQsNENBTUM7QUFFRCxzQ0FPQztBQUVELDBDQXNFQztBQXRMRCx5Q0FBcUM7QUFDckMsOERBQWlDO0FBTWpDLDJEQUFxRDtBQUVyRCxNQUFNLEtBQUssR0FBRyxJQUFBLG9CQUFRLEVBQUMsaUJBQWlCLENBQUMsQ0FBQztBQUMxQyxNQUFNLFVBQVUsR0FBRyxRQUFRLENBQUM7QUFFNUI7OztHQUdHO0FBQ0gsU0FBUywwQkFBMEIsQ0FDakMsWUFBb0IsRUFDcEIsVUFBOEI7SUFFOUIsSUFBSSxxQkFBcUIsR0FBRyxHQUFHLFlBQVksRUFBRSxDQUFDO0lBQzlDLElBQUksZUFBZSxHQUFHLEdBQUcsQ0FBQztJQUUxQixJQUFJLE9BQU8sVUFBVSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQ25DLElBQUksVUFBVSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUM7WUFDdEIscUJBQXFCLElBQUksZUFBZSxHQUFHLFVBQVUsQ0FBQztRQUN4RCxDQUFDO0lBQ0gsQ0FBQztTQUFNLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1FBQ3JDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNsQixxQkFBcUIsSUFBSSxlQUFlLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsRSxDQUFDO1NBQU0sSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUN0QixNQUFNLFdBQVcsR0FBRyxDQUFDLE1BQWMsRUFBRSxNQUFjLEVBQUUsRUFBRTtZQUNyRCxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDMUIsT0FBTyxDQUFDLENBQUM7WUFDWCxDQUFDO2lCQUFNLElBQUksTUFBTSxD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