#pragma once #include "Export.h" #include "Global.h" #include "IPTable.h" #include "WebFileInfo.h" #include "HTTPObjects.h" class UNSWSC_DLL_EXPORT SyncFileReceiver { protected: class Impl; std::unique_ptr pimpl; public: SyncFileReceiver(); virtual ~SyncFileReceiver(); public: void SetResponseMode(bool html); void SetCORSEnable(bool enable); std::string EncodeUploadResult(); std::string EncodeUploadResultHTML(); void UpdateBlockedIPs(IPTablePtr ip); void SetTempRoot(std::string temp_root); uns::HTTPMethod GetMethod(uns::RequestPtr request); void AppenedBlockedIP(DateTime::Span block_time, std::string ip); bool WriteFile(const std::string& path, const std::string& bytes); public: virtual uns::Status PreCheckRequest(uns::RequestPtr request) = 0; virtual bool PreCheckForm(uns::FormPartPtr form) = 0; virtual uns::PathTraversalDefenceLevel PTDefence(); virtual bool IsPathSafe(const std::string& raw_path); // 【修改】由原先的 Callback 改为可供子类重写的虚函数 // 返回值改为 webcc::ResponsePtr,并且引入 request 参数以便子类调用 AutoCORS 或解析请求头 virtual uns::ResponsePtr ProcessFiles(const WebFileInfoVec& file_info, const std::string& tmp_root, uns::RequestPtr request); public: uns::ResponsePtr Execute(uns::RequestPtr request); }; using SyncFileReceiverPtr = std::shared_ptr;