aboutsummaryrefslogtreecommitdiff
path: root/zenserver/frontend/frontend.cpp
diff options
context:
space:
mode:
authorStefan Boberg <[email protected]>2023-05-02 10:01:47 +0200
committerGitHub <[email protected]>2023-05-02 10:01:47 +0200
commit075d17f8ada47e990fe94606c3d21df409223465 (patch)
treee50549b766a2f3c354798a54ff73404217b4c9af /zenserver/frontend/frontend.cpp
parentfix: bundle shouldn't append content zip to zen (diff)
downloadzen-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.cpp128
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