Fix #142: canHandle implementations should check for the request type (http, websocket, sse)

This commit is contained in:
Mathieu Carbou
2024-10-23 10:50:03 +02:00
parent c8f263eeb5
commit 724f6c3045
5 changed files with 8 additions and 31 deletions

View File

@ -386,10 +386,7 @@ size_t AsyncEventSource::count() const {
} }
bool AsyncEventSource::canHandle(AsyncWebServerRequest* request) const { bool AsyncEventSource::canHandle(AsyncWebServerRequest* request) const {
if (request->method() != HTTP_GET || !request->url().equals(_url)) { return request->isSSE() && request->url().equals(_url);
return false;
}
return true;
} }
void AsyncEventSource::handleRequest(AsyncWebServerRequest* request) { void AsyncEventSource::handleRequest(AsyncWebServerRequest* request) {

View File

@ -90,17 +90,13 @@ AsyncCallbackJsonWebHandler::AsyncCallbackJsonWebHandler(const String& uri, ArJs
#endif #endif
bool AsyncCallbackJsonWebHandler::canHandle(AsyncWebServerRequest* request) const { bool AsyncCallbackJsonWebHandler::canHandle(AsyncWebServerRequest* request) const {
if (!_onRequest) if (!_onRequest || !request->isHTTP() || !(_method & request->method()))
return false;
WebRequestMethodComposite request_method = request->method();
if (!(_method & request_method))
return false; return false;
if (_uri.length() && (_uri != request->url() && !request->url().startsWith(_uri + "/"))) if (_uri.length() && (_uri != request->url() && !request->url().startsWith(_uri + "/")))
return false; return false;
if (request_method != HTTP_GET && !request->contentType().equalsIgnoreCase(asyncsrv::T_application_json)) if (request->method() != HTTP_GET && !request->contentType().equalsIgnoreCase(asyncsrv::T_application_json))
return false; return false;
return true; return true;

View File

@ -45,17 +45,13 @@ AsyncCallbackMessagePackWebHandler::AsyncCallbackMessagePackWebHandler(const Str
#endif #endif
bool AsyncCallbackMessagePackWebHandler::canHandle(AsyncWebServerRequest* request) const { bool AsyncCallbackMessagePackWebHandler::canHandle(AsyncWebServerRequest* request) const {
if (!_onRequest) if (!_onRequest || !request->isHTTP() || !(_method & request->method()))
return false;
WebRequestMethodComposite request_method = request->method();
if (!(_method & request_method))
return false; return false;
if (_uri.length() && (_uri != request->url() && !request->url().startsWith(_uri + "/"))) if (_uri.length() && (_uri != request->url() && !request->url().startsWith(_uri + "/")))
return false; return false;
if (request_method != HTTP_GET && !request->contentType().equalsIgnoreCase(asyncsrv::T_application_msgpack)) if (request->method() != HTTP_GET && !request->contentType().equalsIgnoreCase(asyncsrv::T_application_msgpack))
return false; return false;
return true; return true;

View File

@ -1122,13 +1122,7 @@ const char __WS_STR_UUID[] PROGMEM = {"258EAFA5-E914-47DA-95CA-C5AB0DC85B11"};
#define WS_STR_UUID FPSTR(__WS_STR_UUID) #define WS_STR_UUID FPSTR(__WS_STR_UUID)
bool AsyncWebSocket::canHandle(AsyncWebServerRequest* request) const { bool AsyncWebSocket::canHandle(AsyncWebServerRequest* request) const {
if (!_enabled) return _enabled && request->isWebSocketUpgrade() && request->url().equals(_url);
return false;
if (request->method() != HTTP_GET || !request->url().equals(_url) || !request->isExpectedRequestedConnType(RCT_WS))
return false;
return true;
} }
void AsyncWebSocket::handleRequest(AsyncWebServerRequest* request) { void AsyncWebSocket::handleRequest(AsyncWebServerRequest* request) {

View File

@ -106,10 +106,7 @@ AsyncStaticWebHandler& AsyncStaticWebHandler::setLastModified() {
} }
#endif #endif
bool AsyncStaticWebHandler::canHandle(AsyncWebServerRequest* request) const { bool AsyncStaticWebHandler::canHandle(AsyncWebServerRequest* request) const {
if (request->method() != HTTP_GET || !request->url().startsWith(_uri) || !request->isExpectedRequestedConnType(RCT_DEFAULT, RCT_HTTP)) { return request->isHTTP() && request->method() == HTTP_GET && request->url().startsWith(_uri) && _getFile(request);
return false;
}
return _getFile(request);
} }
bool AsyncStaticWebHandler::_getFile(AsyncWebServerRequest* request) const { bool AsyncStaticWebHandler::_getFile(AsyncWebServerRequest* request) const {
@ -253,10 +250,7 @@ void AsyncCallbackWebHandler::setUri(const String& uri) {
} }
bool AsyncCallbackWebHandler::canHandle(AsyncWebServerRequest* request) const { bool AsyncCallbackWebHandler::canHandle(AsyncWebServerRequest* request) const {
if (!_onRequest) if (!_onRequest || !request->isHTTP() || !(_method & request->method()))
return false;
if (!(_method & request->method()))
return false; return false;
#ifdef ASYNCWEBSERVER_REGEX #ifdef ASYNCWEBSERVER_REGEX