#pipe #process #web-interface #config-file #http

app webgate

用于创建命令行工具 Web 界面的工具

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

MIT 许可证

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