#web-interface #transmission #bittorrent #web-server #web #rpc-server #torrent

应用程序 transportal

为 Transmission 提供响应式网页界面和服务器

1 个不稳定版本

0.1.1 2024 年 5 月 26 日

#446命令行工具

AGPL-3.0-or-later AND 0BSD

235KB
5K SLoC

JavaScript 3.5K SLoC // 0.3% comments Rust 1.5K SLoC // 0.0% comments

transportal

transportal 是为 Transmission BitTorrent 守护进程提供的响应式网页界面和服务器。它适用于桌面和移动浏览器。transportal 以网页服务器形式运行,并通过 RPC 请求与 Transmission 通信。服务器使用 服务器端发送事件 向浏览器推送更新。

许多功能尚未实现或尚未完成,但它对于简单的监控和种子管理来说运行良好。

快速开始

cargo install --git https://github.com/stevenengler/transportal.git

cat >config.toml <<EOF
[connection]
bind_address = "127.0.0.1:8080"
rpc_url_base = "https://127.0.0.1:9091"
rpc_url_path = "/transmission/rpc"
EOF

transportal config.toml

限制

服务器端发送事件用于向浏览器推送更新。服务器端发送事件在使用 http/2 时表现最佳,但遗憾的是,浏览器仅支持通过 TLS 连接使用 http/2。虽然 transportal 在不使用 http/2 时也可以工作,但您每次只能打开几个标签页。一种解决方案是使用 Nginx 等网络代理,它可以通过自签名证书添加 TLS 到连接中。

配置

配置文件使用 toml 格式指定。

[连接]

bind_address

必需

将服务器绑定到的套接字地址。例如:127.0.0.1:80unix:/home/user/transportal.sock

bind_unix_perms

默认值:600

如果绑定到 Unix 套接字,则使用这些八进制权限设置套接字文件的权限。umask 被忽略。例如:620

rpc_url_base

必需

用于连接到 Transmission RPC 服务器的基本 URL。例如:http://127.0.0.1:9091

rpc_url_path

必需

用于连接到 Transmission RPC 服务器的基本 URL 路径。例如:/transmission/rpc。必须以斜杠开头。

[安全]

默认值:true

是否在 cookies 上设置了 Secure 属性。如果为 true,则浏览器必须通过 HTTPS、localhost 或洋葱服务连接。否则,认证将无法正确工作。

[性能]

poll_interval_ms

默认值:1000

服务器轮询 Transmission 以获取每个 SSE 连接的间隔(毫秒)。

安全

transportal 仍在开发中,因此并非所有安全保护措施都已完整。

XSS

传输的数据用于填充HTML。这些数据通常会被模板引擎转义,但有少数地方假设由Transmission提供的诸如时间戳和种子哈希等数据是可信的。这将在未来得到改进。

CSRF

会话cookie配置为SameSite: Lax,这意味着认证端点应该受到CSRF攻击的保护,除非攻击来自同一站点(包括子域名)。登录表单尚未受到CSRF攻击的保护。这将在未来得到改进。

认证

提供的用户名和密码在会话期间存储在内存中,以便向Transmission发出RPC请求。客户端被分配了一个随机的128位会话cookie,具有SameSite: LaxHttpOnlySecure(除非在配置选项中禁用)属性。

技术细节

服务器使用axum处理HTTP请求。使用reqwest执行Transmission RPC调用。使用askama在服务器上渲染HTML响应,并使用htmx动态更新网页。

许可证

本程序是自由软件:您可以根据自由软件基金会发布的GNU Affero通用公共许可证的条款重新分发和/或修改它,许可证版本为3,或(根据您的选择)许可证的任何后续版本。

本程序分发的目的是希望它是有用的,但没有任何保证;甚至没有对适销性或针对特定目的的适用性的暗示保证。有关详细信息,请参阅GNU Affero通用公共许可证。

您应该已随本程序收到GNU Affero通用公共许可证的一份副本。如果没有,请参阅https://www.gnu.org/licenses/

依赖项

~16–30MB
~512K SLoC