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 {
if (request->method() != HTTP_GET || !request->url().equals(_url)) {
return false;
}
return true;
return request->isSSE() && request->url().equals(_url);
}
void AsyncEventSource::handleRequest(AsyncWebServerRequest* request) {

View File

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

View File

@ -45,17 +45,13 @@ AsyncCallbackMessagePackWebHandler::AsyncCallbackMessagePackWebHandler(const Str
#endif
bool AsyncCallbackMessagePackWebHandler::canHandle(AsyncWebServerRequest* request) const {
if (!_onRequest)
return false;
WebRequestMethodComposite request_method = request->method();
if (!(_method & request_method))
if (!_onRequest || !request->isHTTP() || !(_method & request->method()))
return false;
if (_uri.length() && (_uri != request->url() && !request->url().startsWith(_uri + "/")))
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 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)
bool AsyncWebSocket::canHandle(AsyncWebServerRequest* request) const {
if (!_enabled)
return false;
if (request->method() != HTTP_GET || !request->url().equals(_url) || !request->isExpectedRequestedConnType(RCT_WS))
return false;
return true;
return _enabled && request->isWebSocketUpgrade() && request->url().equals(_url);
}
void AsyncWebSocket::handleRequest(AsyncWebServerRequest* request) {

View File

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