From 215f979f2745bd8e1f8b08c211def03d4a721206 Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=A9r=C3=B4me=20Benoit?= Date: Thu, 12 Feb 2026 19:29:31 +0100 Subject: [PATCH] refactor(ui-server): unify HTTP and WebSocket payload size limits Merge DEFAULT_MAX_BODY_SIZE and DEFAULT_WS_MAX_PAYLOAD into single DEFAULT_MAX_PAYLOAD_SIZE constant (1MB). Both represent the same semantic: UI protocol payload limit over different transport layers. Also increases WebSocket limit from 100KB to 1MB to match HTTP, allowing ~200-300 charging stations in list responses. --- src/charging-station/ui-server/UIHttpServer.ts | 4 ++-- src/charging-station/ui-server/UIServerSecurity.ts | 3 +-- src/charging-station/ui-server/UIWebSocketServer.ts | 4 ++-- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/src/charging-station/ui-server/UIHttpServer.ts b/src/charging-station/ui-server/UIHttpServer.ts index a86f7218..ce655c2d 100644 --- a/src/charging-station/ui-server/UIHttpServer.ts +++ b/src/charging-station/ui-server/UIHttpServer.ts @@ -26,7 +26,7 @@ import { AbstractUIServer } from './AbstractUIServer.js' import { createBodySizeLimiter, createRateLimiter, - DEFAULT_MAX_BODY_SIZE, + DEFAULT_MAX_PAYLOAD_SIZE, DEFAULT_RATE_LIMIT, DEFAULT_RATE_WINDOW, } from './UIServerSecurity.js' @@ -167,7 +167,7 @@ export class UIHttpServer extends AbstractUIServer { } const bodyBuffer: Uint8Array[] = [] - const checkBodySize = createBodySizeLimiter(DEFAULT_MAX_BODY_SIZE) + const checkBodySize = createBodySizeLimiter(DEFAULT_MAX_PAYLOAD_SIZE) req .on('data', (chunk: Uint8Array) => { if (!checkBodySize(chunk.length)) { diff --git a/src/charging-station/ui-server/UIServerSecurity.ts b/src/charging-station/ui-server/UIServerSecurity.ts index 5cb6c7e1..844537b0 100644 --- a/src/charging-station/ui-server/UIServerSecurity.ts +++ b/src/charging-station/ui-server/UIServerSecurity.ts @@ -5,11 +5,10 @@ interface RateLimitEntry { resetTime: number } -export const DEFAULT_MAX_BODY_SIZE = 1048576 +export const DEFAULT_MAX_PAYLOAD_SIZE = 1048576 export const DEFAULT_RATE_LIMIT = 100 export const DEFAULT_RATE_WINDOW = 60000 export const DEFAULT_MAX_STATIONS = 100 -export const DEFAULT_WS_MAX_PAYLOAD = 102400 export const DEFAULT_MAX_TRACKED_IPS = 10000 export const isValidCredential = (provided: string, expected: string): boolean => { diff --git a/src/charging-station/ui-server/UIWebSocketServer.ts b/src/charging-station/ui-server/UIWebSocketServer.ts index a64f2177..16675caa 100644 --- a/src/charging-station/ui-server/UIWebSocketServer.ts +++ b/src/charging-station/ui-server/UIWebSocketServer.ts @@ -20,7 +20,7 @@ import { validateUUID, } from '../../utils/index.js' import { AbstractUIServer } from './AbstractUIServer.js' -import { DEFAULT_WS_MAX_PAYLOAD } from './UIServerSecurity.js' +import { DEFAULT_MAX_PAYLOAD_SIZE } from './UIServerSecurity.js' import { getProtocolAndVersion, handleProtocols, @@ -36,7 +36,7 @@ export class UIWebSocketServer extends AbstractUIServer { super(uiServerConfiguration) this.webSocketServer = new WebSocketServer({ handleProtocols, - maxPayload: DEFAULT_WS_MAX_PAYLOAD, + maxPayload: DEFAULT_MAX_PAYLOAD_SIZE, noServer: true, }) } -- 2.43.0