diff options
| author | Stefan Boberg <[email protected]> | 2023-05-02 10:01:47 +0200 |
|---|---|---|
| committer | GitHub <[email protected]> | 2023-05-02 10:01:47 +0200 |
| commit | 075d17f8ada47e990fe94606c3d21df409223465 (patch) | |
| tree | e50549b766a2f3c354798a54ff73404217b4c9af /zenserver/frontend/frontend.cpp | |
| parent | fix: bundle shouldn't append content zip to zen (diff) | |
| download | zen-075d17f8ada47e990fe94606c3d21df409223465.tar.xz zen-075d17f8ada47e990fe94606c3d21df409223465.zip | |
moved source directories into `/src` (#264)
* moved source directories into `/src`
* updated bundle.lua for new `src` path
* moved some docs, icon
* removed old test trees
Diffstat (limited to 'zenserver/frontend/frontend.cpp')
| -rw-r--r-- | zenserver/frontend/frontend.cpp | 128 |
1 files changed, 0 insertions, 128 deletions
diff --git a/zenserver/frontend/frontend.cpp b/zenserver/frontend/frontend.cpp deleted file mode 100644 index 149d97924..000000000 --- a/zenserver/frontend/frontend.cpp +++ /dev/null @@ -1,128 +0,0 @@ -// Copyright Epic Games, Inc. All Rights Reserved. - -#include "frontend.h" - -#include <zencore/endian.h> -#include <zencore/filesystem.h> -#include <zencore/string.h> - -ZEN_THIRD_PARTY_INCLUDES_START -#if ZEN_PLATFORM_WINDOWS -# include <Windows.h> -#endif -ZEN_THIRD_PARTY_INCLUDES_END - -namespace zen { - -//////////////////////////////////////////////////////////////////////////////// -HttpFrontendService::HttpFrontendService(std::filesystem::path Directory) : m_Directory(Directory) -{ - std::filesystem::path SelfPath = GetRunningExecutablePath(); - - // Locate a .zip file appended onto the end of this binary - IoBuffer SelfBuffer = IoBufferBuilder::MakeFromFile(SelfPath); - m_ZipFs = ZipFs(std::move(SelfBuffer)); - -#if ZEN_BUILD_DEBUG - if (!Directory.empty()) - { - return; - } - - std::error_code ErrorCode; - auto Path = SelfPath; - while (Path.has_parent_path()) - { - auto ParentPath = Path.parent_path(); - if (ParentPath == Path) - { - break; - } - if (std::filesystem::is_regular_file(ParentPath / "xmake.lua", ErrorCode)) - { - if (ErrorCode) - { - break; - } - - auto HtmlDir = ParentPath / "zenserver" / "frontend" / "html"; - if (std::filesystem::is_directory(HtmlDir, ErrorCode)) - { - m_Directory = HtmlDir; - } - break; - } - Path = ParentPath; - }; -#endif -} - -//////////////////////////////////////////////////////////////////////////////// -HttpFrontendService::~HttpFrontendService() -{ -} - -//////////////////////////////////////////////////////////////////////////////// -const char* -HttpFrontendService::BaseUri() const -{ - return "/dashboard"; // in order to use the root path we need to remove HttpAddUrlToUrlGroup in HttpSys.cpp -} - -//////////////////////////////////////////////////////////////////////////////// -void -HttpFrontendService::HandleRequest(zen::HttpServerRequest& Request) -{ - using namespace std::literals; - - std::string_view Uri = Request.RelativeUriWithExtension(); - for (; Uri[0] == '/'; Uri = Uri.substr(1)) - ; - if (Uri.empty()) - { - Uri = "index.html"sv; - } - - // Dismiss if the URI contains .. anywhere to prevent arbitrary file reads - if (Uri.find("..") != Uri.npos) - { - return Request.WriteResponse(HttpResponseCode::Forbidden); - } - - // Map the file extension to a MIME type. To keep things constrained, only a - // small subset of file extensions is allowed - - HttpContentType ContentType = HttpContentType::kUnknownContentType; - - if (const size_t DotIndex = Uri.rfind("."); DotIndex != Uri.npos) - { - const std::string_view DotExt = Uri.substr(DotIndex + 1); - - ContentType = ParseContentType(DotExt); - } - - if (ContentType == HttpContentType::kUnknownContentType) - { - return Request.WriteResponse(HttpResponseCode::Forbidden); - } - - // The given content directory overrides any zip-fs discovered in the binary - if (!m_Directory.empty()) - { - FileContents File = ReadFile(m_Directory / Uri); - - if (!File.ErrorCode) - { - return Request.WriteResponse(HttpResponseCode::OK, ContentType, File.Data[0]); - } - } - - if (IoBuffer FileBuffer = m_ZipFs.GetFile(Uri)) - { - return Request.WriteResponse(HttpResponseCode::OK, ContentType, FileBuffer); - } - - Request.WriteResponse(HttpResponseCode::NotFound, HttpContentType::kText, "Not found"sv); -} - -} // namespace zen |