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); } }); };