mirror of
https://github.com/Wx-2025/ST-Amily2-Chat-Optimisation.git
synced 2026-06-06 03:25:51 +00:00
61 lines
1.9 KiB
JavaScript
61 lines
1.9 KiB
JavaScript
class FilePipe {
|
|
constructor() {
|
|
this.name = "FilePipe";
|
|
// 模拟的根存储路径,实际环境可能对应 IndexedDB 的 Store Name 或 Node 的 baseDir
|
|
this.basePath = "/virtual_fs/";
|
|
}
|
|
|
|
/**
|
|
* 安全路径解析与校验
|
|
* @param {string} plugin 插件名称(命名空间)
|
|
* @param {string} relativePath 相对路径
|
|
* @returns {string|null} 合法的绝对路径,如果违规则返回 null
|
|
*/
|
|
_resolvePath(plugin, relativePath) {
|
|
if (!plugin || typeof plugin !== 'string') {
|
|
console.error(`[FilePipe] Security Error: Invalid plugin identity.`);
|
|
return null;
|
|
}
|
|
|
|
// 简单防越权:禁止包含 ".."
|
|
if (relativePath.includes('..')) {
|
|
console.error(`[FilePipe] Security Error: Directory traversal attempt blocked for plugin '${plugin}'. Path: ${relativePath}`);
|
|
return null;
|
|
}
|
|
|
|
// 强制限定在插件目录下
|
|
// 格式: /virtual_fs/PluginName/filename
|
|
return `${this.basePath}${plugin}/${relativePath}`;
|
|
}
|
|
|
|
/**
|
|
* 读取文件
|
|
* @param {string} plugin 调用方插件名
|
|
* @param {string} path 文件相对路径
|
|
*/
|
|
async read(plugin, path) {
|
|
const safePath = this._resolvePath(plugin, path);
|
|
if (!safePath) return null;
|
|
|
|
console.log(`[FilePipe] Reading from: ${safePath}`);
|
|
// TODO: Implement actual file reading logic
|
|
return null;
|
|
}
|
|
|
|
/**
|
|
* 写入文件
|
|
* @param {string} plugin 调用方插件名
|
|
* @param {string} path 文件相对路径
|
|
* @param {any} data 数据
|
|
*/
|
|
async write(plugin, path, data) {
|
|
const safePath = this._resolvePath(plugin, path);
|
|
if (!safePath) return false;
|
|
|
|
console.log(`[FilePipe] Writing to: ${safePath}`);
|
|
// TODO: Implement actual file writing logic
|
|
return true;
|
|
}
|
|
}
|
|
|
|
export default FilePipe; |