diff options
| author | Ben Beltran <ben@nsovocal.com> | 2017-02-19 02:04:42 -0600 |
|---|---|---|
| committer | Ben Beltran <ben@nsovocal.com> | 2017-02-19 02:04:42 -0600 |
| commit | b0b2aee1145b50a58c22d39627df717d45c6338f (patch) | |
| tree | 068b1f22bb170312b0830840a72a3ff0e21ae207 /lib/dead_drop.js | |
| parent | dc10b1de1a73effd6d0ab5744709913ef5cbe5b3 (diff) | |
| parent | 2082455bb240291413c368c1b74736a739db2a2c (diff) | |
Merge branch 'release/1.0.0'
Diffstat (limited to 'lib/dead_drop.js')
| -rw-r--r-- | lib/dead_drop.js | 134 |
1 files changed, 134 insertions, 0 deletions
diff --git a/lib/dead_drop.js b/lib/dead_drop.js new file mode 100644 index 0000000..3336444 --- /dev/null +++ b/lib/dead_drop.js @@ -0,0 +1,134 @@ +'use strict'; + +const Koa = require('koa'); +const KoaBodyParser = require('koa-bodyparser'); +const KoaRoute = require('koa-route'); + +const MainMenuController = require('./controllers/main_menu'); +const RecordingMenuController = require('./controllers/recording_menu'); +const RecordingsController = require('./controllers/recordings'); + +const internals = {}; + +/** + * The Dead Drop class is the main entry point for the application. + * + * @class DeadDrop + * @param {DeadDrop.tConfiguration} config the initialization options to + * extend the instance + */ +module.exports = internals.DeadDrop = class DeadDrop { + + constructor(config) { + + Object.assign(this, config); + } + + /** + * Initializes the application and starts listening. Also prints a + * nice robotic banner with information. + * + * @function run + * @memberof DeadDrop + * @instance + */ + run() { + + this._initializeServer(); + this._startServer(); + this._printBanner(); + + return Promise.resolve(); + } + + // Initializes the Koa application and all the handlers. + + _initializeServer() { + + const self = this; + + this._app = Koa(); + + this._app.use(KoaBodyParser()); + + this._app.use(function * (next) { + + const accountSid = this.request.body.AccountSid || this.request.query.AccountSid; + + if (accountSid === self.twilioAccountSid) { + yield next; + } + else { + this.throw('Unauthorized', 401); + } + }); + + this._initializeMainMenuRoutes(); + this._initializeRecordingMenuRoutes(); + this._initializeRecordingsRoutes(); + + this._app.use(function * () { + + this.body = 'How did you get here? Shoo!'; + }); + + } + + // Starts listening + + _startServer() { + + this._app.listen(this.port); + } + + // Initializes the main menu routes. + + _initializeMainMenuRoutes() { + + const mainMenuController = new MainMenuController(); + + this._app.use(KoaRoute.get('/menus/main', mainMenuController.serveMenu())); + this._app.use(KoaRoute.post('/menus/main', mainMenuController.parseMenuSelection())); + } + + // Initializes the recording menu routes. + + _initializeRecordingMenuRoutes() { + + const recordingMenuController = new RecordingMenuController(); + + this._app.use(KoaRoute.get('/menus/recording', recordingMenuController.serveMenu())); + this._app.use(KoaRoute.post('/menus/recording', recordingMenuController.parseMenuSelection())); + } + + // Initializes the recordings routes. + + _initializeRecordingsRoutes() { + + const recordingsController = new RecordingsController({ + redis: this.redis + }); + + this._app.use(KoaRoute.get('/recordings', recordingsController.startRecording())); + this._app.use(KoaRoute.post('/recordings', recordingsController.saveRecording())); + this._app.use(KoaRoute.get('/recordings/:id', recordingsController.getRecording())); + } + + // Prints the banner. + + _printBanner() { + + console.log(' >o<'); + console.log(' /-----\\'); + console.log(` |ú ù| - Happy to listen on: ${this.port}`); + console.log(' | U |'); + console.log(' \\---/'); + console.log(' +---------+'); + console.log(' ~| () |~'); + console.log(' ~| /\\ | ~'); + console.log(' ~| \\/ | ~c'); + console.log(' ^+---------+'); + console.log(' (o==o==o) '); + + } +}; |