azurite
Version:
An open source Azure Storage API compatible server
117 lines • 5.14 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.generateAccountSASSignature = exports.SASProtocol = void 0;
const utils_1 = require("../utils/utils");
const IIPRange_1 = require("./IIPRange");
/**
* Protocols for generated SAS.
*
* @export
* @enum {number}
*/
var SASProtocol;
(function (SASProtocol) {
/**
* Protocol that allows HTTPS only
*/
SASProtocol["HTTPS"] = "https";
/**
* Protocol that allows both HTTPS and HTTP
*/
SASProtocol["HTTPSandHTTP"] = "https,http";
})(SASProtocol || (exports.SASProtocol = SASProtocol = {}));
/**
* Generates signature string from account SAS parameters.
*
* @see https://docs.microsoft.com/en-us/rest/api/storageservices/constructing-an-account-sas
*
* @param {SharedKeyCredential} sharedKeyCredential
* @param {string} accountName
* @param {Buffer} sharedKey
* @returns {[string, string]} signature and stringToSign
* @memberof IAccountSASSignatureValues
*/
function generateAccountSASSignature(accountSASSignatureValues, accountName, sharedKey) {
if (accountSASSignatureValues.version >= "2020-12-06") {
return generateAccountSASSignature20201206(accountSASSignatureValues, accountName, sharedKey);
}
else {
return generateAccountSASSignature20150405(accountSASSignatureValues, accountName, sharedKey);
}
}
exports.generateAccountSASSignature = generateAccountSASSignature;
function generateAccountSASSignature20201206(accountSASSignatureValues, accountName, sharedKey) {
const parsedPermissions = accountSASSignatureValues.permissions.toString();
const parsedServices = accountSASSignatureValues.services.toString();
const parsedResourceTypes = accountSASSignatureValues.resourceTypes.toString();
const parsedStartTime = accountSASSignatureValues.startTime === undefined
? ""
: typeof accountSASSignatureValues.startTime === "string"
? accountSASSignatureValues.startTime
: (0, utils_1.truncatedISO8061Date)(accountSASSignatureValues.startTime, false);
const parsedExpiryTime = typeof accountSASSignatureValues.expiryTime === "string"
? accountSASSignatureValues.expiryTime
: (0, utils_1.truncatedISO8061Date)(accountSASSignatureValues.expiryTime, false);
const parsedIPRange = accountSASSignatureValues.ipRange === undefined
? ""
: typeof accountSASSignatureValues.ipRange === "string"
? accountSASSignatureValues.ipRange
: (0, IIPRange_1.ipRangeToString)(accountSASSignatureValues.ipRange);
const parsedProtocol = accountSASSignatureValues.protocol === undefined
? ""
: accountSASSignatureValues.protocol;
const version = accountSASSignatureValues.version;
const encryptionScope = accountSASSignatureValues.encryptionScope;
const stringToSign = [
accountName,
parsedPermissions,
parsedServices,
parsedResourceTypes,
parsedStartTime,
parsedExpiryTime,
parsedIPRange,
parsedProtocol,
version,
encryptionScope,
"" // Account SAS requires an additional newline character
].join("\n");
const signature = (0, utils_1.computeHMACSHA256)(stringToSign, sharedKey);
return [signature, stringToSign];
}
function generateAccountSASSignature20150405(accountSASSignatureValues, accountName, sharedKey) {
const parsedPermissions = accountSASSignatureValues.permissions.toString();
const parsedServices = accountSASSignatureValues.services.toString();
const parsedResourceTypes = accountSASSignatureValues.resourceTypes.toString();
const parsedStartTime = accountSASSignatureValues.startTime === undefined
? ""
: typeof accountSASSignatureValues.startTime === "string"
? accountSASSignatureValues.startTime
: (0, utils_1.truncatedISO8061Date)(accountSASSignatureValues.startTime, false);
const parsedExpiryTime = typeof accountSASSignatureValues.expiryTime === "string"
? accountSASSignatureValues.expiryTime
: (0, utils_1.truncatedISO8061Date)(accountSASSignatureValues.expiryTime, false);
const parsedIPRange = accountSASSignatureValues.ipRange === undefined
? ""
: typeof accountSASSignatureValues.ipRange === "string"
? accountSASSignatureValues.ipRange
: (0, IIPRange_1.ipRangeToString)(accountSASSignatureValues.ipRange);
const parsedProtocol = accountSASSignatureValues.protocol === undefined
? ""
: accountSASSignatureValues.protocol;
const version = accountSASSignatureValues.version;
const stringToSign = [
accountName,
parsedPermissions,
parsedServices,
parsedResourceTypes,
parsedStartTime,
parsedExpiryTime,
parsedIPRange,
parsedProtocol,
version,
"" // Account SAS requires an additional newline character
].join("\n");
const signature = (0, utils_1.computeHMACSHA256)(stringToSign, sharedKey);
return [signature, stringToSign];
}
//# sourceMappingURL=IAccountSASSignatureValues.js.map
;