logo
0
0
Login
"重命名项目从sctgdesk-api-server到api-server并更新相关文件"
  • 集成服务器: 完整服务器
  • 独立每日构建: 构建和部署

下载完整服务器
API文档

api-server

为项目点赞

如果你喜欢我的工作,请考虑给它点个星!🤩 或者

免责声明

首先,这个项目并不是为了替代Rustdesk-server-pro而开发的。它是根据我们的需求开发的,用于与Rustdesk一起使用。
因此,不提供任何保证、支持、担保或责任。
其目标用途是作为一个crate包含在rustdesk-server中。
由于rustdesk-server是在AGPL-3.0下发布的,本项目也在AGPL-3.0下发布。这就是你能看到它的原因!
欢迎使用和修改它,但别忘了公开你的修改。

描述

api-server项目是Rustdesk的一个基本API服务器实现。Rustdesk是一款开源远程控制软件。这个实现使用Rust语言编写,利用Rocket框架。整个REST API使用rocket_okapi进行文档化。启动服务器后,它会在/api/doc提供Rapidoc模块,允许可视化和测试各种API路由。服务器配置为监听21114端口。它设计为使用与Rustdesk-server或Rustdesk-server-pro数据库兼容的SQLite3数据库。

状态

服务器目前正在开发中,尚未准备好用于生产环境。

许可

本服务器根据GNU Affero通用公共许可证3.0版(AGPL-3.0)的条款分发。

功能

  • Rustdesk的API服务器
  • 新的地址簿API
    • 支持个人地址簿
    • 支持组级别的共享地址簿
      • 只读、读写、管理员
    • 支持用户级别的共享地址簿
      • 只读、读写、管理员
  • OpenAPI文档
  • Web控制台(正在开发中)

架构

服务器使用Rocket作为Web框架。服务器设计为模块化和可扩展的。服务器分为三个主要部分:

  • api模块包含API路由和API逻辑。它是100%的Rust代码,使用Rocket框架。
  • webconsole模块包含Web控制台。它是一个使用TypeScript编写的单页Vue.js应用程序。API是使用Swagger codegen为Axios TypeScript从OpenAPI自动生成的。你可以在/ui访问Web控制台。你可以在webconsole目录中找到代码。
  • openapi模块包含OpenAPI文档。它是使用rocket_okapi生成的。你可以在/api/doc访问Rapidoc模块。

认证

服务器包含使用用户名和密码进行基本认证的支持。密码在存储到数据库之前会使用bcrypt进行哈希处理。此外,类似于Rustdesk-server-pro,它支持使用与OAuth2兼容的第三方提供商进行认证。目前,只有Github和Dex(作为自定义提供商)可用。要添加新的提供商,你必须实现OAuthProviderOAuthProviderFactory特性。你可以查看github_provider.rsdex_provider.rs文件作为示例。
首次启动服务器时,它将创建一个默认用户,用户名为admin,密码为Hello,world!。首次登录Web控制台后,你可以更改密码。

默认管理员用户

默认管理员用户创建时用户名为admin,密码为Hello,world!。首次登录Web控制台后,你可以更改密码。

S3 URL生成

我们的自定义客户端存储在S3存储桶中。S3配置存储在s3config.toml文件中。服务器为客户端下载生成签名URL。URL有效期为5分钟。服务器在以下位置生成下载链接:

  • /api/software/client-download-link/<key>用于客户端下载
    • key可以是osx、w64或ios之一

配置

服务器需要一个oauth2.toml配置文件才能运行。默认情况下,它应位于./oauth2.toml,尽管可以使用OAUTH2_CONFIG_FILE环境变量修改此位置。将OAUTH2_CREATE_USER变量设置为1可以在首次OAuth2登录时自动创建用户。用户使用Rustdesk ID和随机密码创建,密码会显示在服务器日志中。
服务器还需要一个s3config.toml配置文件才能运行。默认情况下,它应位于./s3config.toml,尽管可以使用S3_CONFIG_FILE环境变量修改此位置。S3配置文件用于配置服务器的S3存储。
如果你不提供这两个文件,服务器将在工作目录中为你创建它们。

OpenAPI

服务器设计为使用OpenAPI完全文档化。文档使用rocket_okapi生成。服务器在/api/doc提供Rapidoc模块,允许可视化和测试各种API路由。
显然,没有任何测试可能的Rapidoc服务器部署在https://sctg-development.github.io/api-server/
TypeScript客户端API是使用swagger-codegen.sh自动生成的

Web控制台

Web控制台可在/ui访问,它正在开发中,尚未准备好用于生产环境。
它是未来api-server Web控制台的雏形。
选择的框架是Vue.js。API是使用Swagger codegen为Axios TypeScript从OpenAPI自动生成的。请注意,codegen尚未准备好用于生产环境,需要进行一些修改。
要在服务器运行重新生成API代码,请运行以下命令(需要Docker运行):

./swagger-codegen.sh

开发

要启动UI开发服务器,请运行以下命令:

