Commit Graph

3 Commits

Author SHA1 Message Date
ThearchyHelios d9eaf8b850 撤销分享链接交回的 page_title 是页面标题,和建、列的一样
验收:DELETE /api/apps/{app_id}/shares/{share_id} 的返回里 page_title 是页面 id("home"),建分享时返回的是页面标题。
revoke_share 调 share_out(row) 时没给标题表,share_out 就退回页面 id。

改法:撤销照列表的取法(应用当前的版本 _previous 的 spec)给 share_out 标题表;撤销过的再撤销也一样。

测试:test_shares 的撤销用例加断言:建出来的 page_title 是「首页」,撤销、再撤销交回的都是「首页」。去掉修复回跑挂。
2026-10-17 09:19:24 +08:00
ThearchyHelios 36c8f581cc W3-d 复核 H1:「最近一次封存」按来源白名单认,问数据按口径出具的正式运行不再顶替看板的数
复核发现:问数据的答案按已治理口径正式出具的运行(origin_kind=ledger_issue,W3-b 加的自动出具缺省开)参数是从某人的
提问里绑出来的,而 apps/resolve.sealed_runs 只排除了补算(app_backfill)。于是 from=formal 的 latest_sealed 视图、
趋势、分享链接(latest,以及建 fixed 分享时取的那次)、视图数据接口、补算判断「新版本算过没有」都会换成那组参数的数,
而且没有任何提示。

做法:sealed_runs 的来源从黑名单改成白名单 SEALED_ORIGINS(定时、手动正式运行、应用入口和按需视图、入站钩子、直接调
接口,外加没有来源列之前的老运行);不算的列在 NOT_SEALED_ORIGINS,逐条写明原因。上面这几处都经 sealed_runs,改一处都
跟上。按白名单认是为了以后再加来源时默认不算、要算得先登记,不会再悄悄漏进看板。

测试(tests/test_shares.py):
- 先跑一次正常的正式运行,再跑一次更新的 ledger_issue 正式运行:应用页、趋势、视图数据接口、latest 和 fixed 两种分享
  都还是正常那次,分享的下载报告也不认出具的那次。去掉修复回跑,这一项失败;
- ORIGIN_KINDS 每种来源都要归进 SEALED_ORIGINS 或 NOT_SEALED_ORIGINS 之一,以后新加的来源没归类先失败。
2026-10-16 18:20:52 +08:00
ThearchyHelios f759c5c82d W3-d 分享链接(后端):只读、不用登录、必设到期、只显示定时出数的视图
为什么做(04 细案 C2,集成-I6):会话 cookie 是 SameSite=Lax,跨站的 iframe 里带不上,想把看板放进别的门户只能每人开账号且
必须同站;分享链接是跨站嵌入唯一走得通的办法。它把数据交出了授权范围,所以每一步往窄处取:
- view_shares(db/models_apps.ViewShare):只存 key 的 sha256 和开头 6 位;latest 跟着最近一次封存走,fixed 存建分享那一刻
  每个视图的运行 id、按建分享时的应用版本解析;到期必填;打开只计数
- POST / GET / DELETE /api/apps/{id}/shares:要应用的 manage,建要管理员开了 apps.share_links(缺省关);个人应用、没发布、
  归档的不能分享;这一页没有最近封存的视图不收;到期最长 90 天;key 只在建的时候交回一次(/s#<key>);建、撤销写审计
- GET /api/shares/page、/api/shares/report.html 是公开路由(中间件把 /api/shares/ 当公开前缀),只认请求头
  X-AgentLab-Share,地址里带的 key 不认;撤销、到期回 410 写明;开关关掉时已有的一并 403;应用归档、页面没了 410
- apps/resolve.resolve_page 加 share 旁路:只解析 latest_sealed 视图(fixed 用存下的运行,趋势也停在那一期),按需、实例、
  探索视图写明原因、从不发起运行(auto 的也不);流程组件和报告换成写明原因的说明块;页面缓存键另加分享的标识;out 另给
  各视图取到的运行和可下载的报告
- 下载报告只认这条分享此刻解析出来的运行,内部就是 export_report_html(同样遮过、照常记导出审计,导出人记成不冒充任何人的
  分享身份)
- 分享接口都不放给访问密钥(不在 KEY_ROUTES,门禁 403)

安全头:/s 用 AGENTLAB_EMBED_ORIGINS 和 no-referrer(第 1 波 web_security 预留的规则,这次在真实页面托管下测)。C3 同站门户
嵌整站只做配置和文档:写进 web_security 的模块说明和 deploy/agentlab.env 的「嵌入」一节,「分享链接还没有上线」那句改掉。
2026-10-16 16:30:42 +08:00