diff --git a/webserv/client/Client.cpp b/webserv/client/Client.cpp index f0d79d6..dd30556 100644 --- a/webserv/client/Client.cpp +++ b/webserv/client/Client.cpp @@ -1,21 +1,19 @@ -#include "webserv/config/ConfigManager.hpp" -#include "webserv/handler/ErrorHandler.hpp" - #include -#include // for HttpHeaders -#include // for Log, LOCATION -#include // for Server -#include // for Socket +#include // for ConfigManager +#include // for ServerConfig +#include // for ErrorHandler +#include // for HttpHeaders +#include // for Log, LOCATION +#include // for Server +#include // for Socket #include // for uint8_t -#include // for reference_wrapper, cref, ref +#include // for ref, reference_wrapper #include // for map #include // for pair, move #include // for ssize_t -class ServerConfig; - Client::Client(std::unique_ptr socket, Server &server) : client_socket_(std::move(socket)), server_(std::ref(server)), httpRequest_(std::make_unique(this)) { diff --git a/webserv/client/Client.hpp b/webserv/client/Client.hpp index da81985..c428782 100644 --- a/webserv/client/Client.hpp +++ b/webserv/client/Client.hpp @@ -1,7 +1,7 @@ #pragma once #include // for ServerConfig -#include // for StatusCode, HTTP +#include // for OK #include // for HttpRequest #include #include diff --git a/webserv/config/AConfig.cpp b/webserv/config/AConfig.cpp index 622075e..eccde86 100644 --- a/webserv/config/AConfig.cpp +++ b/webserv/config/AConfig.cpp @@ -20,8 +20,10 @@ void AConfig::addDirective(const std::string &line) const ADirective *AConfig::getDirective(const std::string &name) const { - for (const auto &directive : directives_) { - if (directive->getName() == name) { + for (const auto &directive : directives_) + { + if (directive->getName() == name) + { return directive.get(); } } @@ -34,8 +36,10 @@ const ADirective *AConfig::getDirective(const std::string &name) const bool AConfig::hasDirective(const std::string &name) const { - for (const auto &directive : directives_) { - if (directive->getName() == name) { + for (const auto &directive : directives_) + { + if (directive->getName() == name) + { return true; } } diff --git a/webserv/config/AConfig.hpp b/webserv/config/AConfig.hpp index dc5720e..8e669f3 100644 --- a/webserv/config/AConfig.hpp +++ b/webserv/config/AConfig.hpp @@ -5,7 +5,8 @@ #include // for map #include // for unique_ptr -#include // for basic_string, string +#include // for string +#include // for vector class AConfig { @@ -21,7 +22,7 @@ class AConfig void addDirective(const std::string &line); [[nodiscard]] const ADirective *getDirective(const std::string &name) const; - [[nodiscard]] std::string getErrorPage(int statusCode) const; + [[nodiscard]] std::string getErrorPage(int statusCode) const; [[nodiscard]] bool hasDirective(const std::string &name) const; diff --git a/webserv/config/ConfigManager.cpp b/webserv/config/ConfigManager.cpp index 9124fed..01ff916 100644 --- a/webserv/config/ConfigManager.cpp +++ b/webserv/config/ConfigManager.cpp @@ -1,4 +1,3 @@ -#include "webserv/config/ServerConfig.hpp" #include #include // for GlobalConfig #include // for removeComments @@ -7,7 +6,9 @@ #include // for basic_ifstream, basic_filebuf, basic_ostream::operator<<, ifstream, stringstream #include // for basic_stringstream #include // for runtime_error -#include // for char_traits, operator+, basic_string, string +#include // for basic_string, char_traits, operator+, string, to_string, operator==, stoi + +#include // for size_t ConfigManager::ConfigManager() : initialized_(false) {} @@ -82,19 +83,19 @@ ServerConfig *ConfigManager::getMatchingServerConfig(const std::string &host, in throw std::runtime_error("ConfigManager is not initialized."); } std::vector serverConfigs = globalConfig_->getServerConfigs(); - for (ServerConfig *serverConfig : serverConfigs) - { - auto serverName = serverConfig->getDirectiveValue("server_name", ""); - auto listenPorts = serverConfig->getDirectiveValue("listen", 80); + for (ServerConfig *serverConfig : serverConfigs) + { + auto serverName = serverConfig->getDirectiveValue("server_name", ""); + auto listenPorts = serverConfig->getDirectiveValue("listen", 80); Log::debug("Checking server config: " + serverName + " on port " + std::to_string(listenPorts)); - if ((serverName == host) && (listenPorts == port)) - { - Log::info("Found matching server config for host: " + host + " and port: " + std::to_string(port)); - return serverConfig; - } - } + if ((serverName == host) && (listenPorts == port)) + { + Log::info("Found matching server config for host: " + host + " and port: " + std::to_string(port)); + return serverConfig; + } + } Log::warning("No matching server config found for host: " + host + " and port: " + std::to_string(port)); - return nullptr; + return nullptr; } GlobalConfig *ConfigManager::getGlobalConfig() const diff --git a/webserv/config/ServerConfig.cpp b/webserv/config/ServerConfig.cpp index 1e89bde..f30bfad 100644 --- a/webserv/config/ServerConfig.cpp +++ b/webserv/config/ServerConfig.cpp @@ -32,7 +32,8 @@ void ServerConfig::parseBlock(const std::string &block) directives += block.substr(pos); break; } - std::string locationPath = utils::trim(block.substr(locationPos + 9, bracePos - (locationPos + 9))); //TODO magic numbers + std::string locationPath = + utils::trim(block.substr(locationPos + 9, bracePos - (locationPos + 9))); // TODO magic numbers // Add global declarations before this server block directives += block.substr(pos, locationPos - pos); size_t closeBrace = utils::findCorrespondingClosingBrace(block, bracePos); diff --git a/webserv/config/directive/ADirective.hpp b/webserv/config/directive/ADirective.hpp index 9e1936c..abc7d55 100644 --- a/webserv/config/directive/ADirective.hpp +++ b/webserv/config/directive/ADirective.hpp @@ -34,11 +34,11 @@ class ADirective { return getValue().get(); } - return T(); //TODO: does this work for all types? + return T(); // TODO: does this work for all types? } protected: - std::string name_; //NOLINT(cppcoreguidelines-non-private-member-variables-in-classes) + std::string name_; // NOLINT(cppcoreguidelines-non-private-member-variables-in-classes) }; // Non-member stream operator for ADirective diff --git a/webserv/handler/ErrorHandler.hpp b/webserv/handler/ErrorHandler.hpp index 77b096c..339eab2 100644 --- a/webserv/handler/ErrorHandler.hpp +++ b/webserv/handler/ErrorHandler.hpp @@ -1,6 +1,7 @@ #pragma once -#include "webserv/config/AConfig.hpp" +#include + class ErrorHandler { public: @@ -11,5 +12,4 @@ class ErrorHandler static std::string_view getStatusMessage(int statusCode); // static bool isValidStatusCode(int statusCode); static std::string getErrorPageFile(const std::string &path); - }; \ No newline at end of file diff --git a/webserv/handler/Errorhandler.cpp b/webserv/handler/Errorhandler.cpp index c97ff61..101ad9b 100644 --- a/webserv/handler/Errorhandler.cpp +++ b/webserv/handler/Errorhandler.cpp @@ -1,12 +1,14 @@ -#include "webserv/config/ConfigManager.hpp" -#include -#include -#include // for StatusCode -#include +#include // for AConfig +#include // for ConfigManager +#include // for GlobalConfig +#include // for ErrorHandler +#include // for StatusCodeInfo, CRLF, DOUBLE_CRLF, INTERNAL_SERVER_ERROR, statusCodeInfos +#include // for Log +#include // for array #include // for basic_ifstream, basic_filebuf, basic_ostream::operator<<, ifstream, stringstream #include // for basic_stringstream -#include // for basic_string, to_string, string +#include // for basic_string, operator+, allocator, char_traits, string, to_string #include // for string_view std::string ErrorHandler::getErrorResponse(int statusCode, AConfig *config) @@ -22,7 +24,8 @@ std::string ErrorHandler::generateErrorHeader(int statusCode, const std::string response += std::to_string(statusCode) + " "; response += std::string(getStatusMessage(statusCode)) + std::string(Http::Protocol::CRLF); response += "Content-Type: text/html" + std::string(Http::Protocol::CRLF); - response += "Content-Length: " + std::to_string(body.size()) + std::string(Http::Protocol::DOUBLE_CRLF); // End of headers + response += + "Content-Length: " + std::to_string(body.size()) + std::string(Http::Protocol::DOUBLE_CRLF); // End of headers return response; } @@ -32,7 +35,7 @@ std::string ErrorHandler::generateErrorPage(int statusCode, AConfig *config) if (config != nullptr) { config = ConfigManager::getInstance().getGlobalConfig(); - Log::info("Checking for custom error page for status code: " + std::to_string(statusCode)); + Log::info("Checking for custom error page for status code: " + std::to_string(statusCode)); std::string customPage = config->getErrorPage(statusCode); if (!customPage.empty()) { diff --git a/webserv/http/HttpConstants.hpp b/webserv/http/HttpConstants.hpp index 2d5e4aa..bd215cd 100644 --- a/webserv/http/HttpConstants.hpp +++ b/webserv/http/HttpConstants.hpp @@ -1,8 +1,8 @@ #pragma once +#include #include #include -#include namespace Http { @@ -49,20 +49,19 @@ struct StatusCodeInfo std::string_view reason; }; -static constexpr std::array statusCodeInfos = {{ - { .code = StatusCode::OK, .reason = "OK" }, - { .code = StatusCode::CREATED, .reason = "Created" }, - { .code = StatusCode::NO_CONTENT, .reason = "No Content" }, - { .code = StatusCode::BAD_REQUEST, .reason = "Bad Request" }, - { .code = StatusCode::UNAUTHORIZED, .reason = "Unauthorized" }, - { .code = StatusCode::FORBIDDEN, .reason = "Forbidden" }, - { .code = StatusCode::NOT_FOUND, .reason = "Not Found" }, - { .code = StatusCode::METHOD_NOT_ALLOWED, .reason = "Method Not Allowed" }, - { .code = StatusCode::INTERNAL_SERVER_ERROR, .reason = "Internal Server Error" }, - { .code = StatusCode::NOT_IMPLEMENTED, .reason = "Not Implemented" }, - { .code = StatusCode::BAD_GATEWAY, .reason = "Bad Gateway" }, - { .code = StatusCode::SERVICE_UNAVAILABLE, .reason = "Service Unavailable" } -}}; +static constexpr std::array statusCodeInfos = { + {{.code = StatusCode::OK, .reason = "OK"}, + {.code = StatusCode::CREATED, .reason = "Created"}, + {.code = StatusCode::NO_CONTENT, .reason = "No Content"}, + {.code = StatusCode::BAD_REQUEST, .reason = "Bad Request"}, + {.code = StatusCode::UNAUTHORIZED, .reason = "Unauthorized"}, + {.code = StatusCode::FORBIDDEN, .reason = "Forbidden"}, + {.code = StatusCode::NOT_FOUND, .reason = "Not Found"}, + {.code = StatusCode::METHOD_NOT_ALLOWED, .reason = "Method Not Allowed"}, + {.code = StatusCode::INTERNAL_SERVER_ERROR, .reason = "Internal Server Error"}, + {.code = StatusCode::NOT_IMPLEMENTED, .reason = "Not Implemented"}, + {.code = StatusCode::BAD_GATEWAY, .reason = "Bad Gateway"}, + {.code = StatusCode::SERVICE_UNAVAILABLE, .reason = "Service Unavailable"}}}; // Header Names namespace Header diff --git a/webserv/http/HttpRequest.cpp b/webserv/http/HttpRequest.cpp index a0fc7f7..75bf86b 100644 --- a/webserv/http/HttpRequest.cpp +++ b/webserv/http/HttpRequest.cpp @@ -1,9 +1,8 @@ +#include // for Client #include // for stoul -#include // for CRLF, DOUBLE_CRLF +#include // for CRLF, DOUBLE_CRLF, BAD_REQUEST #include -#include // for Log, LOCATION -#include // for Client - +#include // for Log, LOCATION #include // for map #include // for optional @@ -11,8 +10,6 @@ #include // for pair #include // for vector -class ServerConfig; - HttpRequest::HttpRequest(Client *client) : client_(client) { Log::trace(LOCATION); diff --git a/webserv/main.cpp b/webserv/main.cpp index 6de542b..b548761 100644 --- a/webserv/main.cpp +++ b/webserv/main.cpp @@ -5,6 +5,7 @@ #include // for basic_ostream, operator<<, cerr, ios_base #include // for map #include // for basic_string, char_traits, allocator, operator+, operator<=> +#include // for pair int main(int argc, char **argv) { @@ -22,7 +23,6 @@ int main(int argc, char **argv) ConfigManager &configManager = ConfigManager::getInstance(); Log::info("ConfigManager initialized successfully."); - // auto serverConfigs = configManager.getServerConfigs(); // auto *firstServer = serverConfigs[0]; // const auto *location = firstServer->getLocation("/"); @@ -30,8 +30,6 @@ int main(int argc, char **argv) // int listenPort = listenDirective->getValueAs(); // Log::warning("Listen port for '/' location: " + std::to_string(listenPort)); - - Server server(configManager); server.start(); diff --git a/webserv/server/Server.cpp b/webserv/server/Server.cpp index e29cd97..ce4fe0c 100644 --- a/webserv/server/Server.cpp +++ b/webserv/server/Server.cpp @@ -112,8 +112,7 @@ void Server::handleConnection(struct epoll_event *event) Socket &listener = getListener(event->data.fd); std::unique_ptr clientSocket = listener.accept(); addToEpoll(*clientSocket, EPOLLIN); - clients_.insert( - {clientSocket->getFd(), std::make_unique(std::move(clientSocket), *this)}); + clients_.insert({clientSocket->getFd(), std::make_unique(std::move(clientSocket), *this)}); } Socket &Server::getListener(int fd) const