sqlite3 db_v2.sqlite3 <<EOF INSERT OR IGNORE INTO peer (guid, id, uuid, pk, created_at, "user", status, note, region, strategy, info, last_online) VALUES (x'018f255622f77778a006702ca5c23715', 'TESTUSER', randomblob(16), randomblob(16), '1901-01-01 12:00:00', randomblob(16), 0, '', NULL, randomblob(16), '{}', '1901-01-01 12:00:00'); EOF cargo build cd webconsole && npm ci && npm run devserver & cd .. VITE_DEVELOPMENT="http://localhost:5173" target/debug/api-server

这将在端口5173上启动一个nodejs UI开发服务器。api-server将请求代理到UI开发服务器,而不是提供嵌入式静态文件。在http://localhost:21114/ui访问开发UI。

每次修改代码时,服务器将自动重建并重新加载UI开发服务器。

独立API服务器

服务器可以作为独立服务器运行。要运行服务器,请执行以下命令:

在开发模式下:

DATABASE_URL=sqlite://$(pwd)/db_v2.sqlite3 cargo run --release

在生产模式下:

api-server --help 运行SCTGDesk API服务器 用法: api-server [OPTIONS] 选项: --address <ADDRESS> 设置服务器地址 [默认: 127.0.0.1] --port <PORT> 设置服务器端口 [默认: 21114] --log_level <LOG_LEVEL> 设置服务器日志级别 [默认: debug] --secret_key <SECRET_KEY> 设置服务器密钥 [默认: wJq+s/xvwZjmMX3ev0p4gQTs9Ej5wt0brsk3ZGhoBTg=] -h, --help 打印帮助 -V, --version 打印版本

截图

Web控制台

登录 仪表盘 设备 用户 组 地址簿 规则 添加规则

API文档

apidoc

在Rustdesk客户端中使用

Capture d'écran 2024-05-24 à 12 14 34 Capture d'écran 2024-05-24 à 12 07 21 Capture d'écran 2024-05-24 à 12 07 32

构建

首先,你需要安装Rust工具链。你可以按照https://www.rust-lang.org/tools/install的说明进行安装。

你还需要安装SQLite3开发库。在Ubuntu上,你可以使用以下命令安装它们:

sudo apt install libsqlite3-dev

在MacOS上:

brew install sqlite3

在Windows上:

choco install sqlite

你还需要nodejs和npm来构建Web控制台。你可以按照https://nodejs.org/en/download/的说明进行安装。

要在*nix上构建服务器,请执行以下命令:

DATABASE_URL=sqlite://$(pwd)/db_v2.sqlite3 && cargo build --release

要在Windows上构建服务器,请执行以下命令:

set "DATABASE_URL=sqlite://%CD%/db_v2.sqlite3" && cargo build --release --target x86_64-pc-windows-msvc

与Rustdesk-Server集成

服务器可以与Rustdesk-server集成,你可以通过修改Rustdesk-server的main.rs文件轻松集成它:

use api_server::build_rocket; #[rocket::main] async fn start_rocket() -> ResultType<()> { let port = get_arg_or("port", RENDEZVOUS_PORT.to_string()).parse::<i32>()?; let figment = rocket::Config::figment() .merge(("address", "0.0.0.0")) .merge(("port", port-2)) .merge(("log_level", LogLevel::Debug)) .merge(("secret_key", "wJq+s/xvwZjmMX3ev0p4gQTs9Ej5wt0brsk3ZGhoBTg=")) .merge(("limits", Limits::new().limit("json", 2.mebibytes()))); let _rocket = build_rocket(figment).await.ignite().await?.launch().await?; Ok(()) }

并在main函数中:

let rocket_thread = thread::spawn(|| { let _ = start_rocket(); }); RendezvousServer::start(port, serial, &get_arg("key"), rmem)?; let _ = rocket_thread.join(); Ok(())

你可以查看api-server main.rs获取一个可用的集成示例。

与Rustdesk-Server集成的API服务器

如果你想要一个可直接使用的与Rustdesk-Server集成的服务器,你可以使用我自己的服务器api-server。二进制文件可在发布页面获取。二进制文件适用于Linux Ubuntu 22.04LTS amd64和arm64。

限制

  • 服务器尚未准备好用于生产环境。购买Rustdesk-server-pro许可证以获取生产就绪的服务器。
  • Bearer令牌存储在内存中,没有持久性。这意味着每次服务器重启时,所有令牌都会丢失。你需要重新向服务器进行身份验证。

CLI使用

  • 用户登录:

    curl -X POST "http://127.0.0.1:21114/api/login" \ -H "accept: application/json"\ -H "content-type: application/json" \ -d '{"username":"admin","password":"Hello,world!","id":"string","uuid":"string"}' # 注意响应中的Bearer令牌
  • 创建用户:

    curl -X POST "http://127.0.0.1:21114/api/user" \ -H "accept: application/json"\ -H "authorization: Bearer viZ2ArJutFtKsg0DDC1TiV-87uSRQqGBZXAoCeHrFHc"\ -H "content-type: application/json" \ -d '{"name":"testuser","password":"test","confirm-password":"test","email":"string","is_admin":false,"group_name":"Default"}'
  • 使用Rapidoc在http://127.0.0.1:21114/api/doc测试API