function generateBlobSASSignature20150405()

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];
}