参考 / 安全与项目
架构
收集器、控制面板、日志、工作进程和见证程序的组成部分,以及数据在它们之间如何流动。
一个 Python 进程托管 FastAPI 控制面板和任意数量的隔离工作区, 每个工作区都配有一个 Telethon 用户账户客户端。 SQLite 存储着一个仅支持追加的、经过签名的事件日志以及可变的操作设置。 加密保险库中存储着 API 凭据、StringSession 以及签名密钥。 前端采用打包的纯 HTML/CSS/JavaScript 形式:无需 Node 构建、CDN 或运行时 前端下载。
| 模块 | 责任声明 |
|---|---|
| collector.py | 授权、对话选择、更新、快照、媒体队列、连接监控 |
| interactions.py / telegram_client.py | 明确的面板操作、带签名的收据、持久的请求 ID 以及针对特定任务的回调/加入重试策略 |
| message_content.py | 可视化消息对比,不包含传输访问元数据 |
| workers.py | 在取消操作前,请等待导出文件处理程序完成 |
| store.py | WAL 事务、有序事件链、查询过滤器、运行设置 |
| security.py | 私有文件的创建、加密存储库、Ed25519 签名、单进程锁定 |
| evidence.py | 完整日志导出、衍生日志、检查点、附件验证 |
| verify.py | 独立的只读验证器(标准库 + 加密技术):存档、覆盖范围、证据日志和频道帖子、个人资料文件 |
| app.py | 经过身份验证的 API、生命周期、请求验证、静态面板 |
| profiles.py | 多账户收集器、共享访问控制器、按工作区管理的生命周期 |
| access.py | 范围限定授权、权限检查、IP 限制、会话限制及管理员控制台 |
| proxy_catalog.py | 公共信息流快照、传输检查、共享代理池及基于健康状况的筛选 |
| provenance.py | 带签名的获取运行身份、代码及依赖项测量 |
| network.py | 按工作区验证的传输路径;状态和证据的遮蔽处理;Telethon 传输选项 |
| sessions.py | 对已审核的 Telethon SQLite 模式进行离线只读转换 |
| account_import.py | 对受支持的账户文件和 JSON 进行内存检测和标准化处理 |
| tdata.py | 功能有限的现代 TData ZIP 读取器,支持校验和/解密验证,不进行文件提取 |
| doctor.py | 无需数据收集、登录或安装软件包的本地就绪性检查 |
| download.py | 经过身份验证的流式导出下载,支持限定读取且不会覆盖原有数据 |
| monitoring.py | 经过验证的按工作区设置的事件策略和按类型设置的附件规则,由处理程序共享,并附带状态和签名收据 |
| scope.py | 监控范围(指定聊天、Telegram文件夹、整个账户)、数据源类型、排除项、复核层级 |
| dossier.py | 基于保存记录构建的每条聊天中的用户档案:包含记录引用的事实信息、头像的 SHA-256/pHash 值,以及提及内容提取 |
| witness_api.py | 只读见证令牌及其可获取的签名日志头 |
| witness.py | 独立见证流程:自有密钥和日志、头部校验、带签名的频道帖子、导出 |
| alerts.py | Apprise 通知及面板的通知列表 |
| logging_config.py | 无窗口启动时的控制台日志记录和轮换式服务器诊断 |
| static/ | 响应式界面、本地访问门、过滤器、详细信息、导出功能、账户设置 |
| demo.py | 明确标注为合成日志,与实际采集数据隔离 |
观察处理程序在连接前即已注册。实时采集受以下因素控制: 活跃客户端身份、显式运行状态、已启用的数据源或观察 范围(文件夹或整个账户模式会在首次更新时将新聊天添加为数据源),以及事件 策略。被拒绝或被替换的客户端无法提供实时更新。 原始反应和成员资格更新 均遵循可见性限制。传入消息内容及其持久化媒体任务将 一并提交。任务保留原始时间线描述符,并将该描述符的哈希值绑定至 已签名的消息观察记录。发送者/编辑者/删除者的语义相互独立。
每个工作区仅支持一个账户,并拥有独立的目录和签名身份。 主工作区出于兼容性考虑仍位于根目录下;其他工作区位于 profiles/<id>/ 目录中。一个承载令牌控制整个安装环境;工作区并非 独立的授权租户。 进程锁保护目录;数据库锁 对事件插入进行序列化。每次追加操作均以FULL同步模式 同步提交至SQLite WAL。事件更新/删除触发器可防止 普通应用程序进行编辑;文件系统管理员始终处于信任边界之内。
API 授权采用承载令牌(bearer token)机制。登录操作经过序列化处理,并受时间限制。 账户上传采用专用的 12 MiB 编码正文限制和 8 MiB 解码文件 限制;普通 API 请求仍保留 16 KiB 的限制。 转换在工作 线程中运行,将上传数据保存在内存中,并将规范化的输入返回给经过身份验证的 浏览器。二维码登录具有每个工作区的候选项、短效标识符、等待任务 以及显式取消机制。仅被接受的授权才会成为活动客户端。 Telegram FloodWait 会返回 Retry-After 值;凭据和原始 RPC 错误消息不会在 API 错误中暴露。导出操作在异步事件 循环之外运行,并按工作区进行序列化。它们流式传输稳定的读取快照,并可 与持续进行的 WAL 写入共存。 工作区收集器共享同一进程/事件循环。
当前的历史快照与实时更新可能存在重叠。两者均为独立的观察记录, 并按来源进行标注;重复内容不会被自动合并。系统不会根据缺失的 ID、伪造的已删除文本、强制成员枚举或自动加入群组 等情况进行推断。
有关面向操作人员的说明,请参阅“数据采集原理” 以及“账户与会话格式”。
网络配置存储在加密保险库中。应用路由会关闭旧的 客户端并取消未完成的登录;后续连接将使用该路由,且不 提供直接的备用方案。 新的外部密钥安装会通过 HKDF-SHA256,基于主密钥文件和存储的随机盐值,为每个工作区生成 Fernet 密钥。这将 密钥与数据目录分开保护,而非将日志/媒体内容以明文形式存储。
本地演示入口使用单独生成的进程权限,绝不使用已配置的 面板令牌。签发和接受需明确启用演示模式,使用不包含额外工作区或授权会话的合成根 节点,采用环回对等方/主机,且不包含代理 转发头,也不进行跨源浏览器请求。 正式版 API 保留承载者 身份验证,并在演示模式下拒绝收集更改。