wsd: reuse the response in FileServer

This allows for setting common headers
only once and have it on all file
types and scenarios.

Change-Id: Ia9d67ac5dbf59dd6e22beea0b4ae162ccb846b33
Signed-off-by: Ashod Nakashian <ashod.nakashian@collabora.co.uk>
pull/8581/head
Ashod Nakashian 2024-03-18 06:03:17 -04:00 committed by Ashod Nakashian
parent a48917d052
commit 4387168d94
2 changed files with 14 additions and 12 deletions

View File

@ -582,7 +582,7 @@ void FileServerRequestHandler::handleRequest(const HTTPRequest& request,
if (endPoint == "welcome.html")
{
preprocessWelcomeFile(request, requestDetails, message, socket);
preprocessWelcomeFile(request, response, requestDetails, message, socket);
return;
}
@ -593,7 +593,7 @@ void FileServerRequestHandler::handleRequest(const HTTPRequest& request,
endPoint == "uno-localizations.json" ||
endPoint == "uno-localizations-override.json")
{
accessDetails = preprocessFile(request, requestDetails, message, socket);
accessDetails = preprocessFile(request, response, requestDetails, message, socket);
return;
}
@ -604,7 +604,7 @@ void FileServerRequestHandler::handleRequest(const HTTPRequest& request,
endPoint == "adminLog.html" || endPoint == "adminClusterOverview.html" ||
endPoint == "adminClusterOverviewAbout.html")
{
preprocessAdminFile(request, requestDetails, socket);
preprocessAdminFile(request, response, requestDetails, socket);
return;
}
@ -1136,8 +1136,9 @@ private:
};
FileServerRequestHandler::ResourceAccessDetails FileServerRequestHandler::preprocessFile(
const HTTPRequest& request, const RequestDetails& requestDetails,
Poco::MemoryInputStream& message, const std::shared_ptr<StreamSocket>& socket)
const HTTPRequest& request, http::Response& /*httpResponse*/,
const RequestDetails& requestDetails, Poco::MemoryInputStream& message,
const std::shared_ptr<StreamSocket>& socket)
{
const ServerURL cnxDetails(requestDetails);
@ -1511,8 +1512,8 @@ FileServerRequestHandler::ResourceAccessDetails FileServerRequestHandler::prepro
return ResourceAccessDetails(wopiSrc, urv[ACCESS_TOKEN], urv[PERMISSION]);
}
void FileServerRequestHandler::preprocessWelcomeFile(const HTTPRequest& request,
http::Response& httpResponse,
const RequestDetails& requestDetails,
Poco::MemoryInputStream& message,
const std::shared_ptr<StreamSocket>& socket)
@ -1526,8 +1527,6 @@ void FileServerRequestHandler::preprocessWelcomeFile(const HTTPRequest& request,
uiTheme = (uiTheme == "dark") ? "dark" : "light";
Poco::replaceInPlace(templateWelcome, std::string("%UI_THEME%"), uiTheme);
http::Response httpResponse(http::StatusCode::OK);
// Ask UAs to block if they detect any XSS attempt
httpResponse.add("X-XSS-Protection", "1; mode=block");
// No referrer-policy
@ -1541,13 +1540,13 @@ void FileServerRequestHandler::preprocessWelcomeFile(const HTTPRequest& request,
}
void FileServerRequestHandler::preprocessAdminFile(const HTTPRequest& request,
const RequestDetails &requestDetails,
http::Response& response,
const RequestDetails& requestDetails,
const std::shared_ptr<StreamSocket>& socket)
{
if (!COOLWSD::AdminEnabled)
throw Poco::FileAccessDeniedException("Admin console disabled");
http::Response response(http::StatusCode::OK);
std::string jwtToken;
if (!isAdminLoggedIn(request, jwtToken))
{

View File

@ -114,15 +114,18 @@ private:
const RequestDetails& requestDetails);
static ResourceAccessDetails preprocessFile(const Poco::Net::HTTPRequest& request,
http::Response& httpResponse,
const RequestDetails& requestDetails,
Poco::MemoryInputStream& message,
const std::shared_ptr<StreamSocket>& socket);
static void preprocessWelcomeFile(const Poco::Net::HTTPRequest& request,
const RequestDetails &requestDetails,
http::Response& httpResponse,
const RequestDetails& requestDetails,
Poco::MemoryInputStream& message,
const std::shared_ptr<StreamSocket>& socket);
static void preprocessAdminFile(const Poco::Net::HTTPRequest& request,
const RequestDetails &requestDetails,
http::Response& httpResponse,
const RequestDetails& requestDetails,
const std::shared_ptr<StreamSocket>& socket);
/// Construct a JSON to be accepted by the cool.html from a list like