azure-storage
Version:
Microsoft Azure Storage Client Library for Node.js
219 lines (183 loc) • 6.39 kB
JavaScript
//
// 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.
//
/**
* In this sample, we demonstrate how to generate and use the blob level shared access signature and the container level
* shared access signature.
*
* In the blob level shared access signature sample, there are the following steps:
*
* 1. Create a container and a blob.
*
* 2. Generate a shared access signature for the blob and download the blob using it.
*
* 3. Upload a "ReadWrite" policy and a "Read" permission to the container.
*
* 4. Generate a shared access signature for the blob using the policy id and download the blob using it.
*/
var fs = require('fs');
var assert = require('assert');
var azure;
if (fs.existsSync('../../lib/azure-storage.js')) {
azure = require('../../lib/azure-storage');
} else {
azure = require('azure-storage');
}
var BlobUtilities = azure.BlobUtilities;
var container = 'container-sassample';
var blob = 'blob-sassample';
var blobService = azure.createBlobService();
// optionally set a proxy
/*var proxy = {
protocol: 'http:',
host: '127.0.0.1',
port: 8888
};
blobService.setProxy(proxy);
blobService2.setProxy(proxy);
*/
function sasSample () {
console.log('Starting sasSample.');
// Create the container.
createContainer(function () {
// Create a blob.
createBlob( function () {
// Create a shared access signature and use it to download the blob just created.
downloadBlobUsingSharedAccessSignature(function () {
// Add Shared Access policies to the container
createPolicies(function () {
// Use the read policy just created
usePermissions(function () {
// Delete the container
deleteContainer(function () {
console.log('Ending sasSample.');
});
});
});
});
});
});
}
function createContainer (callback) {
// Create the container.
blobService.createContainerIfNotExists(container, function (error) {
if (error) {
console.log(error);
} else {
console.log('Created the container ' + container);
callback();
}
});
}
function createBlob (callback) {
// Create the blob
blobService.createBlockBlobFromText(container, blob, 'test blob', function (error) {
if (error) {
console.log(error);
}
else {
console.log('Created the blob ' + container);
callback();
}
});
}
function downloadBlobUsingSharedAccessSignature (callback) {
var startDate = new Date();
var expiryDate = new Date(startDate);
expiryDate.setMinutes(startDate.getMinutes() + 5);
var sharedAccessPolicy = {
AccessPolicy: {
Permissions: BlobUtilities.SharedAccessPermissions.READ,
Start: startDate,
Expiry: expiryDate
}
};
var sharedAccessSignatureToken = blobService.generateSharedAccessSignature(container, blob, sharedAccessPolicy);
var sharedBlobService = azure.createBlobServiceWithSas(blobService.host, sharedAccessSignatureToken);
// Download the blob by using the shared access signature URL.
sharedBlobService.getBlobProperties(container, blob, function (error) {
if (error) {
console.log(error);
} else {
console.log('Downloaded the blob ' + blob + ' by using the shared access signature URL: \n ' + sharedBlobService.getUrl(container, blob, sharedAccessSignatureToken));
}
callback();
});
}
function createPolicies (callback) {
// Create a "ReadWrite" policy and a "Read" policy.
var readWriteStartDate = new Date();
var readWriteExpiryDate = new Date(readWriteStartDate);
readWriteExpiryDate.setMinutes(readWriteStartDate.getMinutes() + 10);
var signedIdentifiers = {
readwrite: {
Start: readWriteStartDate,
Expiry: readWriteExpiryDate,
Permissions: 'rw'
},
read: {
Expiry: readWriteStartDate,
Permissions: 'r'
}
};
// Wait 30 seconds for the container acl to be processed
var func = function () {
var options = { publicAccessLevel: BlobUtilities.BlobContainerPublicAccessType.CONTAINER };
blobService.setContainerAcl(container, signedIdentifiers, options, function(error) {
if (error) {
console.log(error);
} else {
console.log('Uploaded the permissions for the container ' + container);
callback();
}
});
};
setTimeout(func, 30000);
}
function usePermissions (callback) {
// Read, write the blob using the shared access signature from "ReadWrite" policy.
var readWriteAccessPolicy = {
Id: 'readwrite'
};
var headers = {
cacheControl: 'no-transform',
contentDisposition: 'attachment',
contentEncoding: 'gzip',
contentLanguage: 'tr,en',
contentType: 'text/html'
};
var sharedAccessSignatureToken = blobService.generateSharedAccessSignature(container, null, {Id: 'readwrite'}, headers);
var sharedBlobService = azure.createBlobServiceWithSas(blobService.host, sharedAccessSignatureToken);
sharedBlobService.getBlobProperties(container, blob, function (error, result) {
if (error) {
console.log(error);
} else {
console.log('Downloaded the blob ' + blob + ' by using the shared access signature URL: \n ' + sharedBlobService.getUrl(container, blob, sharedAccessSignatureToken));
}
callback();
});
}
function deleteContainer (callback) {
// Delete the container.
blobService.deleteContainerIfExists(container, function (error) {
if (error) {
console.log(error);
} else {
console.log('Deleted the container ' + container);
callback();
}
});
}
sasSample();