Files
UNSWebServerCore_WindowsDLL/UNSWebServerCore/FileReceiver.h
T
2026-06-30 17:46:34 +08:00

44 lines
1.3 KiB
C++

#pragma once
#include "Global.h"
#include "IPTable.h"
#include <functional>
#include "WebFileInfo.h"
#include "HTTPObjects.h"
using FileProcessorCallback = std::function<void(WebFileInfoVec, const std::string&)>;
class UNSWSC_DLL_EXPORT FileReceiver
{
protected:
class Impl;
std::unique_ptr<Impl> pimpl;
public:
FileReceiver();
virtual ~FileReceiver(); // 基类必须有虚析构函数!
public:
bool CallFileProcesser();
void SetResponseMode(bool html);
void SetCORSEnable(bool enable);
std::string EncodeUploadResult();
std::string EncodeUploadResultHTML();
void UpdateBlockedIPs(IPTablePtr ip);
void SetTempRoot(std::string temp_root);
void SetFileCallback(FileProcessorCallback fpcb);
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);
public:
// 核心驱动入口:供内部适配器调用的实际执行流
uns::ResponsePtr Execute(uns::RequestPtr request);
};
using FileReceiverPtr = std::shared_ptr<FileReceiver>;