13 #ifndef mitkDataStorageController_h
14 #define mitkDataStorageController_h
26 #include <unordered_map>
213 void SendJsonResponse(httplib::Response& res,
int status,
const nlohmann::json& body);
214 void SendErrorResponse(httplib::Response& res,
int status,
const nlohmann::json& error);
223 void SendBinaryResponse(httplib::Response& res,
const std::string& data,
224 const std::string& filename);
229 NodeQueryParams ParseNodeQueryParams(
const httplib::Request& req)
const;
250 std::string DetermineTransferMode(
const httplib::Request& req)
const;
259 std::string ExtractFilenameFromContentDisposition(
const httplib::Request& req)
const;
273 struct ResolveDataPathResult
276 std::string filePath;
293 ResolveDataPathResult ResolveDataPath(
const httplib::Request& req,
const std::string& contentType);
298 struct LoadDataResult
301 std::vector<mitk::BaseData::Pointer> data;
314 LoadDataResult LoadDataFromFile(
const std::string& filePath,
const std::string& requestPath);
317 void HandlePOST_nodes_uid_generic(
const httplib::Request& req, httplib::Response& res,
const std::optional<std::string>& parentUID);
330 fs::path AcquireRequestTempDir(
const std::string& clientIp);
338 void ReleaseRequestTempDir(
const std::string& clientIp,
const fs::path& dir);
340 DataStorageBridge& m_Bridge;
341 std::string m_TempDirectory;
343 std::vector<std::string> m_AllowedFileDirectories;
348 static constexpr
size_t DEFAULT_MAX_ACTIVE_TEMP_DIRS_PER_IP = 5;
349 size_t m_MaxActiveTempDirsPerIp = DEFAULT_MAX_ACTIVE_TEMP_DIRS_PER_IP;
350 mutable std::mutex m_ActiveTempDirsMutex;
351 std::unordered_map<std::string, std::deque<fs::path>> m_ActiveTempDirsByIp;
#define MITKRESTAPI_EXPORT
Base class of all data objects.
Thread-safe bridge between the REST API layer and MITK DataStorage.
Handles all /api/v1/datastorage endpoints.
void HandlePUT_nodes_uid_properties_key(const httplib::Request &req, httplib::Response &res)
Handle PUT /datastorage/nodes/:uid/properties/:property_key request.
void SetFileAccessConfig(FileAccessMode mode, const std::vector< std::string > &allowedDirs, const std::string &tempDirectory)
Configure file access restrictions.
void HandlePATCH_nodes_uid(const httplib::Request &req, httplib::Response &res)
Handle PATCH /datastorage/nodes/:uid request.
void HandleGET_nodes_uid_data(const httplib::Request &req, httplib::Response &res)
Handle GET /datastorage/nodes/:uid/data request.
void SetMaxActiveTempDirsPerIp(size_t max)
Set the maximum number of concurrently active file-reference temp directories per client IP....
void HandleGET_nodes(const httplib::Request &req, httplib::Response &res)
Handle GET /datastorage/nodes request.
void HandleDELETE_nodes_uid_properties_key(const httplib::Request &req, httplib::Response &res)
Handle DELETE /datastorage/nodes/:uid/properties/:property_key request.
DataStorageController(DataStorageBridge &bridge)
Construct a DataStorageController.
void HandlePATCH_nodes_uid_properties(const httplib::Request &req, httplib::Response &res)
Handle PATCH /datastorage/nodes/:uid/properties request.
void SetTempDirectory(const std::string &tempDir)
Set the temporary directory for data serialization.
void HandlePOST_nodes(const httplib::Request &req, httplib::Response &res)
Handle POST /datastorage/nodes request.
void HandlePUT_nodes_uid_properties(const httplib::Request &req, httplib::Response &res)
Handle PUT /datastorage/nodes/:uid/properties request.
void HandlePUT_nodes_uid_data(const httplib::Request &req, httplib::Response &res)
Handle PUT /datastorage/nodes/:uid/data request.
void HandleDELETE_nodes_uid(const httplib::Request &req, httplib::Response &res)
Handle DELETE /datastorage/nodes/:uid request.
void HandleGET_nodes_uid(const httplib::Request &req, httplib::Response &res)
Handle GET /datastorage/nodes/:uid request.
void HandleGET_nodes_uid_properties_key(const httplib::Request &req, httplib::Response &res)
Handle GET /datastorage/nodes/:uid/properties/:property_key request.
void HandlePOST_nodes_uid_children(const httplib::Request &req, httplib::Response &res)
Handle POST /datastorage/nodes/:uid/children request.
void HandleGET_nodes_uid_properties(const httplib::Request &req, httplib::Response &res)
Handle GET /datastorage/nodes/:uid/properties request.
void HandleGET_nodes_uid_children(const httplib::Request &req, httplib::Response &res)
Handle GET /datastorage/nodes/:uid/children request.
Portability header that provides a unified namespace alias for the C++ filesystem library.
Find image slices visible on a given plane.
FileAccessMode
Access mode for file system path restrictions.
@ Unrestricted
No file path restrictions (default).
PropertyScope
Enumeration for property scope in REST API queries.
@ All
Both node and data properties (node takes precedence on conflicts).
Query parameters for the GET /datastorage/nodes endpoint.
Query parameters for the GET /datastorage/nodes/{uid}/properties endpoint.