[SEN] 支持ONVIF与RTSP分离凭据并持久化Profile #50

Closed
opened 2026-08-13 12:01:27 +08:00 by ila · 3 comments
Owner

当前状态:已完成

用户于 2026-08-14 明确验收通过。

基本信息

  • 类型:功能
  • 任务类型:单项目
  • 主项目:Sense
  • 主 agent:主 agent
  • 所属 Epic:#7
  • 所属 MVP / 版本:#8
  • 前置工单:#23、#24、#48
  • 可与待验收前置并行:是;#48 已实现并通过真实设备 Profile 验证,本工单在其堆叠分支继续。
  • write_paths:Sense/server/app/sense/device/**、Sense/server/app/sense/admission/**、Sense/server/cmd/sense/modules_*.go、Sense/ui/src/api/sense/device/**、Sense/ui/src/views/sense/device/**、Sense/ui/src/views/sense/admission/**、受影响测试、Wiki 镜像与本工单归档。
  • 只读:ip_camera.env;不得提交、修改或输出任何值。

原始需求

  • 来源:用户对话,2026-08-13。
  • 摘要:当前摄像机 ONVIF 与 RTSP 使用不同账号,且接入 Profile 只在内存;用户确认按建议更新并“建工单,做”。

目标

  • 每台视频设备安全保存独立 ONVIF 与 RTSP 凭据,并支持“RTSP 与 ONVIF 相同”。
  • PostgreSQL 持久化脱敏 Profile、主/子码流、验证状态和时间;重启后仍可使用。
  • 至少一个 Profile 的 RTSP 验证成功后设备进入 active。
  • API/页面不返回密码、含凭据 URI 或 Authorization。

非目标

  • 不修改 Brain/Bell/contracts;不自动建立 MediaMTX 路由(由后续工单负责);不保存带凭据 Stream URI。

已确认方案

  • 兼容旧设备凭据为 ONVIF/通用凭据;新增 RTSP 独立密文,可选择复用 ONVIF。
  • Admission 用 ONVIF 凭据读取 Profile,用 RTSP 凭据验证 Stream URI。
  • 新增 PostgreSQL Profile 表并通过 Store 持久化;启动后可恢复。
  • 更新设备/接入页面,保持 Element Plus/go-admin-ui 风格。

验收

  • 两组凭据分别加密且只写不可读。
  • 同凭据复用与分离凭据均工作。
  • Profile 重启后存在,至少一个视频验证成功时设备 active。
  • 真实摄像机可同时完成 ONVIF Profile 与 RTSP 验证。
  • 自动化测试、迁移、Wiki 和安全边界通过。
## 当前状态:已完成 用户于 2026-08-14 明确验收通过。 ## 基本信息 - 类型:功能 - 任务类型:单项目 - 主项目:Sense - 主 agent:主 agent - 所属 Epic:#7 - 所属 MVP / 版本:#8 - 前置工单:#23、#24、#48 - 可与待验收前置并行:是;#48 已实现并通过真实设备 Profile 验证,本工单在其堆叠分支继续。 - write_paths:`Sense/server/app/sense/device/**`、`Sense/server/app/sense/admission/**`、`Sense/server/cmd/sense/modules_*.go`、`Sense/ui/src/api/sense/device/**`、`Sense/ui/src/views/sense/device/**`、`Sense/ui/src/views/sense/admission/**`、受影响测试、Wiki 镜像与本工单归档。 - 只读:`ip_camera.env`;不得提交、修改或输出任何值。 ## 原始需求 - 来源:用户对话,2026-08-13。 - 摘要:当前摄像机 ONVIF 与 RTSP 使用不同账号,且接入 Profile 只在内存;用户确认按建议更新并“建工单,做”。 ## 目标 - 每台视频设备安全保存独立 ONVIF 与 RTSP 凭据,并支持“RTSP 与 ONVIF 相同”。 - PostgreSQL 持久化脱敏 Profile、主/子码流、验证状态和时间;重启后仍可使用。 - 至少一个 Profile 的 RTSP 验证成功后设备进入 active。 - API/页面不返回密码、含凭据 URI 或 Authorization。 ## 非目标 - 不修改 Brain/Bell/contracts;不自动建立 MediaMTX 路由(由后续工单负责);不保存带凭据 Stream URI。 ## 已确认方案 - 兼容旧设备凭据为 ONVIF/通用凭据;新增 RTSP 独立密文,可选择复用 ONVIF。 - Admission 用 ONVIF 凭据读取 Profile,用 RTSP 凭据验证 Stream URI。 - 新增 PostgreSQL Profile 表并通过 Store 持久化;启动后可恢复。 - 更新设备/接入页面,保持 Element Plus/go-admin-ui 风格。 ## 验收 - [ ] 两组凭据分别加密且只写不可读。 - [ ] 同凭据复用与分离凭据均工作。 - [ ] Profile 重启后存在,至少一个视频验证成功时设备 active。 - [ ] 真实摄像机可同时完成 ONVIF Profile 与 RTSP 验证。 - [ ] 自动化测试、迁移、Wiki 和安全边界通过。
ila added the kind/taskproject/sensescope/independentpriority/p0 labels 2026-08-13 12:01:27 +08:00
Author
Owner

实施中范围补充(2026-08-13)

脱敏真实设备验证确认:分离凭据已生效,但摄像机返回的 RTSP Stream URI 主机不可达,端口与获准配置一致,导致 RTSP 验证超时。为完成本工单“真实摄像机可同时完成 ONVIF Profile 与 RTSP 验证”的验收,在 write_paths 中补充 Sense/server/app/sense/adapters/onvif/client.go 与对应测试:当 Stream URI 主机不同于用户提交的 Device Service 主机时,仅把主机归一化到已授权主机,保留 rtsp scheme、报告端口、path/query;继续拒绝 URI 凭据和非 RTSP scheme。该调整不输出或持久化凭据,不扩展到其他网络目标。

## 实施中范围补充(2026-08-13) 脱敏真实设备验证确认:分离凭据已生效,但摄像机返回的 RTSP Stream URI 主机不可达,端口与获准配置一致,导致 RTSP 验证超时。为完成本工单“真实摄像机可同时完成 ONVIF Profile 与 RTSP 验证”的验收,在 write_paths 中补充 `Sense/server/app/sense/adapters/onvif/client.go` 与对应测试:当 Stream URI 主机不同于用户提交的 Device Service 主机时,仅把主机归一化到已授权主机,保留 `rtsp` scheme、报告端口、path/query;继续拒绝 URI 凭据和非 RTSP scheme。该调整不输出或持久化凭据,不扩展到其他网络目标。
Author
Owner

实施完成,待验收

  • ONVIF/RTSP 分离凭据或显式复用已实现,两组密码分别加密且 API 不返回。
  • Profile 与验证状态已持久化,Sense 重启后仍恢复 2 个 Profile。
  • 真实设备验证:admission_status=ready、profile_count=2、ready_profile_count=2、device_status=active。
  • go test ./... 通过;UI lint 0 error(基线 warning);UI/build 与 Windows 打包通过。
  • 本地提交:1a63264、032f8c5、73d775b;远端最终提交:dde84c8687de505445376f537dd60f10a78a6698。
  • Wiki archive revision:27ac0fe8ef97f9ec835fa62713f3a8c23c077940。
  • PR:#52 #52

工单保持开启,等待验收;继续执行后续 #51。

## 实施完成,待验收 - ONVIF/RTSP 分离凭据或显式复用已实现,两组密码分别加密且 API 不返回。 - Profile 与验证状态已持久化,Sense 重启后仍恢复 2 个 Profile。 - 真实设备验证:`admission_status=ready`、`profile_count=2`、`ready_profile_count=2`、`device_status=active`。 - `go test ./...` 通过;UI lint 0 error(基线 warning);UI/build 与 Windows 打包通过。 - 本地提交:`1a63264`、`032f8c5`、`73d775b`;远端最终提交:`dde84c8687de505445376f537dd60f10a78a6698`。 - Wiki archive revision:`27ac0fe8ef97f9ec835fa62713f3a8c23c077940`。 - PR:#52 https://git.ilapage.cn/ila/yovision/pulls/52 工单保持开启,等待验收;继续执行后续 #51。
Author
Owner

用户验收通过(2026-08-14)

用户已明确确认当前未验收工单通过验收。本工单的实现、测试与既有证据按记录接受,Wiki 归档状态已更新为“已完成”(revision db171a0325bb)。该交付属于重建前历史实现;Wiki 归档已完成,代码与原归档镜像继续保留在 explore 追溯。

此验收不改变 #58 的架构决定:旧自研基础框架不会恢复为 dev 基线,Sense/Bell 后续仍分别由 #61/#62 从冻结 GoAdmin 源码重建。

## 用户验收通过(2026-08-14) 用户已明确确认当前未验收工单通过验收。本工单的实现、测试与既有证据按记录接受,Wiki 归档状态已更新为“已完成”(revision `db171a0325bb`)。该交付属于重建前历史实现;Wiki 归档已完成,代码与原归档镜像继续保留在 `explore` 追溯。 此验收不改变 #58 的架构决定:旧自研基础框架不会恢复为 `dev` 基线,Sense/Bell 后续仍分别由 #61/#62 从冻结 GoAdmin 源码重建。
ila closed this issue 2026-08-14 10:06:50 +08:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: ila/yovision#50