// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include #include #include #include #include namespace zen { class HttpRouterRequest; struct ObjectStoreConfig { struct BucketConfig { std::string Name; std::filesystem::path Directory; }; std::filesystem::path RootDirectory; std::vector Buckets; }; class HttpObjectStoreService final : public zen::HttpService, public IHttpStatusProvider { public: HttpObjectStoreService(HttpStatusService& StatusService, ObjectStoreConfig Cfg); virtual ~HttpObjectStoreService(); virtual const char* BaseUri() const override; virtual void HandleRequest(zen::HttpServerRequest& Request) override; virtual void HandleStatusRequest(HttpServerRequest& Request) override; private: void Inititalize(); std::filesystem::path GetBucketDirectory(std::string_view BucketName); void CreateBucket(zen::HttpRouterRequest& Request); void ListBucket(zen::HttpRouterRequest& Request, const std::string_view Path); void DeleteBucket(zen::HttpRouterRequest& Request); void GetObject(zen::HttpRouterRequest& Request, const std::string_view Path); void PutObject(zen::HttpRouterRequest& Request); HttpStatusService& m_StatusService; ObjectStoreConfig m_Cfg; std::mutex BucketsMutex; HttpRequestRouter m_Router; std::atomic_uint64_t TotalBytesServed{0}; }; } // namespace zen