diff --git a/includes/config/Route.hpp b/includes/config/Route.hpp index 63e2cfd..7cded90 100644 --- a/includes/config/Route.hpp +++ b/includes/config/Route.hpp @@ -6,7 +6,7 @@ /* By: adjoly +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/03/19 14:59:41 by adjoly #+# #+# */ -/* Updated: 2025/04/22 11:49:19 by mmoussou ### ########.fr */ +/* Updated: 2025/04/22 12:34:00 by adjoly ### ########.fr */ /* */ /* ************************************************************************** */ @@ -29,6 +29,19 @@ class Route { Route(toml::ANode *); ~Route(void); + bool getDirList(void) { return _dirlist; } + bool getCookies(void) { return _cookies; } + bool getRedirect(void) { return _redirect; } + + int32_t getMaxBody(void) { return _max_body; } + + std::string getRootDir(void) { return _root; } + std::string getUpRoot(void) { return _up_root; } + std::string getIndex(void) { return _index; } + std::map *getCgi(void) { return _cgi; } + + bool *getMethods(void) { return _methods; } + protected: private: bool _dirlist; diff --git a/includes/config/Server.hpp b/includes/config/Server.hpp index 7280e50..1fd2570 100644 --- a/includes/config/Server.hpp +++ b/includes/config/Server.hpp @@ -6,7 +6,7 @@ /* By: adjoly +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/03/19 14:11:28 by adjoly #+# #+# */ -/* Updated: 2025/04/22 12:02:36 by mmoussou ### ########.fr */ +/* Updated: 2025/04/22 12:34:14 by adjoly ### ########.fr */ /* */ /* ************************************************************************** */ @@ -66,6 +66,12 @@ class Server { return false; } + Route *whatRoute(const std::string &route_path) { + for (auto it = prange(_routes)) { + + } + } + protected: private: std::map @@ -84,6 +90,8 @@ class Server { std::map * _parseErrPages(std::map *table); + + }; } // namespace config diff --git a/includes/config/URL.hpp b/includes/config/URL.hpp new file mode 100644 index 0000000..d674c2c --- /dev/null +++ b/includes/config/URL.hpp @@ -0,0 +1,73 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* URL.hpp :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: adjoly +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/04/22 12:17:48 by adjoly #+# #+# */ +/* Updated: 2025/04/22 12:26:21 by adjoly ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#pragma once + +#include +#include +#include +#include +#include + +class URL { + public: + URL(const std::string &url) : _full_url(url) { parse(); } + + bool operator==(const URL &other) const { + return comparePathSegments(other); + } + + std::vector getSegments(void) { return _path_segments; } + std::string getFullUrl(void) { return _full_url; } + + private: + void parse() { + size_t scheme_pos = _full_url.find("://"); + size_t path_start = 0; + + if (scheme_pos != std::string::npos) { + path_start = _full_url.find('/', scheme_pos + 3); + } else { + path_start = 0; + } + + if (path_start != std::string::npos) { + std::string path = _full_url.substr(path_start); + splitPath(path, _path_segments); + } + } + + void splitPath(const std::string &path, + std::vector &segments) const { + std::stringstream ss(path); + std::string segment; + while (std::getline(ss, segment, '/')) { + if (!segment.empty()) { + segments.push_back(segment); + } + } + } + + bool comparePathSegments(const URL &other) const { + size_t min_size = + std::min(_path_segments.size(), other._path_segments.size()); + for (size_t i = 0; i < min_size; ++i) { + if (_path_segments[i] != other._path_segments[i]) { + return false; + } + } + return true; + } + + std::string _full_url; + std::vector _path_segments; +}; diff --git a/includes/webserv.hpp b/includes/webserv.hpp index 0f9654b..94f0507 100644 --- a/includes/webserv.hpp +++ b/includes/webserv.hpp @@ -6,34 +6,45 @@ /* By: mmoussou >>>>>> 8129f45 (「🏗️」 wip: added url class for easier manipulation) /* */ /* ************************************************************************** */ #pragma once #include #ifndef __WEBSERV_WEBSERV_HPP__ -# define __WEBSERV_WEBSERV_HPP__ +#define __WEBSERV_WEBSERV_HPP__ - -#include -#include -#include #include #include +#include +#include #include -#include -#include #include +#include +#include +#include +#include +#include #define auto __auto_type -#define range(x) x.begin(); it != x.end(); it++ -#define prange(x) x->begin(); it != x->end(); it++ +#define range(x) \ + x.begin(); \ + it != x.end(); \ + it++ +#define prange(x) \ + x->begin(); \ + it != x->end(); \ + it++ #define BUFFER_SIZE 4096 namespace webserv { -} //-namespace webserv +} // namespace webserv #endif // __WEBSERV_WEBSERV_HPP__