azure-mobile-apps-files
Version:
Add simple yet powerful file storage capabilities to the azure-mobile-apps server.
56 lines (49 loc) • 2.34 kB
JavaScript
// ----------------------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
// ----------------------------------------------------------------------------
var permissions = require('./permissions'),
utilities = require('./utilities');
module.exports = {
construct: function(configuration, storage, operationName, defaultOperation) {
return function (req, res, next) {
var api = constructFilesApi(req.params.tableName, req.params.id),
table = utilities.caseInsensitiveProperty(configuration.tables, req.params.tableName);
if (!table || !table.files) {
next();
} else {
var configuredOperation = table.files[operationName],
result;
// if the table has an operation configured, use that, otherwise, use the default
if(configuredOperation)
result = configuredOperation(api, req.azureMobile);
else
result = defaultOperation(api, req);
// if we were returned a promise, await the results, otherwise just return the results
if(result && result.then && result.then.constructor === Function)
result.then(returnResults(res)).catch(next);
else
returnResults(res)(result);
}
};
// we can expose an api that doesn't require the user to specify the table name or id, we can pick these up from the route
function constructFilesApi(tableName, id) {
return {
token: function (permission, blobName) {
return storage.token(tableName, id, permission, blobName);
},
list: function () {
return storage.list(tableName, id);
},
delete: function (blobName) {
return storage.delete(tableName, id, blobName);
},
permissions: permissions
}
}
function returnResults(res) {
return function (results) {
res.status(200).json(results);
};
}
}
};