azurite
Version:
A lightweight server clone of Azure Blob Storage that simulates most of the commands supported by it with minimal dependencies.
56 lines (50 loc) • 1.99 kB
JavaScript
;
const storageManager = require('./../StorageManager'),
Container = require('./../model/Container'),
ContainerHttpProperties = require('./../model/ContainerHttpProperties');
class CreateContainer {
constructor() {
}
process(req, res) {
const containerName = req.params.container;
let containerModel = this._buildContainerModel(req, containerName);
storageManager.createContainer(containerModel)
.then((result) => {
console.log(`Successfully created container "${containerName}"`);
this._addResponseHeaders(res, containerModel.httpProps)
res.status(200).send();
})
.catch((e) => {
if (e.code === "EEXIST") {
console.error(`Container ${containerName} already exists.`);
res.status(409).send();
} else {
res.status(500).send();
// We throw and thus abort this process since our database might be corrupted.
throw e;
}
});
}
_buildContainerModel(req, containerName) {
let optional = {};
if(req.headers['x-ms-blob-public-access']) {
optional.access = req.headers['x-ms-blob-public-access'];
}
let container = new Container(containerName, new ContainerHttpProperties(), {}, optional);
Object.keys(req.headers).forEach((key) => {
let value = req.headers[key];
if (key.indexOf('x-ms-meta') !== -1) {
container.metaProps[key] = value;
}
});
return container;
}
_addResponseHeaders(res, props) {
res.set({
'ETag': props.ETag,
'Last-Modified': props.lastModified,
'x-ms-version': '2011-08-18',
});
}
}
module.exports = new CreateContainer();