UNPKG

abacus-account-stub

Version:
155 lines (127 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 _ = require('underscore'); var webapp = require('abacus-webapp'); var router = require('abacus-router'); var oauth = require('abacus-oauth'); 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(req) { return regeneratorRuntime.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.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.abrupt('return', { status: 200, body: extend({}, fake, { account_id: req.params.account_id }) }); case 2: case 'end': return _context.stop(); } } }, _callee, this); })); // Retrieve and return the account containing the given org routes.get('/v1/orgs/:org_id/account', regeneratorRuntime.mark(function _callee2(req) { return regeneratorRuntime.wrap(function _callee2$(_context2) { while (1) { switch (_context2.prev = _context2.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 _context2.abrupt('return', { status: 200, body: extend({}, fake, { organizations: [req.params.org_id] }) }); case 2: case 'end': return _context2.stop(); } } }, _callee2, 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 _callee3(req) { var conf; return regeneratorRuntime.wrap(function _callee3$(_context3) { while (1) { switch (_context3.prev = _context3.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) { _context3.next = 4; break; } return _context3.abrupt('return', { status: 404 }); case 4: // Validate and return the resource price config schemas.priceConfig.validate(conf); return _context3.abrupt('return', { status: 200, body: require('./resources/' + req.params.resource_id) }); case 6: case 'end': return _context3.stop(); } } }, _callee3, 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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OzRDQUM1QjtBQUNMLGtCQUFNLEVBQUUsR0FBRztBQUNYLGdCQUFJLEVBQUUsT0FBTyxDQUFDLGNBQWMsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQztXQUN2RDs7Ozs7Ozs7Q0FDRixFQUFDOzs7QUFBQyxBQUdMLElBQU0sUUFBUSxHQUFHLFNBQVgsUUFBUSxHQUFTOztBQUVyQixNQUFNLEdBQUcsR0FBRyxNQUFNLEVBQUU7Ozs7QUFBQyxBQUlyQixNQUFJLE9BQU8sRUFBRSxFQUNYLEdBQUcsQ0FBQyxHQUFHLENBQUMsMENBQTBDLEVBQ2hELEtBQUssQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDOztBQUU5RCxLQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ2hCLEtBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDOztBQUUzQixTQUFPLEdBQUcsQ0FBQztDQUNaOzs7QUFBQyxBQUdGLElBQU0sTUFBTSxHQUFHLFNBQVQsTUFBTTtTQUFTLFFBQVEsRUFBRSxDQUFDLE1BQU0sRUFBRTtDQUFBOzs7QUFBQyxBQUd6QyxNQUFNLENBQUMsT0FBTyxHQUFHLFFBQVEsQ0FBQztBQUMxQixNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMiLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8vIFN0dWIgZm9yIGFuIGFjY291bnQgbWFuYWdlbWVudCBzZXJ2aWNlLiBBbiBhY2NvdW50IGlzIGEgY29sbGVjdGlvbiBvZlxuLy8gb3JnYW5pemF0aW9ucyBtYW5hZ2VkIGJ5IGEgc2luZ2xlIGJpbGxpbmcgZW50aXR5LiBVc2FnZSBpcyBhZ2dyZWdhdGVkIGF0IHRoZVxuLy8gYWNjb3VudCBsZXZlbCAoaW4gYWRkaXRpb24gdG8gb3JnYW5pemF0aW9uIGxldmVsKSB0byBwcm92aWRlIGJpbGxpbmcgc3lzdGVtc1xuLy8gd2l0aCB0aGUgdXNhZ2UgZGF0YSB0aGV5IG5lZWQgZm9yIGJpbGxpbmcuXG5cbmNvbnN0IF8gPSByZXF1aXJlKCd1bmRlcnNjb3JlJyk7XG5jb25zdCB3ZWJhcHAgPSByZXF1aXJlKCdhYmFjdXMtd2ViYXBwJyk7XG5jb25zdCByb3V0ZXIgPSByZXF1aXJlKCdhYmFjdXMtcm91dGVyJyk7XG5jb25zdCBvYXV0aCA9IHJlcXVpcmUoJ2FiYWN1cy1vYXV0aCcpO1xuY29uc3Qgc2NoZW1hcyA9IHJlcXVpcmUoJ2FiYWN1cy11c2FnZS1zY2hlbWFzJyk7XG5cbmNvbnN0IGV4dGVuZCA9IF8uZXh0ZW5kO1xuXG4vKiBqc2hpbnQgbm95aWVsZDogdHJ1ZSAqL1xuXG4vLyBTZXR1cCBkZWJ1ZyBsb2dcbmNvbnN0IGRlYnVnID0gcmVxdWlyZSgnYWJhY3VzLWRlYnVnJykoJ2FiYWN1cy1hY2NvdW50LXN0dWInKTtcblxuLy8gU2VjdXJlIHRoZSByb3V0ZXMgb3Igbm90XG5jb25zdCBzZWN1cmVkID0gKCkgPT4gcHJvY2Vzcy5lbnYuU0VDVVJFRCA9PT0gJ3RydWUnID8gdHJ1ZSA6IGZhbHNlO1xuXG4vLyBDcmVhdGUgYW4gZXhwcmVzcyByb3V0ZXJcbmNvbnN0IHJvdXRlcyA9IHJvdXRlcigpO1xuXG4vLyBUaGUgZmFrZSB0ZXN0IGFjY291bnQgcmV0dXJuZWQgYnkgdGhlIHN0dWJcbmNvbnN0IGZha2UgPSB7XG4gIGFjY291bnRfaWQ6ICcxMjM0JyxcbiAgb3JnYW5pemF0aW9uczogW1xuICAgICdhM2Q3ZmU0ZC0zY2IxLTRjYzMtYTgzMS1mZmU5OGUyMGNmMjcnLFxuICAgICdiM2Q3ZmU0ZC0zY2IxLTRjYzMtYTgzMS1mZmU5OGUyMGNmMjgnLFxuICAgICdjM2Q3ZmU0ZC0zY2IxLTRjYzMtYTgzMS1mZmU5OGUyMGNmMjknXSxcbiAgcHJpY2luZ19jb3VudHJ5OiAnVVNBJ1xufTtcblxuLy8gUmV0cmlldmUgYW5kIHJldHVybiBhbiBhY2NvdW50XG5yb3V0ZXMuZ2V0KCcvdjEvYWNjb3VudHMvOmFjY291bnRfaWQnLCBmdW5jdGlvbiAqKHJlcSkge1xuICBkZWJ1ZygnUmV0cmlldmluZyBhY2NvdW50ICVzJywgcmVxLnBhcmFtcy5hY2NvdW50X2lkKTtcblxuICAvLyBUaGlzIGlzIGEgc3R1YiBoZXJlIHNvIHdlIGFsd2F5cyBzdWNjZWVkIGFuZCByZXR1cm4gb3VyIGZha2UgYWNjb3VudFxuICByZXR1cm4ge1xuICAgIHN0YXR1czogMjAwLFxuICAgIGJvZHk6IGV4dGVuZCh7fSwgZmFrZSwgeyBhY2NvdW50X2lkOiByZXEucGFyYW1zLmFjY291bnRfaWQgfSlcbiAgfTtcbn0pO1xuXG4vLyBSZXRyaWV2ZSBhbmQgcmV0dXJuIHRoZSBhY2NvdW50IGNvbnRhaW5pbmcgdGhlIGdpdmVuIG9yZ1xucm91dGVzLmdldCgnL3YxL29yZ3MvOm9yZ19pZC9hY2NvdW50JywgZnVuY3Rpb24gKihyZXEpIHtcbiAgZGVidWcoJ1JldHJpZXZpbmcgYWNjb3VudCBjb250YWluaW5nIG9yZyAlcycsIHJlcS5wYXJhbXMub3JnX2lkKTtcblxuICAvLyBUaGlzIGlzIGEgc3R1YiBoZXJlIHNvIHdlIGFsd2F5cyBzdWNjZWVkIGFuZCByZXR1cm4gb3VyIGZha2UgYWNjb3VudFxuICByZXR1cm4ge1xuICAgIHN0YXR1czogMjAwLFxuICAgIGJvZHk6IGV4dGVuZCh7fSwgZmFrZSwgeyBvcmdhbml6YXRpb25zOiBbcmVxLnBhcmFtcy5vcmdfaWRdIH0pXG4gIH07XG59KTtcblxuLy8gTG9hZCBhbmQgcmV0dXJuIGEgcmVzb3VyY2UgcHJpY2UgY29uZmlnXG5jb25zdCBjb25maWcgPSAocmlkLCB0aW1lKSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHJlcXVpcmUoJy4vcmVzb3VyY2VzLycgKyByaWQpO1xuICB9XG4gIGNhdGNoKGUpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59O1xuXG4vLyBSZXR1cm4gdGhlIHJlc291cmNlIHByaWNlIGNvbmZpZ3VyYXRpb24gZm9yIGEgcGFydGljdWxhciByZXNvdXJjZSBpZCBhbmRcbi8vIGVmZmVjdGl2ZSB0aW1lIChhbGxvd2luZyBldm9sdXRpb24gb2YgcHJpY2VzIG92ZXIgdGltZSwgd2hlcmUgZGlmZmVyZW50XG4vLyB2ZXJzaW9ucyBvZiB0aGUgcHJpY2UgY29uZmlndXJhdGlvbiB3aWxsIGJlIHVzZWQgYXQgZGlmZmVyZW50XG4vLyBwb2ludHMgaW4gdGltZSlcbnJvdXRlcy5nZXQoXG4gICcvdjEvcHJpY2luZy9yZXNvdXJjZXMvOnJlc291cmNlX2lkL2NvbmZpZy86dGltZScsIGZ1bmN0aW9uICoocmVxKSB7XG4gICAgZGVidWcoJ1JldHJpZXZpbmcgcmVzb3VyY2UgcHJpY2UgY29uZmlnICVzIGF0IHRpbWUgJWQnLFxuICAgICAgcmVxLnBhcmFtcy5yZXNvdXJjZV9pZCwgcmVxLnBhcmFtcy50aW1lKTtcblxuICAgIC8vIFRoaXMgaXMgYSBzdHViIGhlcmUgc28gd2UganVzdCByZXR1cm4gb3VyIHNhbXBsZSByZXNvdXJjZSBwcmljZVxuICAgIC8vIGNvbmZpZ3NcbiAgICBjb25zdCBjb25mID0gY29uZmlnKHJlcS5wYXJhbXMucmVzb3VyY2VfaWQsIHBhcnNlSW50KHJlcS5wYXJhbXMudGltZSkpO1xuICAgIGlmKCFjb25mKVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3RhdHVzOiA0MDRcbiAgICAgIH07XG5cbiAgICAvLyBWYWxpZGF0ZSBhbmQgcmV0dXJuIHRoZSByZXNvdXJjZSBwcmljZSBjb25maWdcbiAgICBzY2hlbWFzLnByaWNlQ29uZmlnLnZhbGlkYXRlKGNvbmYpO1xuICAgIHJldHVybiB7XG4gICAgICBzdGF0dXM6IDIwMCxcbiAgICAgIGJvZHk6IHJlcXVpcmUoJy4vcmVzb3VyY2VzLycgKyByZXEucGFyYW1zLnJlc291cmNlX2lkKVxuICAgIH07XG4gIH0pO1xuXG4vLyBDcmVhdGUgYW4gYWNjb3VudCBpbmZvIHNlcnZpY2UgYXBwXG5jb25zdCBhY2NvdW50cyA9ICgpID0+IHtcbiAgLy8gQ3JlYXRlIHRoZSBXZWJhcHBcbiAgY29uc3QgYXBwID0gd2ViYXBwKCk7XG5cbiAgLy8gU2VjdXJlIGFjY291bnRzLCBvcmdzLCBwcmljaW5nIGFuZCBiYXRjaCByb3V0ZXMgdXNpbmcgYW4gT0F1dGhcbiAgLy8gYmVhcmVyIGFjY2VzcyB0b2tlblxuICBpZiAoc2VjdXJlZCgpKVxuICAgIGFwcC51c2UoL15cXC92MVxcLyhhY2NvdW50c3xvcmdzfHByaWNpbmcpfF5cXC9iYXRjaCQvLFxuICAgICAgb2F1dGgudmFsaWRhdG9yKHByb2Nlc3MuZW52LkpXVEtFWSwgcHJvY2Vzcy5lbnYuSldUQUxHTykpO1xuXG4gIGFwcC51c2Uocm91dGVzKTtcbiAgYXBwLnVzZShyb3V0ZXIuYmF0Y2goYXBwKSk7XG5cbiAgcmV0dXJuIGFwcDtcbn07XG5cbi8vIENvbW1hbmQgbGluZSBpbnRlcmZhY2UsIGNyZWF0ZSB0aGUgYXBwIGFuZCBsaXN0ZW5cbmNvbnN0IHJ1bkNMSSA9ICgpID0+IGFjY291bnRzKCkubGlzdGVuKCk7XG5cbi8vIEV4cG9ydCBvdXIgcHVibGljIGZ1bmN0aW9uc1xubW9kdWxlLmV4cG9ydHMgPSBhY2NvdW50cztcbm1vZHVsZS5leHBvcnRzLnJ1bkNMSSA9IHJ1bkNMSTtcbiJdfQ==