mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-11-26 09:30:24 +00:00
WebServer: Move server configuration into WebServer::Configuration
This moves the configuration of the web server, which currently only consists of the root path, into a new class, Configuration. Since the configuration is global and not per client, it is accessed by a singleton getter. This change simplifies future extensions of the configurable parameters.
This commit is contained in:
parent
2d18d3f329
commit
e77ca79897
Notes:
sideshowbarker
2024-07-18 12:26:28 +09:00
Author: https://github.com/MaxWipfli Commit: https://github.com/SerenityOS/serenity/commit/e77ca79897c Pull-request: https://github.com/SerenityOS/serenity/pull/7879 Reviewed-by: https://github.com/awesomekling Reviewed-by: https://github.com/gunnarbeutner Reviewed-by: https://github.com/linusg Reviewed-by: https://github.com/stelar7
6 changed files with 65 additions and 9 deletions
|
@ -1,5 +1,6 @@
|
|||
set(SOURCES
|
||||
Client.cpp
|
||||
Configuration.cpp
|
||||
main.cpp
|
||||
)
|
||||
|
||||
|
|
|
@ -5,7 +5,6 @@
|
|||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*/
|
||||
|
||||
#include "Client.h"
|
||||
#include <AK/Base64.h>
|
||||
#include <AK/Debug.h>
|
||||
#include <AK/LexicalPath.h>
|
||||
|
@ -21,16 +20,17 @@
|
|||
#include <LibCore/MimeData.h>
|
||||
#include <LibHTTP/HttpRequest.h>
|
||||
#include <LibHTTP/HttpResponse.h>
|
||||
#include <WebServer/Client.h>
|
||||
#include <WebServer/Configuration.h>
|
||||
#include <stdio.h>
|
||||
#include <sys/stat.h>
|
||||
#include <unistd.h>
|
||||
|
||||
namespace WebServer {
|
||||
|
||||
Client::Client(NonnullRefPtr<Core::TCPSocket> socket, String const& root, Core::Object* parent)
|
||||
Client::Client(NonnullRefPtr<Core::TCPSocket> socket, Core::Object* parent)
|
||||
: Core::Object(parent)
|
||||
, m_socket(socket)
|
||||
, m_root_path(root)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -84,8 +84,7 @@ void Client::handle_request(ReadonlyBytes raw_request)
|
|||
dbgln_if(WEBSERVER_DEBUG, "Canonical requested path: '{}'", requested_path);
|
||||
|
||||
StringBuilder path_builder;
|
||||
path_builder.append(m_root_path);
|
||||
path_builder.append('/');
|
||||
path_builder.append(Configuration::the().root_path());
|
||||
path_builder.append(requested_path);
|
||||
auto real_path = path_builder.to_string();
|
||||
|
||||
|
|
|
@ -19,7 +19,7 @@ public:
|
|||
void start();
|
||||
|
||||
private:
|
||||
Client(NonnullRefPtr<Core::TCPSocket>, String const&, Core::Object* parent);
|
||||
Client(NonnullRefPtr<Core::TCPSocket>, Core::Object* parent);
|
||||
|
||||
void handle_request(ReadonlyBytes);
|
||||
void send_response(InputStream&, HTTP::HttpRequest const&, String const& content_type);
|
||||
|
@ -30,7 +30,6 @@ private:
|
|||
void handle_directory_listing(String const& requested_path, String const& real_path, HTTP::HttpRequest const&);
|
||||
|
||||
NonnullRefPtr<Core::TCPSocket> m_socket;
|
||||
String m_root_path;
|
||||
};
|
||||
|
||||
}
|
||||
|
|
26
Userland/Services/WebServer/Configuration.cpp
Normal file
26
Userland/Services/WebServer/Configuration.cpp
Normal file
|
@ -0,0 +1,26 @@
|
|||
/*
|
||||
* Copyright (c) 2021, Max Wipfli <mail@maxwipfli.ch>
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*/
|
||||
|
||||
#include <WebServer/Configuration.h>
|
||||
|
||||
namespace WebServer {
|
||||
|
||||
static Configuration* s_configuration = nullptr;
|
||||
|
||||
Configuration::Configuration(String root_path)
|
||||
: m_root_path(move(root_path))
|
||||
{
|
||||
VERIFY(!s_configuration);
|
||||
s_configuration = this;
|
||||
}
|
||||
|
||||
Configuration const& Configuration::the()
|
||||
{
|
||||
VERIFY(s_configuration);
|
||||
return *s_configuration;
|
||||
}
|
||||
|
||||
}
|
27
Userland/Services/WebServer/Configuration.h
Normal file
27
Userland/Services/WebServer/Configuration.h
Normal file
|
@ -0,0 +1,27 @@
|
|||
/*
|
||||
* Copyright (c) 2021, Max Wipfli <mail@maxwipfli.ch>
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <AK/String.h>
|
||||
|
||||
namespace WebServer {
|
||||
|
||||
class Configuration {
|
||||
public:
|
||||
Configuration(String root_path);
|
||||
|
||||
String const& root_path() const { return m_root_path; }
|
||||
|
||||
void set_root_path(String root_path) { m_root_path = move(root_path); }
|
||||
|
||||
static Configuration const& the();
|
||||
|
||||
private:
|
||||
String m_root_path;
|
||||
};
|
||||
|
||||
}
|
|
@ -1,15 +1,17 @@
|
|||
/*
|
||||
* Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org>
|
||||
* Copyright (c) 2021, Max Wipfli <mail@maxwipfli.ch>
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*/
|
||||
|
||||
#include "Client.h"
|
||||
#include <AK/MappedFile.h>
|
||||
#include <LibCore/ArgsParser.h>
|
||||
#include <LibCore/EventLoop.h>
|
||||
#include <LibCore/File.h>
|
||||
#include <LibCore/TCPServer.h>
|
||||
#include <WebServer/Client.h>
|
||||
#include <WebServer/Configuration.h>
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
|
||||
|
@ -51,6 +53,8 @@ int main(int argc, char** argv)
|
|||
return 1;
|
||||
}
|
||||
|
||||
WebServer::Configuration configuration(real_root_path);
|
||||
|
||||
Core::EventLoop loop;
|
||||
|
||||
auto server = Core::TCPServer::construct();
|
||||
|
@ -58,7 +62,7 @@ int main(int argc, char** argv)
|
|||
server->on_ready_to_accept = [&] {
|
||||
auto client_socket = server->accept();
|
||||
VERIFY(client_socket);
|
||||
auto client = WebServer::Client::construct(client_socket.release_nonnull(), real_root_path, server);
|
||||
auto client = WebServer::Client::construct(client_socket.release_nonnull(), server);
|
||||
client->start();
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in a new issue