UNPKG

abacus-account-stub

Version:
149 lines (121 loc) 12.6 kB
'use strict'; // Stub for an account management service. An account is a collection of // organizations managed by a single billing entity. Usage is aggregated at the // account level (in addition to organization level) to provide billing systems // with the usage data they need for billing. var _regeneratorRuntime = require('babel-runtime/regenerator')['default']; var _ = require('underscore'); var webapp = require('abacus-webapp'); var router = require('abacus-router'); var oauth = require('abacus-cfoauth'); var schemas = require('abacus-usage-schemas'); var extend = _.extend; /* jshint noyield: true */ // Setup debug log var debug = require('abacus-debug')('abacus-account-stub'); // Secure the routes or not var secured = function secured() { return process.env.SECURED === 'true' ? true : false; }; // Create an express router var routes = router(); // The fake test account returned by the stub var fake = { account_id: '1234', organizations: ['a3d7fe4d-3cb1-4cc3-a831-ffe98e20cf27', 'b3d7fe4d-3cb1-4cc3-a831-ffe98e20cf28', 'c3d7fe4d-3cb1-4cc3-a831-ffe98e20cf29'], pricing_country: 'USA' }; // Retrieve and return an account routes.get('/v1/accounts/:account_id', _regeneratorRuntime.mark(function callee$0$0(req) { return _regeneratorRuntime.wrap(function callee$0$0$(context$1$0) { while (1) switch (context$1$0.prev = context$1$0.next) { case 0: debug('Retrieving account %s', req.params.account_id); // This is a stub here so we always succeed and return our fake account return context$1$0.abrupt('return', { status: 200, body: extend({}, fake, { account_id: req.params.account_id }) }); case 2: case 'end': return context$1$0.stop(); } }, callee$0$0, this); })); // Retrieve and return the account containing the given org routes.get('/v1/orgs/:org_id/account', _regeneratorRuntime.mark(function callee$0$0(req) { return _regeneratorRuntime.wrap(function callee$0$0$(context$1$0) { while (1) switch (context$1$0.prev = context$1$0.next) { case 0: debug('Retrieving account containing org %s', req.params.org_id); // This is a stub here so we always succeed and return our fake account return context$1$0.abrupt('return', { status: 200, body: extend({}, fake, { organizations: [req.params.org_id] }) }); case 2: case 'end': return context$1$0.stop(); } }, callee$0$0, this); })); // Load and return a resource price config var config = function config(rid, time) { try { return require('./resources/' + rid); } catch (e) { return undefined; } }; // Return the resource price configuration for a particular resource id and // effective time (allowing evolution of prices over time, where different // versions of the price configuration will be used at different // points in time) routes.get('/v1/pricing/resources/:resource_id/config/:time', _regeneratorRuntime.mark(function callee$0$0(req) { var conf; return _regeneratorRuntime.wrap(function callee$0$0$(context$1$0) { while (1) switch (context$1$0.prev = context$1$0.next) { case 0: debug('Retrieving resource price config %s at time %d', req.params.resource_id, req.params.time); // This is a stub here so we just return our sample resource price // configs conf = config(req.params.resource_id, parseInt(req.params.time)); if (conf) { context$1$0.next = 4; break; } return context$1$0.abrupt('return', { status: 404 }); case 4: // Validate and return the resource price config schemas.priceConfig.validate(conf); return context$1$0.abrupt('return', { status: 200, body: require('./resources/' + req.params.resource_id) }); case 6: case 'end': return context$1$0.stop(); } }, callee$0$0, this); })); // Create an account info service app var accounts = function accounts() { // Create the Webapp var app = webapp(); // Secure accounts, orgs, pricing and batch routes using an OAuth // bearer access token if (secured()) app.use(/^\/v1\/(accounts|orgs|pricing)|^\/batch$/, oauth.validator(process.env.JWTKEY, process.env.JWTALGO)); app.use(routes); app.use(router.batch(app)); return app; }; // Command line interface, create the app and listen var runCLI = function runCLI() { return accounts().listen(); }; // Export our public functions module.exports = accounts; module.exports.runCLI = runCLI; //# sourceMappingURL=data:application/json;base64,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QzVCO0FBQ0wsZ0JBQU0sRUFBRSxHQUFHO0FBQ1gsY0FBSSxFQUFFLE9BQU8sQ0FBQyxjQUFjLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUM7U0FDdkQ7Ozs7Ozs7Q0FDRixFQUFDLENBQUM7OztBQUdMLElBQU0sUUFBUSxHQUFHLFNBQVgsUUFBUSxHQUFTOztBQUVyQixNQUFNLEdBQUcsR0FBRyxNQUFNLEVBQUUsQ0FBQzs7OztBQUlyQixNQUFJLE9BQU8sRUFBRSxFQUNYLEdBQUcsQ0FBQyxHQUFHLENBQUMsMENBQTBDLEVBQ2hELEtBQUssQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDOztBQUU5RCxLQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ2hCLEtBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzNCLFNBQU8sR0FBRyxDQUFDO0NBQ1osQ0FBQzs7O0FBR0YsSUFBTSxNQUFNLEdBQUcsU0FBVCxNQUFNO1NBQVMsUUFBUSxFQUFFLENBQUMsTUFBTSxFQUFFO0NBQUEsQ0FBQzs7O0FBR3pDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsUUFBUSxDQUFDO0FBQzFCLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyIsImZpbGUiOiJpbmRleC5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLy8gU3R1YiBmb3IgYW4gYWNjb3VudCBtYW5hZ2VtZW50IHNlcnZpY2UuIEFuIGFjY291bnQgaXMgYSBjb2xsZWN0aW9uIG9mXG4vLyBvcmdhbml6YXRpb25zIG1hbmFnZWQgYnkgYSBzaW5nbGUgYmlsbGluZyBlbnRpdHkuIFVzYWdlIGlzIGFnZ3JlZ2F0ZWQgYXQgdGhlXG4vLyBhY2NvdW50IGxldmVsIChpbiBhZGRpdGlvbiB0byBvcmdhbml6YXRpb24gbGV2ZWwpIHRvIHByb3ZpZGUgYmlsbGluZyBzeXN0ZW1zXG4vLyB3aXRoIHRoZSB1c2FnZSBkYXRhIHRoZXkgbmVlZCBmb3IgYmlsbGluZy5cblxuY29uc3QgXyA9IHJlcXVpcmUoJ3VuZGVyc2NvcmUnKTtcbmNvbnN0IHdlYmFwcCA9IHJlcXVpcmUoJ2FiYWN1cy13ZWJhcHAnKTtcbmNvbnN0IHJvdXRlciA9IHJlcXVpcmUoJ2FiYWN1cy1yb3V0ZXInKTtcbmNvbnN0IG9hdXRoID0gcmVxdWlyZSgnYWJhY3VzLWNmb2F1dGgnKTtcbmNvbnN0IHNjaGVtYXMgPSByZXF1aXJlKCdhYmFjdXMtdXNhZ2Utc2NoZW1hcycpO1xuXG5jb25zdCBleHRlbmQgPSBfLmV4dGVuZDtcblxuLyoganNoaW50IG5veWllbGQ6IHRydWUgKi9cblxuLy8gU2V0dXAgZGVidWcgbG9nXG5jb25zdCBkZWJ1ZyA9IHJlcXVpcmUoJ2FiYWN1cy1kZWJ1ZycpKCdhYmFjdXMtYWNjb3VudC1zdHViJyk7XG5cbi8vIFNlY3VyZSB0aGUgcm91dGVzIG9yIG5vdFxuY29uc3Qgc2VjdXJlZCA9ICgpID0+IHByb2Nlc3MuZW52LlNFQ1VSRUQgPT09ICd0cnVlJyA/IHRydWUgOiBmYWxzZTtcblxuLy8gQ3JlYXRlIGFuIGV4cHJlc3Mgcm91dGVyXG5jb25zdCByb3V0ZXMgPSByb3V0ZXIoKTtcblxuLy8gVGhlIGZha2UgdGVzdCBhY2NvdW50IHJldHVybmVkIGJ5IHRoZSBzdHViXG5jb25zdCBmYWtlID0ge1xuICBhY2NvdW50X2lkOiAnMTIzNCcsXG4gIG9yZ2FuaXphdGlvbnM6IFtcbiAgICAnYTNkN2ZlNGQtM2NiMS00Y2MzLWE4MzEtZmZlOThlMjBjZjI3JyxcbiAgICAnYjNkN2ZlNGQtM2NiMS00Y2MzLWE4MzEtZmZlOThlMjBjZjI4JyxcbiAgICAnYzNkN2ZlNGQtM2NiMS00Y2MzLWE4MzEtZmZlOThlMjBjZjI5J10sXG4gIHByaWNpbmdfY291bnRyeTogJ1VTQSdcbn07XG5cbi8vIFJldHJpZXZlIGFuZCByZXR1cm4gYW4gYWNjb3VudFxucm91dGVzLmdldCgnL3YxL2FjY291bnRzLzphY2NvdW50X2lkJywgZnVuY3Rpb24gKihyZXEpIHtcbiAgZGVidWcoJ1JldHJpZXZpbmcgYWNjb3VudCAlcycsIHJlcS5wYXJhbXMuYWNjb3VudF9pZCk7XG5cbiAgLy8gVGhpcyBpcyBhIHN0dWIgaGVyZSBzbyB3ZSBhbHdheXMgc3VjY2VlZCBhbmQgcmV0dXJuIG91ciBmYWtlIGFjY291bnRcbiAgcmV0dXJuIHtcbiAgICBzdGF0dXM6IDIwMCxcbiAgICBib2R5OiBleHRlbmQoe30sIGZha2UsIHsgYWNjb3VudF9pZDogcmVxLnBhcmFtcy5hY2NvdW50X2lkIH0pXG4gIH07XG59KTtcblxuLy8gUmV0cmlldmUgYW5kIHJldHVybiB0aGUgYWNjb3VudCBjb250YWluaW5nIHRoZSBnaXZlbiBvcmdcbnJvdXRlcy5nZXQoJy92MS9vcmdzLzpvcmdfaWQvYWNjb3VudCcsIGZ1bmN0aW9uICoocmVxKSB7XG4gIGRlYnVnKCdSZXRyaWV2aW5nIGFjY291bnQgY29udGFpbmluZyBvcmcgJXMnLCByZXEucGFyYW1zLm9yZ19pZCk7XG5cbiAgLy8gVGhpcyBpcyBhIHN0dWIgaGVyZSBzbyB3ZSBhbHdheXMgc3VjY2VlZCBhbmQgcmV0dXJuIG91ciBmYWtlIGFjY291bnRcbiAgcmV0dXJuIHtcbiAgICBzdGF0dXM6IDIwMCxcbiAgICBib2R5OiBleHRlbmQoe30sIGZha2UsIHsgb3JnYW5pemF0aW9uczogW3JlcS5wYXJhbXMub3JnX2lkXSB9KVxuICB9O1xufSk7XG5cbi8vIExvYWQgYW5kIHJldHVybiBhIHJlc291cmNlIHByaWNlIGNvbmZpZ1xuY29uc3QgY29uZmlnID0gKHJpZCwgdGltZSkgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiByZXF1aXJlKCcuL3Jlc291cmNlcy8nICsgcmlkKTtcbiAgfVxuICBjYXRjaChlKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufTtcblxuLy8gUmV0dXJuIHRoZSByZXNvdXJjZSBwcmljZSBjb25maWd1cmF0aW9uIGZvciBhIHBhcnRpY3VsYXIgcmVzb3VyY2UgaWQgYW5kXG4vLyBlZmZlY3RpdmUgdGltZSAoYWxsb3dpbmcgZXZvbHV0aW9uIG9mIHByaWNlcyBvdmVyIHRpbWUsIHdoZXJlIGRpZmZlcmVudFxuLy8gdmVyc2lvbnMgb2YgdGhlIHByaWNlIGNvbmZpZ3VyYXRpb24gd2lsbCBiZSB1c2VkIGF0IGRpZmZlcmVudFxuLy8gcG9pbnRzIGluIHRpbWUpXG5yb3V0ZXMuZ2V0KFxuICAnL3YxL3ByaWNpbmcvcmVzb3VyY2VzLzpyZXNvdXJjZV9pZC9jb25maWcvOnRpbWUnLCBmdW5jdGlvbiAqKHJlcSkge1xuICAgIGRlYnVnKCdSZXRyaWV2aW5nIHJlc291cmNlIHByaWNlIGNvbmZpZyAlcyBhdCB0aW1lICVkJyxcbiAgICAgIHJlcS5wYXJhbXMucmVzb3VyY2VfaWQsIHJlcS5wYXJhbXMudGltZSk7XG5cbiAgICAvLyBUaGlzIGlzIGEgc3R1YiBoZXJlIHNvIHdlIGp1c3QgcmV0dXJuIG91ciBzYW1wbGUgcmVzb3VyY2UgcHJpY2VcbiAgICAvLyBjb25maWdzXG4gICAgY29uc3QgY29uZiA9IGNvbmZpZyhyZXEucGFyYW1zLnJlc291cmNlX2lkLCBwYXJzZUludChyZXEucGFyYW1zLnRpbWUpKTtcbiAgICBpZighY29uZilcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN0YXR1czogNDA0XG4gICAgICB9O1xuXG4gICAgLy8gVmFsaWRhdGUgYW5kIHJldHVybiB0aGUgcmVzb3VyY2UgcHJpY2UgY29uZmlnXG4gICAgc2NoZW1hcy5wcmljZUNvbmZpZy52YWxpZGF0ZShjb25mKTtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhdHVzOiAyMDAsXG4gICAgICBib2R5OiByZXF1aXJlKCcuL3Jlc291cmNlcy8nICsgcmVxLnBhcmFtcy5yZXNvdXJjZV9pZClcbiAgICB9O1xuICB9KTtcblxuLy8gQ3JlYXRlIGFuIGFjY291bnQgaW5mbyBzZXJ2aWNlIGFwcFxuY29uc3QgYWNjb3VudHMgPSAoKSA9PiB7XG4gIC8vIENyZWF0ZSB0aGUgV2ViYXBwXG4gIGNvbnN0IGFwcCA9IHdlYmFwcCgpO1xuXG4gIC8vIFNlY3VyZSBhY2NvdW50cywgb3JncywgcHJpY2luZyBhbmQgYmF0Y2ggcm91dGVzIHVzaW5nIGFuIE9BdXRoXG4gIC8vIGJlYXJlciBhY2Nlc3MgdG9rZW5cbiAgaWYgKHNlY3VyZWQoKSlcbiAgICBhcHAudXNlKC9eXFwvdjFcXC8oYWNjb3VudHN8b3Jnc3xwcmljaW5nKXxeXFwvYmF0Y2gkLyxcbiAgICAgIG9hdXRoLnZhbGlkYXRvcihwcm9jZXNzLmVudi5KV1RLRVksIHByb2Nlc3MuZW52LkpXVEFMR08pKTtcblxuICBhcHAudXNlKHJvdXRlcyk7XG4gIGFwcC51c2Uocm91dGVyLmJhdGNoKGFwcCkpO1xuICByZXR1cm4gYXBwO1xufTtcblxuLy8gQ29tbWFuZCBsaW5lIGludGVyZmFjZSwgY3JlYXRlIHRoZSBhcHAgYW5kIGxpc3RlblxuY29uc3QgcnVuQ0xJID0gKCkgPT4gYWNjb3VudHMoKS5saXN0ZW4oKTtcblxuLy8gRXhwb3J0IG91ciBwdWJsaWMgZnVuY3Rpb25zXG5tb2R1bGUuZXhwb3J0cyA9IGFjY291bnRzO1xubW9kdWxlLmV4cG9ydHMucnVuQ0xJID0gcnVuQ0xJO1xuIl19