diff --git a/config/config-sample.yaml b/config/config-sample.yaml index 4d19329..e88b71a 100644 --- a/config/config-sample.yaml +++ b/config/config-sample.yaml @@ -19,8 +19,6 @@ signal_number: '+12345689' # Your signal number / account web_server: false # Enable/disable web server web_server_port: 8080 # Port for web server -web_server_ssl_cert: '../src/web/ssl.crt' # Path for SSL cert -web_server_ssl_key: '../src/web/ssl.key' # Path for SSL key dev_mode: true # Enable/disable dev mode diff --git a/package-lock.json b/package-lock.json index 993cc32..843b128 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,6 +13,7 @@ "chalk": "^5.0.1", "debug": "^4.3.4", "express": "^4.18.1", + "express-rate-limit": "^6.4.0", "grammy": "^1.9.0", "node-fetch": "^3.2.6", "node-gyp": "^9.0.0", @@ -2227,6 +2228,17 @@ "node": ">= 0.10.0" } }, + "node_modules/express-rate-limit": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-6.4.0.tgz", + "integrity": "sha512-lxQRZI4gi3qAWTf0/Uqsyugsz57h8bd7QyllXBgJvd6DJKokzW7C5DTaNvwzvAQzwHGFaItybfYGhC8gpu0V2A==", + "engines": { + "node": ">= 12.9.0" + }, + "peerDependencies": { + "express": "^4 || ^5" + } + }, "node_modules/express/node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -7199,6 +7211,12 @@ } } }, + "express-rate-limit": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-6.4.0.tgz", + "integrity": "sha512-lxQRZI4gi3qAWTf0/Uqsyugsz57h8bd7QyllXBgJvd6DJKokzW7C5DTaNvwzvAQzwHGFaItybfYGhC8gpu0V2A==", + "requires": {} + }, "fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", diff --git a/package.json b/package.json index 852110c..a66f8e1 100644 --- a/package.json +++ b/package.json @@ -28,6 +28,7 @@ "chalk": "^5.0.1", "debug": "^4.3.4", "express": "^4.18.1", + "express-rate-limit": "^6.4.0", "grammy": "^1.9.0", "node-fetch": "^3.2.6", "node-gyp": "^9.0.0", diff --git a/src/addons/web.ts b/src/addons/web.ts index 88c0640..c18e407 100644 --- a/src/addons/web.ts +++ b/src/addons/web.ts @@ -2,6 +2,7 @@ import fakectx from './fakectx'; import {ticketHandler} from '../text'; import cache from '../cache'; import TelegramAddon from './telegram'; +import rateLimit from 'express-rate-limit'; /* include script @@ -9,6 +10,14 @@ import TelegramAddon from './telegram'; const init = function(bot: TelegramAddon) { // Enable web server with socketio if (cache.config.web_server) { + // Set up rate limiter + const limiter = rateLimit({ + windowMs: 15 * 60 * 1000, + max: 100, + standardHeaders: true, + legacyHeaders: false, + }); + const express = require('express'); const http = require('http'); const app = express(); @@ -18,17 +27,19 @@ const init = function(bot: TelegramAddon) { const {Server} = require('socket.io'); const io = new Server(server); cache.io = io; + app.use(limiter); + + // app.get('/', (req, res) => { + // res.writeHead(200, {'Content-Type': 'text/html'}); + // }); - app.get('/', (_req: any, res: { sendFile: (arg0: string) => void }) => { + app.get('/', (_req: any, res: any) => { res.sendFile(__dirname + '/web/index.html'); }); - app.get( - '/chat.js', - (_req: any, res: { sendFile: (arg0: string) => void }) => { - res.sendFile(__dirname + '/web/chat.js'); - }, - ); + app.get('/chat.js', (_req: any, res: any) => { + res.sendFile(__dirname + '/web/chat.js'); + }); io.on( 'connection', @@ -48,7 +59,7 @@ const init = function(bot: TelegramAddon) { }, ); - server.listen(port, () => console.log(`Server started on port ${port}`)); + server.listen(8080, () => console.log(`Server started on port ${port}`)); } };