summaryrefslogtreecommitdiff
path: root/src/api/bot/interfaces
diff options
context:
space:
mode:
Diffstat (limited to 'src/api/bot/interfaces')
-rw-r--r--src/api/bot/interfaces/line.ts37
1 files changed, 37 insertions, 0 deletions
diff --git a/src/api/bot/interfaces/line.ts b/src/api/bot/interfaces/line.ts
new file mode 100644
index 0000000000..4bee844c12
--- /dev/null
+++ b/src/api/bot/interfaces/line.ts
@@ -0,0 +1,37 @@
+import * as EventEmitter from 'events';
+import * as express from 'express';
+import * as crypto from 'crypto';
+//import User from '../../models/user';
+import config from '../../../conf';
+/*import BotCore from '../core';
+
+const sessions: {
+ userId: string;
+ session: BotCore;
+}[] = [];
+*/
+module.exports = async (app: express.Application) => {
+ if (config.line_bot == null) return;
+
+ const handler = new EventEmitter();
+
+ app.post('/hooks/line', (req, res, next) => {
+ // req.headers['X-Line-Signature'] は常に string ですが、型定義の都合上
+ // string | string[] になっているので string を明示しています
+ const sig1 = req.headers['X-Line-Signature'] as string;
+
+ const hash = crypto.createHmac('sha256', config.line_bot.channel_secret)
+ .update(JSON.stringify(req.body));
+
+ const sig2 = hash.digest('base64');
+
+ // シグネチャ比較
+ if (sig1 === sig2) {
+ console.log(req.body);
+ handler.emit(req.body.type);
+ res.sendStatus(200);
+ } else {
+ res.sendStatus(400);
+ }
+ });
+};