in src/table/authentication/ITableSASSignatureValues.ts [127:185]
function generateTableSASSignature20181109(
tableSASSignatureValues: ITableSASSignatureValues,
accountName: string,
sharedKey: Buffer
): [string, string] {
if (
!tableSASSignatureValues.identifier &&
(!tableSASSignatureValues.permissions &&
!tableSASSignatureValues.expiryTime)
) {
throw new RangeError(
// tslint:disable-next-line:max-line-length
"generateTableSASSignature(): Must provide 'permissions' and 'expiryTime' for Table SAS generation when 'identifier' is not provided."
);
}
const version = tableSASSignatureValues.version;
const verifiedPermissions = tableSASSignatureValues.permissions;
// Signature is generated on the un-url-encoded values.
// TODO: Check whether validating the snapshot is necessary.
const stringToSign = [
verifiedPermissions ? verifiedPermissions : "",
tableSASSignatureValues.startTime === undefined
? ""
: typeof tableSASSignatureValues.startTime === "string"
? tableSASSignatureValues.startTime
: truncatedISO8061Date(tableSASSignatureValues.startTime, false),
tableSASSignatureValues.expiryTime === undefined
? ""
: typeof tableSASSignatureValues.expiryTime === "string"
? tableSASSignatureValues.expiryTime
: truncatedISO8061Date(tableSASSignatureValues.expiryTime, false),
getCanonicalName(accountName, tableSASSignatureValues.tableName),
tableSASSignatureValues.identifier, // TODO: ? tableSASSignatureValues.identifier : "",
tableSASSignatureValues.ipRange
? typeof tableSASSignatureValues.ipRange === "string"
? tableSASSignatureValues.ipRange
: ipRangeToString(tableSASSignatureValues.ipRange)
: "",
tableSASSignatureValues.protocol ? tableSASSignatureValues.protocol : "",
version,
tableSASSignatureValues.startingPartitionKey
? tableSASSignatureValues.startingPartitionKey
: "",
tableSASSignatureValues.startingRowKey
? tableSASSignatureValues.startingRowKey
: "",
tableSASSignatureValues.endingPartitionKey
? tableSASSignatureValues.endingPartitionKey
: "",
tableSASSignatureValues.endingRowKey
? tableSASSignatureValues.endingRowKey
: ""
].join("\n");
const signature = computeHMACSHA256(stringToSign, sharedKey);
return [signature, stringToSign];
}