UNPKG

3.52 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.createRouter = undefined;
7
8var _koaBodyparser = require('koa-bodyparser');
9
10var _koaBodyparser2 = _interopRequireDefault(_koaBodyparser);
11
12var _koaRouter = require('koa-router');
13
14var _koaRouter2 = _interopRequireDefault(_koaRouter);
15
16var _log = require('./log');
17
18var _log2 = _interopRequireDefault(_log);
19
20function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
21
22function _asyncToGenerator(fn) { return function () { var gen = fn.apply(this, arguments); return new Promise(function (resolve, reject) { function step(key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { return Promise.resolve(value).then(function (value) { step("next", value); }, function (err) { step("throw", err); }); } } return step("next"); }); }; }
23
24const createRouter = exports.createRouter = (handlers, context) => {
25 (0, _log2.default)('create router with handlers: %s', Object.keys(handlers).join(', '));
26
27 const router = new _koaRouter2.default();
28 router.use((0, _koaBodyparser2.default)({ enableTypes: ['json'] }));
29
30 if (handlers.enable) {
31 router.post('/enable', ctx => {
32 handlers.enable && handlers.enable(ctx.request.body || {}, context);
33 ctx.status = 204;
34 });
35 }
36
37 if (handlers.disable) {
38 router.post('/disable', ctx => {
39 handlers.disable && handlers.disable(ctx.request.body || {}, context);
40 ctx.status = 204;
41 });
42 }
43
44 if (handlers.conversation_added) {
45 router.post('/conversation_added', ctx => {
46 handlers.conversation_added && handlers.conversation_added(ctx.request.body || {}, context);
47 ctx.status = 204;
48 });
49 }
50
51 if (handlers.conversation_removed) {
52 router.post('/conversation_removed', ctx => {
53 handlers.conversation_removed && handlers.conversation_removed(ctx.request.body || {}, context);
54 ctx.status = 204;
55 });
56 }
57
58 if (handlers.edit_subscription) {
59 router.post('/edit_subscription', ctx => {
60 handlers.edit_subscription && handlers.edit_subscription(ctx.request.body || {}, context);
61 ctx.status = 204;
62 });
63 }
64
65 if (handlers.delete_subscription) {
66 router.post('/delete_subscription', ctx => {
67 handlers.delete_subscription && handlers.delete_subscription(ctx.request.body || {}, context);
68 ctx.status = 204;
69 });
70 }
71
72 if (handlers.post) {
73 router.post('/post', (() => {
74 var _ref = _asyncToGenerator(function* (ctx) {
75 const params = ctx.request.body || {};
76
77 let missingParam;
78 if (!params.user_id) {
79 missingParam = 'user_id';
80 } else if (!params.data) {
81 missingParam = 'data';
82 } else if (!params.context) {
83 missingParam = 'context';
84 }
85
86 if (missingParam) {
87 ctx.status = 400;
88 ctx.body = `Missing ${missingParam}`;
89 return;
90 }
91
92 try {
93 const postResult = handlers.post ? handlers.post(params, context) : { success: false };
94 const payload = postResult && postResult.then ? yield postResult : postResult;
95 ctx.body = payload || { success: true };
96 } catch (err) {
97 (0, _log2.default)('error handling post request', params, err);
98 ctx.status = 500;
99 }
100 });
101
102 return function (_x) {
103 return _ref.apply(this, arguments);
104 };
105 })());
106 }
107
108 return router;
109};
\No newline at end of file