parent
3573d0949d
commit
923e65c789
@ -0,0 +1,66 @@ |
||||
var debug = require('debug')('node-telegram-bot-api'); |
||||
var https = require('https'); |
||||
var http = require('http'); |
||||
var util = require('util'); |
||||
var fs = require('fs'); |
||||
|
||||
var TelegramBotWebHook = function (token, options, callback) { |
||||
this.token = token; |
||||
this.callback = callback; |
||||
if (typeof options === 'boolean') { |
||||
options = {}; |
||||
} |
||||
options.port = options.port || 8443; |
||||
var binded = this._requestListener.bind(this); |
||||
|
||||
if (options.key && options.cert) { // HTTPS Server
|
||||
debug('HTTPS WebHook enabled'); |
||||
var opts = { |
||||
key: fs.readFileSync(options.key), |
||||
cert: fs.readFileSync(options.cert) |
||||
}; |
||||
this._webServer = https.createServer(opts, binded); |
||||
} else { |
||||
debug('HTTP WebHook enabled'); |
||||
this._webServer = http.createServer(binded); |
||||
} |
||||
|
||||
this._webServer.listen(options.port, options.host, function () { |
||||
debug("WebHook listening on port %s", options.port); |
||||
}); |
||||
}; |
||||
|
||||
TelegramBotWebHook.prototype._requestListener = function (req, res) { |
||||
var self = this; |
||||
var regex = new RegExp(this.token); |
||||
|
||||
debug('WebHook request URL:', req.url); |
||||
debug('WebHook request headers: %j', req.headers); |
||||
// If there isn't token on URL
|
||||
if (!regex.test(req.url)) { |
||||
debug('WebHook request unauthorized'); |
||||
res.statusCode = 401; |
||||
res.end(); |
||||
} else if (req.method === 'POST') { |
||||
var fullBody = ''; |
||||
req.on('data', function (chunk) { |
||||
fullBody += chunk.toString(); |
||||
}); |
||||
req.on('end', function () { |
||||
try { |
||||
debug('WebHook request fullBody', fullBody); |
||||
var data = JSON.parse(fullBody); |
||||
self.callback(data); |
||||
} catch (error) { |
||||
debug(error); |
||||
} |
||||
res.end('OK'); |
||||
}); |
||||
} else { // Authorized but not a POST
|
||||
debug('WebHook request isn\'t a POST'); |
||||
res.statusCode = 418; // I'm a teabot!
|
||||
res.end(); |
||||
} |
||||
}; |
||||
|
||||
module.exports = TelegramBotWebHook; |
||||
Loading…
Reference in new issue