This repository has been archived by the owner on May 5, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 567
/
sharedkeylitetable.js
88 lines (76 loc) · 2.93 KB
/
sharedkeylitetable.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
//
// Copyright (c) Microsoft and contributors. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
//
// See the License for the specific language governing permissions and
// limitations under the License.
//
// Module dependencies.
var azureCommon = require('azure-common');
var azureutil = azureCommon.util;
var HmacSha256Sign = azureCommon.HmacSha256Sign;
var Constants = azureCommon.Constants;
var HeaderConstants = Constants.HeaderConstants;
var QueryStringConstants = Constants.QueryStringConstants;
/**
* Creates a new SharedKeyLiteTable object.
*
* @constructor
* @param {string} storageAccount The storage account.
* @param {string} storageAccessKey The storage account's access key.
* @param {bool} usePathStyleUri Boolean value indicating if the path, or the hostname, should include the storage account.
*/
function SharedKeyLiteTable(storageAccount, storageAccessKey, usePathStyleUri) {
this.storageAccount = storageAccount;
this.storageAccessKey = storageAccessKey;
this.usePathStyleUri = usePathStyleUri;
this.signer = new HmacSha256Sign(storageAccessKey);
}
/**
* Signs a request with the Authentication header.
*
* @param {WebResource} The webresource to be signed.
* @param {function(error)} callback The callback function.
* @return {undefined}
*/
SharedKeyLiteTable.prototype.signRequest = function (webResource, callback) {
var getvalueToAppend = function (value) {
if (azureutil.objectIsNull(value)) {
return '\n';
} else {
return value + '\n';
}
};
var stringToSign =
getvalueToAppend(webResource.headers[HeaderConstants.DATE_HEADER]) +
this._getCanonicalizedResource(webResource);
var signature = this.signer.sign(stringToSign);
webResource.withHeader(HeaderConstants.AUTHORIZATION, 'SharedKeyLite ' + this.storageAccount + ':' + signature);
callback(null);
};
/*
* Retrieves the webresource's canonicalized resource string.
* @param {WebResource} webResource The webresource to get the canonicalized resource string from.
* @return {string} The canonicalized resource string.
*/
SharedKeyLiteTable.prototype._getCanonicalizedResource = function (webResource) {
var path = '/';
if (webResource.path) {
path = webResource.path;
}
var canonicalizedResource = '/' + this.storageAccount + path;
var queryStringValues = webResource.queryString;
if (queryStringValues[QueryStringConstants.COMP]) {
canonicalizedResource += '?comp=' + queryStringValues[QueryStringConstants.COMP];
}
return canonicalizedResource;
};
module.exports = SharedKeyLiteTable;