From b7ce83d7aae36aefb6ff7a7391d19ef3691fe77e Mon Sep 17 00:00:00 2001 From: Thomas Basler Date: Tue, 26 Aug 2025 21:14:53 +0200 Subject: [PATCH] Use pre-defined literals in webapi --- src/WebApi.cpp | 6 +++--- src/WebApi_file.cpp | 8 ++++---- src/WebApi_firmware.cpp | 18 +++++++++--------- src/WebApi_i18n.cpp | 10 +++++----- src/WebApi_prometheus.cpp | 2 +- src/WebApi_webapp.cpp | 26 +++++++++++++------------- 6 files changed, 35 insertions(+), 35 deletions(-) diff --git a/src/WebApi.cpp b/src/WebApi.cpp index 5f44a89f..c59225fb 100644 --- a/src/WebApi.cpp +++ b/src/WebApi.cpp @@ -60,7 +60,7 @@ bool WebApiClass::checkCredentials(AsyncWebServerRequest* request) // WebAPI should set the X-Requested-With to prevent browser internal auth dialogs if (!request->hasHeader("X-Requested-With")) { - r->addHeader("WWW-Authenticate", "Basic realm=\"Login Required\""); + r->addHeader(asyncsrv::T_WWW_AUTH, "Basic realm=\"Login Required\""); } request->send(r); @@ -79,8 +79,8 @@ bool WebApiClass::checkCredentialsReadonly(AsyncWebServerRequest* request) void WebApiClass::sendTooManyRequests(AsyncWebServerRequest* request) { - auto response = request->beginResponse(429, "text/plain", "Too Many Requests"); - response->addHeader("Retry-After", "60"); + auto response = request->beginResponse(429, asyncsrv::T_text_plain, "Too Many Requests"); + response->addHeader(asyncsrv::T_retry_after, "60"); request->send(response); } diff --git a/src/WebApi_file.cpp b/src/WebApi_file.cpp index 60c0bea0..4eac369a 100644 --- a/src/WebApi_file.cpp +++ b/src/WebApi_file.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later /* - * Copyright (C) 2022-2024 Thomas Basler and others + * Copyright (C) 2022-2025 Thomas Basler and others */ #include "WebApi_file.h" #include "Configuration.h" @@ -186,9 +186,9 @@ void WebApiFileClass::onFileUploadFinish(AsyncWebServerRequest* request) // the request handler is triggered after the upload has finished... // create the response, add header, and send response - AsyncWebServerResponse* response = request->beginResponse(200, "text/plain", "OK"); - response->addHeader("Connection", "close"); - response->addHeader("Access-Control-Allow-Origin", "*"); + AsyncWebServerResponse* response = request->beginResponse(200, asyncsrv::T_text_plain, "OK"); + response->addHeader(asyncsrv::T_Connection, asyncsrv::T_close); + response->addHeader(asyncsrv::T_CORS_ACAO, "*"); request->send(response); RestartHelper.triggerRestart(); } diff --git a/src/WebApi_firmware.cpp b/src/WebApi_firmware.cpp index 2796991d..105635da 100644 --- a/src/WebApi_firmware.cpp +++ b/src/WebApi_firmware.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later /* - * Copyright (C) 2022-2024 Thomas Basler and others + * Copyright (C) 2022-2025 Thomas Basler and others */ #include "WebApi_firmware.h" #include "Configuration.h" @@ -33,9 +33,9 @@ void WebApiFirmwareClass::onFirmwareUpdateFinish(AsyncWebServerRequest* request) // the request handler is triggered after the upload has finished... // create the response, add header, and send response - AsyncWebServerResponse* response = request->beginResponse((Update.hasError()) ? 500 : 200, "text/plain", (Update.hasError()) ? "FAIL" : "OK"); - response->addHeader("Connection", "close"); - response->addHeader("Access-Control-Allow-Origin", "*"); + AsyncWebServerResponse* response = request->beginResponse((Update.hasError()) ? 500 : 200, asyncsrv::T_text_plain, (Update.hasError()) ? "FAIL" : "OK"); + response->addHeader(asyncsrv::T_Connection, asyncsrv::T_close); + response->addHeader(asyncsrv::T_CORS_ACAO, "*"); request->send(response); RestartHelper.triggerRestart(); } @@ -49,30 +49,30 @@ void WebApiFirmwareClass::onFirmwareUpdateUpload(AsyncWebServerRequest* request, // Upload handler chunks in data if (!index) { if (!request->hasParam("MD5", true)) { - return request->send(400, "text/plain", "MD5 parameter missing"); + return request->send(400, asyncsrv::T_text_plain, "MD5 parameter missing"); } if (!Update.setMD5(request->getParam("MD5", true)->value().c_str())) { - return request->send(400, "text/plain", "MD5 parameter invalid"); + return request->send(400, asyncsrv::T_text_plain, "MD5 parameter invalid"); } if (!Update.begin(UPDATE_SIZE_UNKNOWN, U_FLASH)) { // Start with max available size Update.printError(Serial); - return request->send(400, "text/plain", "OTA could not begin"); + return request->send(400, asyncsrv::T_text_plain, "OTA could not begin"); } } // Write chunked data to the free sketch space if (len) { if (Update.write(data, len) != len) { - return request->send(400, "text/plain", "OTA could not begin"); + return request->send(400, asyncsrv::T_text_plain, "OTA could not begin"); } } if (final) { // if the final flag is set then this is the last frame of data if (!Update.end(true)) { // true to set the size to the current progress Update.printError(Serial); - return request->send(400, "text/plain", "Could not end OTA"); + return request->send(400, asyncsrv::T_text_plain, "Could not end OTA"); } } else { return; diff --git a/src/WebApi_i18n.cpp b/src/WebApi_i18n.cpp index 6a43072f..a73a5aea 100644 --- a/src/WebApi_i18n.cpp +++ b/src/WebApi_i18n.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later /* - * Copyright (C) 2024 Thomas Basler and others + * Copyright (C) 2024-2025 Thomas Basler and others */ #include "WebApi_i18n.h" #include "I18n.h" @@ -49,8 +49,8 @@ void WebApiI18nClass::onI18nLanguage(AsyncWebServerRequest* request) expectedEtag += "\""; bool eTagMatch = false; - if (request->hasHeader("If-None-Match")) { - const AsyncWebHeader* h = request->getHeader("If-None-Match"); + if (request->hasHeader(asyncsrv::T_INM)) { + const AsyncWebHeader* h = request->getHeader(asyncsrv::T_INM); eTagMatch = h->value().equals(expectedEtag); } @@ -63,8 +63,8 @@ void WebApiI18nClass::onI18nLanguage(AsyncWebServerRequest* request) } // HTTP requires cache headers in 200 and 304 to be identical - response->addHeader("Cache-Control", "public, must-revalidate"); - response->addHeader("ETag", expectedEtag); + response->addHeader(asyncsrv::T_Cache_Control, "public, must-revalidate"); + response->addHeader(asyncsrv::T_ETag, expectedEtag); request->send(response); return; diff --git a/src/WebApi_prometheus.cpp b/src/WebApi_prometheus.cpp index 51db9631..81b60415 100644 --- a/src/WebApi_prometheus.cpp +++ b/src/WebApi_prometheus.cpp @@ -112,7 +112,7 @@ void WebApiPrometheusClass::onPrometheusMetricsGet(AsyncWebServerRequest* reques } } } - stream->addHeader("Cache-Control", "no-cache"); + stream->addHeader(asyncsrv::T_Cache_Control, asyncsrv::T_no_cache); if (stream->available() > initialResponseBufferSize) { initialResponseBufferSize = stream->available(); ESP_LOGI(TAG, "Increased /api/prometheus/metrics initialResponseBufferSize to %" PRIu32 " bytes", initialResponseBufferSize); diff --git a/src/WebApi_webapp.cpp b/src/WebApi_webapp.cpp index 48e92eb1..6fdb09b5 100644 --- a/src/WebApi_webapp.cpp +++ b/src/WebApi_webapp.cpp @@ -39,8 +39,8 @@ void WebApiWebappClass::responseBinaryDataWithETagCache(AsyncWebServerRequest* r expectedEtag += "\""; bool eTagMatch = false; - if (request->hasHeader("If-None-Match")) { - const AsyncWebHeader* h = request->getHeader("If-None-Match"); + if (request->hasHeader(asyncsrv::T_INM)) { + const AsyncWebHeader* h = request->getHeader(asyncsrv::T_INM); eTagMatch = h->value().equals(expectedEtag); } @@ -51,13 +51,13 @@ void WebApiWebappClass::responseBinaryDataWithETagCache(AsyncWebServerRequest* r } else { response = request->beginResponse(200, contentType, content, len); if (contentEncoding.length() > 0) { - response->addHeader("Content-Encoding", contentEncoding); + response->addHeader(asyncsrv::T_Content_Encoding, contentEncoding); } } // HTTP requires cache headers in 200 and 304 to be identical - response->addHeader("Cache-Control", "public, must-revalidate"); - response->addHeader("ETag", expectedEtag); + response->addHeader(asyncsrv::T_Cache_Control, "public, must-revalidate"); + response->addHeader(asyncsrv::T_ETag, expectedEtag); request->send(response); } @@ -70,34 +70,34 @@ void WebApiWebappClass::init(AsyncWebServer& server, Scheduler& scheduler) */ server.on("/", HTTP_GET, [&](AsyncWebServerRequest* request) { - responseBinaryDataWithETagCache(request, "text/html", "gzip", file_index_html_start, file_index_html_end - file_index_html_start); + responseBinaryDataWithETagCache(request, asyncsrv::T_text_html, asyncsrv::T_gzip, file_index_html_start, file_index_html_end - file_index_html_start); }); server.onNotFound([&](AsyncWebServerRequest* request) { - responseBinaryDataWithETagCache(request, "text/html", "gzip", file_index_html_start, file_index_html_end - file_index_html_start); + responseBinaryDataWithETagCache(request, asyncsrv::T_text_html, asyncsrv::T_gzip, file_index_html_start, file_index_html_end - file_index_html_start); }); server.on("/index.html", HTTP_GET, [&](AsyncWebServerRequest* request) { - responseBinaryDataWithETagCache(request, "text/html", "gzip", file_index_html_start, file_index_html_end - file_index_html_start); + responseBinaryDataWithETagCache(request, asyncsrv::T_text_html, asyncsrv::T_gzip, file_index_html_start, file_index_html_end - file_index_html_start); }); server.on("/favicon.ico", HTTP_GET, [&](AsyncWebServerRequest* request) { - responseBinaryDataWithETagCache(request, "image/x-icon", "", file_favicon_ico_start, file_favicon_ico_end - file_favicon_ico_start); + responseBinaryDataWithETagCache(request, asyncsrv::T_image_x_icon, "", file_favicon_ico_start, file_favicon_ico_end - file_favicon_ico_start); }); server.on("/favicon.png", HTTP_GET, [&](AsyncWebServerRequest* request) { - responseBinaryDataWithETagCache(request, "image/png", "", file_favicon_png_start, file_favicon_png_end - file_favicon_png_start); + responseBinaryDataWithETagCache(request, asyncsrv::T_image_png, "", file_favicon_png_start, file_favicon_png_end - file_favicon_png_start); }); server.on("/zones.json", HTTP_GET, [&](AsyncWebServerRequest* request) { - responseBinaryDataWithETagCache(request, "application/json", "gzip", file_zones_json_start, file_zones_json_end - file_zones_json_start); + responseBinaryDataWithETagCache(request, asyncsrv::T_application_json, asyncsrv::T_gzip, file_zones_json_start, file_zones_json_end - file_zones_json_start); }); server.on("/site.webmanifest", HTTP_GET, [&](AsyncWebServerRequest* request) { - responseBinaryDataWithETagCache(request, "application/json", "", file_site_webmanifest_start, file_site_webmanifest_end - file_site_webmanifest_start); + responseBinaryDataWithETagCache(request, asyncsrv::T_application_json, "", file_site_webmanifest_start, file_site_webmanifest_end - file_site_webmanifest_start); }); server.on("/js/app.js", HTTP_GET, [&](AsyncWebServerRequest* request) { - responseBinaryDataWithETagCache(request, "text/javascript", "gzip", file_app_js_start, file_app_js_end - file_app_js_start); + responseBinaryDataWithETagCache(request, asyncsrv::T_text_javascript, asyncsrv::T_gzip, file_app_js_start, file_app_js_end - file_app_js_start); }); }