Skip to content

fix: take over Plex Web opened over plain http on a LAN address - #7

Merged
InfinityPacer merged 1 commit into
mainfrom
fix/insecure-context-ids
Sep 30, 2026
Merged

InfinityPacer merged 1 commit into
mainfrom
fix/insecure-context-ids

Conversation

@InfinityPacer

Copy link
Copy Markdown
Owner

用户影响

以 http://<局域网地址>:32400/web 打开 Plex Web 时,播放需要扩展接管的片源会报「s1002 (网络)」。同一片源用 https://app.plex.tv 打开可以正常播放。

这种页面不是安全上下文,页面和内容脚本里都没有 crypto.randomUUID。扩展在生成接管通知编号、原生会话编号和取流 Worker 的 nonce 时调用它,直接抛异常,接管在发出第一次 control-v1 请求之前就中断了。媒体服务已经返回接管描述,播放器却收到空的 204,于是报网络错误。

改动

  • @shimweave/contracts 新增 randomId(),用 crypto.getRandomValues 生成 v4 UUID 格式的标识,在安全与非安全上下文里走同一条路径。
  • 页面侧的四处调用改用它,分别在 plex-native-host、native-hook、media-worker-client 和 extension-worker-bridge。后台 Service Worker 始终是安全上下文,保持不变。

验证

  • pnpm build、pnpm typecheck、pnpm lint、pnpm test(375 个)全部通过。新增 randomId 在没有 randomUUID 时的测试,Worker 桥接测试改为只提供 getRandomValues。
  • 在调试 Chrome 里,以局域网 IP 的 http 地址打开页面,页面与 ShimWeave 的隔离环境都是 isSecureContext=false、crypto.randomUUID 为 undefined,getRandomValues、MediaSource、mediaCapabilities 可用。
  • 实际页面验收使用部署实例的 http://<局域网地址>:32400/web,播放一个 STRM(HEVC Main 10)。
    • 修复前是 0.0.2 的构建。报「s1002 (网络)」,媒体服务只收到 start,没有任何 control 请求。
    • 修复后换上本分支的构建。media 元素带上 ShimWeave 会话,5 秒推进约 5 秒。媒体服务依次收到 start 与 control(204),约 60 秒后按有效期再换取一次,没有服务端转码会话。
  • 尚未覆盖拖动进度、切集与退出。

🤖 Generated with Claude Code

@InfinityPacer
InfinityPacer merged commit 87700f2 into main Sep 30, 2026
1 check passed
@InfinityPacer
InfinityPacer deleted the fix/insecure-context-ids branch September 30, 2026 01:54
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant