#signal #push-notifications #mobile-devices #events #molly #unifiedpush

app mollysocket

MollySocket 允许通过UnifiedPush获取信号通知

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服务器

AGPL-3.0-or-later

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

设置

  1. 您需要Molly的正确版本才能使用UnifiedPush: https://github.com/mollyim/mollyim-android-unifiedpush.
  2. 您可以通过以下方式安装MollySocket:
    1. Docker/Podman: docker pull ghcr.io/mollyim/mollysocket:latest
    2. Crates.io: cargo install mollysocket (有关设置,请参阅INSTALL.md
    3. 直接下载: https://github.com/mollyim/mollysocket/releases (有关设置,请参阅INSTALL.md
  3. 一个发行者应用程序(最简单的是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