diff --git a/.gitignore b/.gitignore index 4cfb38d..01e8e83 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,9 @@ build/ debug-build/ +build-debug/ release-build/ +build-release/ cmake-build-debug/ .idea/ -example/build \ No newline at end of file +example/build diff --git a/CMakeLists.txt b/CMakeLists.txt index e7382cb..3a42bde 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.23) +cmake_minimum_required(VERSION 3.21) project(VWeb) set(CMAKE_CXX_STANDARD 20) @@ -26,4 +26,4 @@ if (CMAKE_BUILD_TYPE STREQUAL "Debug") set(mode debug) endif () set(target_file ${CMAKE_SOURCE_DIR}/dist/libVWeb.${mode}.a) -add_custom_command(TARGET VWeb POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy $ ${target_file}) \ No newline at end of file +add_custom_command(TARGET VWeb POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy $ ${target_file}) diff --git a/Source/Response.cpp b/Source/Response.cpp index bbdb527..6fd2a76 100644 --- a/Source/Response.cpp +++ b/Source/Response.cpp @@ -100,7 +100,9 @@ void Response::AddContent(const std::string &data) { m_Content << data; } void Response::SetStatus(HttpStatusCode statusCode) { Status = statusCode; } void Response::SetMethod(HttpMethod method) { Method = method; } -void Response::Reset() { m_Content.clear(); } +void Response::Reset() { + m_Content = {}; +} std::string Response::TransformHeaders(const std::string &content) { std::ostringstream stream; diff --git a/Source/Route.cpp b/Source/Route.cpp index dbd3b89..fc0a49f 100644 --- a/Source/Route.cpp +++ b/Source/Route.cpp @@ -23,7 +23,7 @@ Route::Route(std::initializer_list methods) { m_AllowedMethods.push_back(HttpMethod::HEAD); m_AllowedMethods.push_back(HttpMethod::OPTIONS); } -bool Route::Execute(const Request &request, Response &response) { +bool Route::Execute(Request &request, Response &response) { switch (request.Method) { case HttpMethod::GET: case HttpMethod::HEAD: return Get(request, response); @@ -35,22 +35,22 @@ bool Route::Execute(const Request &request, Response &response) { default: return Fallback(request, response); } } -bool Route::Get(const Request &request, Response &response) { +bool Route::Get(Request &request, Response &response) { return true; } -bool Route::Post(const Request &request, Response &response) { +bool Route::Post(Request &request, Response &response) { return true; } -bool Route::Put(const Request &request, Response &response) { +bool Route::Put(Request &request, Response &response) { return true; } -bool Route::Patch(const Request &request, Response &response) { +bool Route::Patch(Request &request, Response &response) { return true; } -bool Route::Delete(const Request &request, Response &response) { +bool Route::Delete(Request &request, Response &response) { return true; } -bool Route::Options(const Request &request, Response &response) { +bool Route::Options(Request &request, Response &response) { std::stringstream str{}; bool isFirst = true; if (m_AllowAll) { @@ -71,11 +71,11 @@ bool Route::Options(const Request &request, Response &response) { response.SetHeader("Allow", str.str()); return true; } -bool Route::Fallback(const Request &request, Response &response) { +bool Route::Fallback(Request &request, Response &response) { return true; } -bool Route::IsAllowed(const Request &request) { return true; } -bool Route::SupportsMethod(const Request &request) { +bool Route::IsAllowed(Request &request) { return true; } +bool Route::SupportsMethod(Request &request) { return m_AllowAll || std::find(m_AllowedMethods.begin(), m_AllowedMethods.end(), request.Method) != m_AllowedMethods.end(); diff --git a/Source/Router.cpp b/Source/Router.cpp index de1130d..60bfc66 100644 --- a/Source/Router.cpp +++ b/Source/Router.cpp @@ -12,7 +12,7 @@ template constexpr auto to_underlying(E e) noexcept { class ErrorRoute : public Route { public: - bool Execute(const Request &request, Response &response) override { + bool Execute(Request &request, Response &response) override { response.Reset(); response << "Unhandled Error: Status " << std::to_string(to_underlying(response.Status)); @@ -23,19 +23,19 @@ public: class InstanceHandleRoute : public Route { public: - bool Get(const Request &request, Response &response) override { + bool Get(Request &request, Response &response) override { return GetFunc && GetFunc(request, response); } - bool Post(const Request &request, Response &response) override { + bool Post(Request &request, Response &response) override { return PostFunc && PostFunc(request, response); } - bool Put(const Request &request, Response &response) override { + bool Put(Request &request, Response &response) override { return PutFunc && PutFunc(request, response); } - bool Patch(const Request &request, Response &response) override { + bool Patch(Request &request, Response &response) override { return PatchFunc && PatchFunc(request, response); } - bool Delete(const Request &request, Response &response) override { + bool Delete(Request &request, Response &response) override { return DeleteFunc && DeleteFunc(request, response); } diff --git a/VWeb.h b/VWeb.h index 815c6c4..599835d 100644 --- a/VWeb.h +++ b/VWeb.h @@ -442,16 +442,10 @@ public: Ref CookieData; Cookie &GetCookie(const std::string &key) { return CookieData->Get(key); }; ParameterValue &Parameter(const std::string &key) { return Parameters[key]; } - bool HasParameter(const std::string &key) const { - return Parameters.contains(key); - } - bool HasHeader(const std::string &key) const { - return Headers.contains(key); - } - std::string &FirstOf(const std::string &key) { - return Parameters[key].GetFirst(); - } - ParameterValue &Header(const std::string &key) { return Parameters[key]; } + bool HasParameter(const std::string &key) const { return Parameters.contains(key); } + bool HasHeader(const std::string &key) const { return Headers.contains(key); } + std::string &FirstOf(const std::string &key) { return Parameters[key].GetFirst(); } + ParameterValue &Header(const std::string &key) { return Headers[key]; } std::unordered_map Parameters; std::unordered_map Headers; Vector URLParameters; @@ -509,22 +503,22 @@ protected: friend Server; }; -typedef std::function RouteFunction; +typedef std::function RouteFunction; class Route { public: Route() = default; virtual ~Route() = default; Route(std::initializer_list); - virtual bool Execute(const Request &request, Response &response); - virtual bool Get(const Request &request, Response &response); - virtual bool Post(const Request &request, Response &response); - virtual bool Put(const Request &request, Response &response); - virtual bool Patch(const Request &request, Response &response); - virtual bool Delete(const Request &request, Response &response); - bool Options(const Request &request, Response &response); - virtual bool Fallback(const Request &request, Response &response); - bool SupportsMethod(const Request &request); - virtual bool IsAllowed(const Request &request); + virtual bool Execute(Request &request, Response &response); + virtual bool Get(Request &request, Response &response); + virtual bool Post(Request &request, Response &response); + virtual bool Put(Request &request, Response &response); + virtual bool Patch(Request &request, Response &response); + virtual bool Delete(Request &request, Response &response); + bool Options(Request &request, Response &response); + virtual bool Fallback(Request &request, Response &response); + bool SupportsMethod(Request &request); + virtual bool IsAllowed(Request &request); void AllowMethod(HttpMethod method); @@ -627,4 +621,4 @@ public: #pragma endregion VWEB_ROUTING #pragma endregion VWEB -} // namespace VWeb \ No newline at end of file +} // namespace VWeb diff --git a/dist/libVWeb.debug.a b/dist/libVWeb.debug.a index 635722c..547e15c 100644 Binary files a/dist/libVWeb.debug.a and b/dist/libVWeb.debug.a differ diff --git a/dist/libVWeb.release.a b/dist/libVWeb.release.a index 3c333d9..701b56c 100644 Binary files a/dist/libVWeb.release.a and b/dist/libVWeb.release.a differ