in src/blob/authentication/IBlobSASSignatureValues.ts [449:513]
function generateBlobSASSignature20150405(
blobSASSignatureValues: IBlobSASSignatureValues,
resource: BlobSASResourceType,
accountName: string,
sharedKey: Buffer
): [string, string] {
if (
!blobSASSignatureValues.identifier &&
(!blobSASSignatureValues.permissions && !blobSASSignatureValues.expiryTime)
) {
throw new RangeError(
// tslint:disable-next-line:max-line-length
"generateBlobSASSignature(): Must provide 'permissions' and 'expiryTime' for Blob SAS generation when 'identifier' is not provided."
);
}
const version = blobSASSignatureValues.version;
const verifiedPermissions = blobSASSignatureValues.permissions;
// Signature is generated on the un-url-encoded values.
const stringToSign = [
verifiedPermissions ? verifiedPermissions : "",
blobSASSignatureValues.startTime === undefined
? ""
: typeof blobSASSignatureValues.startTime === "string"
? blobSASSignatureValues.startTime
: truncatedISO8061Date(blobSASSignatureValues.startTime, false),
blobSASSignatureValues.expiryTime === undefined
? ""
: typeof blobSASSignatureValues.expiryTime === "string"
? blobSASSignatureValues.expiryTime
: truncatedISO8061Date(blobSASSignatureValues.expiryTime, false),
getCanonicalName(
accountName,
blobSASSignatureValues.containerName,
resource === BlobSASResourceType.Blob
? blobSASSignatureValues.blobName
: ""
),
blobSASSignatureValues.identifier, // TODO: ? blobSASSignatureValues.identifier : "",
blobSASSignatureValues.ipRange
? typeof blobSASSignatureValues.ipRange === "string"
? blobSASSignatureValues.ipRange
: ipRangeToString(blobSASSignatureValues.ipRange)
: "",
blobSASSignatureValues.protocol ? blobSASSignatureValues.protocol : "",
version,
blobSASSignatureValues.cacheControl
? blobSASSignatureValues.cacheControl
: "",
blobSASSignatureValues.contentDisposition
? blobSASSignatureValues.contentDisposition
: "",
blobSASSignatureValues.contentEncoding
? blobSASSignatureValues.contentEncoding
: "",
blobSASSignatureValues.contentLanguage
? blobSASSignatureValues.contentLanguage
: "",
blobSASSignatureValues.contentType ? blobSASSignatureValues.contentType : ""
].join("\n");
const signature = computeHMACSHA256(stringToSign, sharedKey);
return [signature, stringToSign];
}