]> git.r.bdr.sh - rbdr/dead-drop/blame - lib/dead_drop.js
Handle Menus and Store / Recall recordings (#2)
[rbdr/dead-drop] / lib / dead_drop.js
CommitLineData
5e981bca
RBR
1'use strict';
2
3const Koa = require('koa');
7404eac9 4const KoaBodyParser = require('koa-bodyparser');
5e981bca
RBR
5const KoaRoute = require('koa-route');
6
7404eac9
RBR
7const MainMenuController = require('./controllers/main_menu');
8const RecordingMenuController = require('./controllers/recording_menu');
9const RecordingsController = require('./controllers/recordings');
10
5e981bca
RBR
11const internals = {};
12
13/**
14 * The Dead Drop class is the main entry point for the application.
15 *
16 * @class DeadDrop
17 * @param {DeadDrop.tConfiguration} config the initialization options to
18 * extend the instance
19 */
20module.exports = internals.DeadDrop = class DeadDrop {
21
22 constructor(config) {
23
24 Object.assign(this, config);
25 }
26
27 /**
28 * Initializes the application and starts listening. Also prints a
29 * nice robotic banner with information.
30 *
31 * @function run
32 * @memberof DeadDrop
33 * @instance
34 */
35 run() {
36
37 this._initializeServer();
38 this._startServer();
39 this._printBanner();
40
41 return Promise.resolve();
42 }
43
44 // Initializes the Koa application and all the handlers.
45
46 _initializeServer() {
47
48 this._app = Koa();
49
7404eac9 50 this._app.use(KoaBodyParser());
5e981bca 51
7404eac9
RBR
52 this._initializeMainMenuRoutes();
53 this._initializeRecordingMenuRoutes();
54 this._initializeRecordingsRoutes();
5e981bca 55
7404eac9 56 this._app.use(function * () {
5e981bca 57
7404eac9
RBR
58 this.body = 'How did you get here? Shoo!';
59 });
5e981bca 60
7404eac9 61 }
5e981bca 62
7404eac9 63 // Starts listening
5e981bca 64
7404eac9 65 _startServer() {
5e981bca 66
7404eac9
RBR
67 this._app.listen(this.port);
68 }
5e981bca 69
7404eac9 70 // Initializes the main menu routes.
5e981bca 71
7404eac9 72 _initializeMainMenuRoutes() {
5e981bca 73
7404eac9 74 const mainMenuController = new MainMenuController();
5e981bca 75
7404eac9
RBR
76 this._app.use(KoaRoute.get('/menus/main', mainMenuController.serveMenu()));
77 this._app.use(KoaRoute.post('/menus/main', mainMenuController.parseMenuSelection()));
78 }
5e981bca 79
7404eac9 80 // Initializes the recording menu routes.
5e981bca 81
7404eac9 82 _initializeRecordingMenuRoutes() {
5e981bca 83
7404eac9 84 const recordingMenuController = new RecordingMenuController();
5e981bca 85
7404eac9
RBR
86 this._app.use(KoaRoute.get('/menus/recording', recordingMenuController.serveMenu()));
87 this._app.use(KoaRoute.post('/menus/recording', recordingMenuController.parseMenuSelection()));
5e981bca
RBR
88 }
89
7404eac9 90 // Initializes the recordings routes.
5e981bca 91
7404eac9 92 _initializeRecordingsRoutes() {
5e981bca 93
7404eac9
RBR
94 const recordingsController = new RecordingsController({
95 redis: this.redis
96 });
97
98 this._app.use(KoaRoute.get('/recordings', recordingsController.startRecording()));
99 this._app.use(KoaRoute.post('/recordings', recordingsController.saveRecording()));
100 this._app.use(KoaRoute.get('/recordings/:id', recordingsController.getRecording()));
5e981bca
RBR
101 }
102
103 // Prints the banner.
104
105 _printBanner() {
106
107 console.log(' >o<');
108 console.log(' /-----\\');
109 console.log(` |ú ù| - Happy to listen on: ${this.port}`);
110 console.log(' | U |');
111 console.log(' \\---/');
112 console.log(' +---------+');
113 console.log(' ~| () |~');
114 console.log(' ~| /\\ | ~');
115 console.log(' ~| \\/ | ~c');
116 console.log(' ^+---------+');
117 console.log(' (o==o==o) ');
118
119 }
120};