mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-11-22 23:50:19 +00:00
WebServer: Ensure directory listing URLs end with a slash
We will now send a redirect (301) if a directory listing is requested and the request URL doesn't end with a slash character. This makes relative file URLs that we generate in directory listings actually work as expected.
This commit is contained in:
parent
f88fe5dc3f
commit
7590270e13
Notes:
sideshowbarker
2024-07-19 09:21:47 +09:00
Author: https://github.com/cbsirb 🔰 Commit: https://github.com/SerenityOS/serenity/commit/7590270e138 Pull-request: https://github.com/SerenityOS/serenity/pull/1216 Reviewed-by: https://github.com/bugaevc
2 changed files with 26 additions and 0 deletions
|
@ -91,6 +91,17 @@ void Client::handle_request(ByteBuffer raw_request)
|
|||
auto real_path = path_builder.to_string();
|
||||
|
||||
if (Core::File::is_directory(real_path)) {
|
||||
|
||||
if (!request.resource().ends_with("/")) {
|
||||
StringBuilder red;
|
||||
|
||||
red.append(requested_path);
|
||||
red.append("/");
|
||||
|
||||
send_redirect(red.to_string(), request);
|
||||
return;
|
||||
}
|
||||
|
||||
StringBuilder index_html_path_builder;
|
||||
index_html_path_builder.append(real_path);
|
||||
index_html_path_builder.append("/index.html");
|
||||
|
@ -125,6 +136,20 @@ void Client::send_response(StringView response, const Core::HttpRequest& request
|
|||
log_response(200, request);
|
||||
}
|
||||
|
||||
void Client::send_redirect(StringView redirect_path, const Core::HttpRequest& request)
|
||||
{
|
||||
StringBuilder builder;
|
||||
builder.append("HTTP/1.0 301 Moved Permanently\r\n");
|
||||
builder.append("Location: ");
|
||||
builder.append(redirect_path);
|
||||
builder.append("\r\n");
|
||||
builder.append("\r\n");
|
||||
|
||||
m_socket->write(builder.to_string());
|
||||
|
||||
log_response(301, request);
|
||||
}
|
||||
|
||||
void Client::handle_directory_listing(const String& requested_path, const String& real_path, const Core::HttpRequest& request)
|
||||
{
|
||||
StringBuilder builder;
|
||||
|
|
|
@ -45,6 +45,7 @@ private:
|
|||
|
||||
void handle_request(ByteBuffer);
|
||||
void send_response(StringView, const Core::HttpRequest&);
|
||||
void send_redirect(StringView redirect, const Core::HttpRequest& request);
|
||||
void send_error_response(unsigned code, const StringView& message, const Core::HttpRequest&);
|
||||
void die();
|
||||
void log_response(unsigned code, const Core::HttpRequest&);
|
||||
|
|
Loading…
Reference in a new issue