4 个版本
0.1.3 | 2022年1月8日 |
---|---|
0.1.2 | 2022年1月8日 |
0.1.1 | 2021年12月28日 |
0.1.0 | 2021年12月26日 |
#269 in WebSocket
22KB
556 行
webgate
这个命令行工具允许你
- 在配置文件中列出文件和目录以提供 HTTP 服务
- 远程运行配置文件中列出的 shell 命令
命令的输出会通过 WebSocket 在命令运行时传递给客户端。你可以在任何时间通过相同的套接字向命令的输入管道写入。
配置
以下是一个示例配置文件
{
"address": "127.0.0.1:9001",
"files": {
"index": ["static/index.html", "text/html"],
"favicon.png": ["static/favicon.png", "image/png"]
},
"directories": {
"dl": ["./dyn-service", "audio/flac"]
},
"not_found": "static/not_found.html",
"server": "basmati",
"commands": {
"pwd": ["pwd"],
"ls": ["ls", "-lha"],
"sh": ["sh"]
}
}
这将公开两个文件,在 127.0.0.1:9001 上通过 HTTP 提供对 "dyn-service" 目录的访问,以及三个命令。
注意事项
server
键将用作 HTTP "Server" 响应头。files
中的文件将在 webgate 启动时从存储加载到 RAM 中。- 公开目录中的文件在请求时从存储中读取,与
files
中的文件不同。 - 公开目录中的文件将具有指定的 MIME 类型。
示例命令运行代码
const CLIENT_READY = String.fromCharCode(0);
const CLIENT_KILL = String.fromCharCode(1);
const CLIENT_PUSH = String.fromCharCode(2);
const R_TYPES = {
0: "fail", // the server could not start the subprocess
1: "exit", // the subprocess exited
2: "sout", // the process wrote new bytes to its standard output
3: "serr" // the process wrote new bytes to its standard error output
};
// Run the `/sh` command
let c = new WebSocket("ws://localhost:9001/sh");
c.onmessage = (e) => {
let type = e.data.charCodeAt(0);
let data = e.data.substring(1);
if (type > 1) { // stdout has new bytes
console.log(data); // print them to the console
} else {
console.log("--- end of subprocess ---");
}
}
c.send(CLIENT_READY);
// when you want to write something to to subprocess's stdin:
c.send(CLIENT_PUSH + "echo $USER\n");
// when you want to kill the subprocess
c.send(CLIENT_KILL);
依赖关系
~665KB
~13K SLoC