#javascript #javascript-engine #http-service #js #duktape #dynamic #engine

app jsaas

使用Duktape JavaScript引擎在沙盒环境中安全执行JavaScript的HTTP服务

3个不稳定版本

0.5.0 2019年4月18日
0.4.1 2019年3月29日
0.4.0 2019年3月7日

#2082 in Web编程

Apache-2.0

60KB
1K SLoC

JSaaS

Crates.io Crates.io CircleCI

概述

使用Duktape JavaScript引擎在沙盒环境中安全执行JavaScript的HTTP服务。

入门

使用Docker(AMD64/ARM)开始

使用Docker启动服务(请确保替换以下<version>

docker run -e JSAAS_BIND_ADDR=0.0.0.0:9412 -p 9412:9412 --rm -ti titanclass/jsaas:<version>

您可以在DockerHub上找到最新版本

使用Cargo开始

如果您有Rust,您可以选择使用Cargo

cargo install jsaas
jsaas

定义和执行

JSaaS服务启动后,定义一个添加两个数字的程序

curl -XPOST --data 'function(a, b) { return a + b; }' https://127.0.0.1:9412/scripts

得到以下结果

{"id":"af15791e-e9c1-4750-8a44-60222ef88c7c"}

然后,通过提供数字来执行程序

curl -XPOST --data '[4, 5]' https://127.0.0.1:9412/scripts/af15791e-e9c1-4750-8a44-60222ef88c7c

得到以下结果

9

在实际场景中,您还可以返回一个JS对象或任何其他可序列化为JSON的值。

单次执行

您还可以提供一个在单个请求中评估然后立即丢弃的函数。

curl -XPOST --data 'function() { return 8 * 2; }' https://127.0.0.1:9412/execute

得到以下结果

16

配置

JSaaS通过环境变量进行配置。以下表格列出了变量

名称 描述
JSAAS_BIND_ADDR 声明要绑定到的地址。默认:"127.0.0.1:9412"
JSAAS_SCRIPT_DEFINITION_EXPIRATION_TIME 如果脚本在此期间(毫秒)未执行,则从服务器中删除。默认:"86400000"
JSAAS_SCRIPT_EXECUTION_THREAD_POOL_SIZE 用于执行JavaScript的工作者数量。0表示可用CPU数量。默认:"0"
JSAAS_SCRIPT_EXECUTION_COMPLETION_TIME 等待脚本执行完成前的超时时间。默认:"10000"
JSAAS_TLS_BIND_ADDR 如果指定,并且已配置TLS,则将绑定单独的端口用于TLS,而不是使用默认端口。
JSAAS_TLS_PUBLIC_CERTIFICATE_PATH TLS公钥路径,PEM格式。请注意,TLS目前仅在Linux上支持。
JSAAS_TLS_PRIVATE_KEY_PATH TLS私钥路径,PEM格式。请注意,TLS目前仅在Linux上支持。

开发

该项目目前需要符合POSIX规范的操作系统和bash,这主要是由于其构建设置。首次编译该项目可能需要一些时间,因为构建会下载Duktape并进行配置。

您需要以下软件

  • cargo
  • curl
  • gcc
  • python2
  • python2-yaml
  • rustc

环境准备完毕后,执行以下操作

cargo build

可以生成静态二进制文件

cargo build --release --target=x86_64-unknown-linux-musl

可以启动一个用于开发的web服务器

cargo run

变更日志

0.5.0 - 2019-04-18

  • JSaaS现在已发布到DockerHub,支持AMD64和ARM架构。

0.4.1 - 2019-03-29

  • 修复了在atob中存在的错误,导致某些输入结果不正确。

0.4.0 - 2019-03-07

  • 为了更好地集成Tokio,使用futures::sync::mpsc
  • Rust 1.33.0。
  • 第一个版本发布到Crates.io(除DockerHub外)。

0.3.0 - 2019-02-20

  • 修复了一个问题,如果提供的JS代码返回无效值,会导致崩溃。
  • 添加了atobbtoa的实现以支持Base64。
  • 在适当的地方使用HTTP状态码400。
  • Rust 1.32.0。

0.2.0 - 2019-02-04

  • 添加了一个/execute路由,可以执行代码而无需保存。

0.1.0 - 2019-01-10

  • 初始版本发布。

发布

要发布,推送一个以“v”开头的标签——例如“v0.2.0”——CircleCI将构建项目,将镜像推送到DockerHub,并在Crates.io上发布。

(c)版权所有 2019,Titan Class P/L

依赖关系

~11–25MB
~357K SLoC