5个稳定版本
1.4.0 | 2024年5月21日 |
---|---|
1.3.0 | 2024年3月23日 |
1.2.0 | 2023年12月14日 |
1.1.1 | 2023年11月17日 |
1.0.0 | 2023年11月2日 |
#107 in HTTP服务器
165KB
3.5K SLoC
MollySocket
MollySocket 允许通过UnifiedPush获取信号通知。它就像一个连接到Signal服务器的无加密密钥的链式设备。每次接收到加密事件时,它都会通过UnifiedPush通知您的手机。
概述
---
title: Message flow
---
graph TD
MS[fa:fa-tablets MollySocket]
S[fa:fa-comment Signal Server]
P[fa:fa-server Push server]
subgraph "fa:fa-mobile Android"
D[fa:fa-tower-broadcast Distributor App]
MA[fa:fa-tablets Molly Android]
end
MS -- 1. Persistent connection --> S
MS -- 2. 'Notifications present' --> P
P -- 3. 'Notications present for Molly' --> D
D -- 4. 'Check Signal servers' --> MA
MA -- 5. 'Got messages?' --> S
S -- 6. Messages --> MA
设置
- 您需要Molly的正确版本才能使用UnifiedPush: https://github.com/mollyim/mollyim-android-unifiedpush.
- 您可以通过以下方式安装MollySocket:
- Docker/Podman:
docker pull ghcr.io/mollyim/mollysocket:latest
- Crates.io:
cargo install mollysocket
(有关设置,请参阅INSTALL.md) - 直接下载: https://github.com/mollyim/mollysocket/releases (有关设置,请参阅INSTALL.md)
- Docker/Podman:
- 一个发行者应用程序(最简单的是ntfy)
您可以选择安装自己的推送服务器,如ntfy或NextPush。对于初学者,您可以使用免费服务如ntfy.sh(如果您有条件,请考虑捐赠)。
Web服务器
MollySocket暴露了一个Web服务器,以便Molly可以发送其操作所需的信息。您必须在MollySocket之前配置TLS和反向代理。Molly只能通过HTTPS连接到服务器。
您可以在没有Web服务器的情况下使用MollySocket,但您必须手动注册MollySocket所需的信息:请参阅Android设置中的“断网”模式。
配置
配置文件使用TOML格式。以下是配置选项概述。您可以使用conf文件、环境变量或cli选项(如有可用)来配置每个参数。
参数(配置文件) | 环境变量 | Cli选项 | 描述 | 默认值 | 示例 |
---|---|---|---|---|---|
RUST_LOG * | -v/-vv/-vvv | 详细程度 | 错误 | RUST_LOG=info, RUST_LOG=debug | |
MOLLY_CONF | -c * | 配置文件路径,可选 | /etc/mollysocket.conf | ||
主机 | MOLLY_HOST * | Web服务器的监听地址 | 127.0.0.1 | 0.0.0.0 | |
端口 | MOLLY_PORT * | Web服务器的监听端口 | 8020 | 8080 | |
webserver | MOLLY_WEBSERVER * | 是否启动Web服务器 | true | false | |
allowed_endpoints | MOLLY_ALLOWED_ENDPOINTS * | 统一推送服务器的列表 | ["*"] |
["*"] ,["https://yourdomain.tld","https://ntfy.sh"] |
|
allowed_uuids | MOLLY_ALLOWED_UUIDS * | 可能使用此服务器的信号账户的UUID | ["*"] |
["*"] , ["abcdef-12345-tuxyz-67890"] |
|
db | MOLLY_DB * | 数据库路径 | db.sqlite |
"/data/ms.sqlite" |
* 优先级
allowed_endpoints
这些是MollySocket可能用来推送通知的统一推送端点。
⚠️ 如果您自行托管推送服务器,请将您的推送服务器添加到allowed_endpoints
。 ⚠️
这是因为出于安全原因,本地网络上的端点必须明确允许。您只需设置方案(https)、域名和如果需要的话端口号。例如 allowed_endpoints=['https://push.mydomain.tld']
allowed_uuids
您可以通过将allowed_uuids
设置为['*']
来允许所有账户的注册。否则,在数组中设置您的账户ID: ['account_id1','account_id2']
。
账户ID在Molly应用程序的设置 > 通知 > 统一推送下显示。您需要先激活统一推送,然后账户ID才会显示。
故障排除
- 在Android应用程序中,状态显示为MollySocket服务器未找到
您没有输入正确的URL。
这必须是MollySocket可访问的URL。为了测试,请在浏览器中打开您输入的链接:您应该看到一个包含MollySocket版本的json。例如 {"mollysocket":{"version":"1.2.0"}}
。
如果您可以访问网络服务器,请确保它可以通过HTTPS访问。Molly无法通过HTTP连接到服务器。
- 在Android应用中,状态显示 服务器拒绝账户ID
您限制了可以使用您的MollySocket服务器的账户ID。
将您的账户ID[1]添加到allowed_uuids以允许您的账户,或添加通配符["*"]
以允许所有账户使用您的服务器。参见配置以正确配置您的服务器。
[1] 您的账户ID可以在Android应用的统一推送设置中复制
- 在Android应用中,状态显示 服务器禁止端点
您限制了允许的统一推送端点,或者您正在使用一个尚未白名单的自托管服务器。
将您的服务器添加到allowed_endpoints:["https://push.mydomain.tld"]
。 这不是您的MollySocket URL,而是您的推送提供商的URL。参见配置以正确配置您的服务器。
- 我使用断网模式,但收不到通知.
如果您使用断网模式,那么Molly(Android)无法测试设置,并假设您已正确设置了一切。您应该再次检查账户ID是否被您的MollySocket服务器接受,端点是否被您的MollySocket服务器允许(检查输出日志)。
- 状态是“OK”或“OK: Air Gapped”,但我仍然收不到通知
如果您使用Molly版本 >= 7.1.3-1.up1和MollySocket版本 >= 1.3.0,您可以运行此命令
$ mollysocket connection ping c8d44128-5c99-4810-a7d3-71c079891c27 # Replace this UUID with your account Id
如果您收到测试通知(下面图片所示),那么您应该检查Molly和您的分销商是否有不受限制的电池使用权限。您应该检查您的设备是否有关电池管理的额外配置:https://dontkillmyapp.com/。
如果您没有收到测试通知,那么您的MollySocket服务器无法到达您的推送服务器或您的手机没有网络访问。
关于安全
相对于Signal的安全
MollySocket永远不会拥有任何加密密钥
MollySocket接收已连接设备的凭据,但不接收任何加密密钥。这意味着
- 能够访问MollySocket数据库的人无法更改身份密钥,以冒充用户。请参阅setKeys。
- 能够访问MollySocket数据库的人可能能够使用已连接设备的凭据来垃圾邮件Signal服务器并达到速率限制。我还没有检查这会不会暂时阻止账户或只是已连接的设备。(可用性风险)
- 能够访问MollySocket数据库的人可能能够以破坏性的方式更改一些账户字段。例如,将账户名称更改为随机的名称。由于这些字段是加密的,需要加密密钥才能正确加密,因此明文将是随机的。
许可证
AGPLv3:请参阅LICENSE.txt。
免责声明
该项目不是由Signal Messenger或Signal Foundation赞助或关联的。
该软件是独立于Signal生产的,不保证质量、安全性或其他任何事情。自行承担风险。
依赖关系
~45–79MB
~1.5M SLoC