[SEN] 在 GoAdmin 基线上重建 ONVIF 发现、手工接入与 RTSP Profile #66

Closed
opened 2026-08-14 10:26:39 +08:00 by ila · 4 comments
Owner

状态

已完成

基本信息

  • 类型:需求 / 新 GoAdmin 基线重建
  • 任务类型:单项目独立任务
  • 主项目:Sense
  • 主 agent:Sense agent
  • 所属 Epic:#7
  • 所属 MVP:#8
  • 前置工单:#65
  • 是否允许与前置工单并行:否
  • 原因:发现和接入结果必须归属已存在的 Device,并复用其凭据、权限、并发和审计边界。
  • 独立运行:Brain、Bell 均不启动时完成实现和验收

原始需求与追溯

  • 来源:用户于 2026-08-14 要求先建立 Sense 全部独立任务工单;Product-Requirements、Product-Roadmap、Requirements-Migration-Matrix。
  • 需求摘要:在 #61 冻结 GoAdmin/go-admin-ui 源码派生骨架上,重新实现 Sense 独立纵切;旧 explore 只用于业务、测试和故障证据,不复制自研基础框架。
  • 历史对照:#24、#48、#50 的 Digest、地址归一化、分离凭据和真实设备证据。

目标

实现获准网卡上的 ONVIF 发现、手工地址接入、Digest/Basic 认证、Media 地址安全归一化、ONVIF/RTSP 分离凭据和 Profile 持久化验证。

做什么

提供发现网卡配置与可解释错误;支持手工添加、重新探测、凭据更新、主/子码流、StreamUri、校时与逐 Profile 状态;阻止重定向和未授权目标访问。

不做什么

不启动 MediaMTX、不播放视频、不把摄像头凭据写入返回体;不扫描未获准网卡;不发布 Sense→Brain 契约。

GoAdmin 复用与文档门禁

  • 必须沿用 #61 建立的 Cobra、Gin、GORM、Casbin、JWT、迁移、Router、Store、Axios、Layout 和权限链。
  • 优先复用 go-admin-ui 的页面容器、搜索栏、表格、表单、分页、Dialog、Tag、权限按钮和反馈组件。
  • 冻结 go-admin-doc 必查:router.md、api.md、dto.md、service.md、db.md,以及 go-admin-ui 表单、步骤反馈、Dialog 与 Tag。
  • 在工单评论记录实际阅读文件、采用方式及无法复用而新增的业务组件。
  • 不永久删除默认模块;无关能力采用菜单、路由、权限和后端访问同时禁用。

写路径

  • Sense/server/app/sense/admission/**
  • Sense/server/app/sense/onvif/**
  • Sense/server/app/sense/rtsp/**
  • Sense/server/cmd/migrate/migration/version/*profile*
  • Sense/server/app/admin/router/sense_admission.go
  • Sense/server/app/sense/credential/**
  • Sense/ui/src/views/sense/admission/**
  • Sense/ui/src/views/sense/device/index.vue
  • Sense/ui/src/api/sense/admission*
  • Sense/ui/src/components/sense/admission/**
  • Sense/server/tests/admission/**
  • Sense/server/app/sense/onvif/**/*_test.go
  • Sense/server/app/sense/rtsp/**/*_test.go
  • Sense/server/app/sense/admission/**/*_test.go
  • Sense/ui/tests/unit/sense/admission*.spec.js
  • Sense/README.md

禁止写入:Brain/**、Bell/**、contracts/**、根级部署配置、docs/**、wiki-docs.json。如实现发现必须修改这些路径,停止并转协同工单。

文档影响

更新发现网卡、手工接入、认证、Profile、校时、地址安全和故障恢复说明。

长期文档先更新 Gitea Wiki;本地 docs/ 镜像由单一协调工单同步,避免共享路径冲突。

验收标准

  • 未配置获准发现网卡时给出可行动提示,不做任意网卡扫描
  • 支持 ONVIF Digest/Basic 与手工 RTSP 验证
  • ONVIF 和 RTSP 凭据可分离或显式复用且不回显
  • Media XAddr 与 StreamUri 经过 SSRF/重定向/凭据泄漏防护
  • Profile、主/子码流和验证状态重启后仍可恢复
  • 认证失败、时间漂移、重新探测和凭据更新有明确状态与审计

验证方式

  • 协议解析、Digest、地址归一化、SSRF 和凭据测试
  • 合成 ONVIF/RTSP 服务集成测试
  • 获准实验室摄像机兼容测试;无设备时明确记录未验证边界
  • 前端接入向导、错误恢复、lint 和 build

风险与回退

网络发现、SSRF 与凭据处理风险高。默认拒绝未授权网络和重定向;失败不改变已验证 Profile;回退任务迁移与接入记录。

协同需求摘要

本工单不建立跨项目契约。发现 Sense→Brain 源/区域配置或 Sense/Brain→Bell 事件/证据需求时,只记录生产者、消费者、目的与建议验证,不取得共享写路径。

实施结果(2026-08-14)

  • 实现提交:2bb1614;长期文档提交:26e2e63;待验收归档镜像提交:d74e1ae。
  • PR:#84 已合并到 dev,merge commit 24cf4bbd6532356084b8d6f3643f03844946dc77。
  • 后端 go test ./...、go vet ./...、go build ./... 通过;前端 9 suites / 34 tests、lint(0 error)及生产构建通过。
  • PostgreSQL 17 迁移、重复迁移和连接重开后的 Profile 主子码流恢复通过;迁移结果:2 张业务表、3 个菜单、7 条策略。
  • Wiki 归档:Task-66-Sense视频接入与Profile,完成 revision 322feb232fc03c3a9ba22f65504cf3e151fb0e57;验收镜像提交 ab54235,一致性检查通过。
  • 未验证:未连接客户或实验室真实摄像机;真实厂商 Digest/RTSP 兼容、现场网络 ACL、设备校时和目标浏览器需在授权现场验收,不声称已经通过。

验收结论(2026-08-14)

用户明确验收通过;PR #84 已合并到 dev。真实摄像机现场兼容性仍按已记录边界留待授权环境验证。

## 状态 已完成 ## 基本信息 - 类型:需求 / 新 GoAdmin 基线重建 - 任务类型:单项目独立任务 - 主项目:Sense - 主 agent:Sense agent - 所属 Epic:#7 - 所属 MVP:#8 - 前置工单:#65 - 是否允许与前置工单并行:否 - 原因:发现和接入结果必须归属已存在的 Device,并复用其凭据、权限、并发和审计边界。 - 独立运行:Brain、Bell 均不启动时完成实现和验收 ## 原始需求与追溯 - 来源:用户于 2026-08-14 要求先建立 Sense 全部独立任务工单;Product-Requirements、Product-Roadmap、Requirements-Migration-Matrix。 - 需求摘要:在 #61 冻结 GoAdmin/go-admin-ui 源码派生骨架上,重新实现 Sense 独立纵切;旧 `explore` 只用于业务、测试和故障证据,不复制自研基础框架。 - 历史对照:#24、#48、#50 的 Digest、地址归一化、分离凭据和真实设备证据。 ## 目标 实现获准网卡上的 ONVIF 发现、手工地址接入、Digest/Basic 认证、Media 地址安全归一化、ONVIF/RTSP 分离凭据和 Profile 持久化验证。 ## 做什么 提供发现网卡配置与可解释错误;支持手工添加、重新探测、凭据更新、主/子码流、StreamUri、校时与逐 Profile 状态;阻止重定向和未授权目标访问。 ## 不做什么 不启动 MediaMTX、不播放视频、不把摄像头凭据写入返回体;不扫描未获准网卡;不发布 Sense→Brain 契约。 ## GoAdmin 复用与文档门禁 - 必须沿用 #61 建立的 Cobra、Gin、GORM、Casbin、JWT、迁移、Router、Store、Axios、Layout 和权限链。 - 优先复用 go-admin-ui 的页面容器、搜索栏、表格、表单、分页、Dialog、Tag、权限按钮和反馈组件。 - 冻结 go-admin-doc 必查:`router.md`、`api.md`、`dto.md`、`service.md`、`db.md`,以及 go-admin-ui 表单、步骤反馈、Dialog 与 Tag。 - 在工单评论记录实际阅读文件、采用方式及无法复用而新增的业务组件。 - 不永久删除默认模块;无关能力采用菜单、路由、权限和后端访问同时禁用。 ## 写路径 - `Sense/server/app/sense/admission/**` - `Sense/server/app/sense/onvif/**` - `Sense/server/app/sense/rtsp/**` - `Sense/server/cmd/migrate/migration/version/*profile*` - `Sense/server/app/admin/router/sense_admission.go` - `Sense/server/app/sense/credential/**` - `Sense/ui/src/views/sense/admission/**` - `Sense/ui/src/views/sense/device/index.vue` - `Sense/ui/src/api/sense/admission*` - `Sense/ui/src/components/sense/admission/**` - `Sense/server/tests/admission/**` - `Sense/server/app/sense/onvif/**/*_test.go` - `Sense/server/app/sense/rtsp/**/*_test.go` - `Sense/server/app/sense/admission/**/*_test.go` - `Sense/ui/tests/unit/sense/admission*.spec.js` - `Sense/README.md` 禁止写入:`Brain/**`、`Bell/**`、`contracts/**`、根级部署配置、`docs/**`、`wiki-docs.json`。如实现发现必须修改这些路径,停止并转协同工单。 ## 文档影响 更新发现网卡、手工接入、认证、Profile、校时、地址安全和故障恢复说明。 长期文档先更新 Gitea Wiki;本地 `docs/` 镜像由单一协调工单同步,避免共享路径冲突。 ## 验收标准 - [x] 未配置获准发现网卡时给出可行动提示,不做任意网卡扫描 - [x] 支持 ONVIF Digest/Basic 与手工 RTSP 验证 - [x] ONVIF 和 RTSP 凭据可分离或显式复用且不回显 - [x] Media XAddr 与 StreamUri 经过 SSRF/重定向/凭据泄漏防护 - [x] Profile、主/子码流和验证状态重启后仍可恢复 - [x] 认证失败、时间漂移、重新探测和凭据更新有明确状态与审计 ## 验证方式 - 协议解析、Digest、地址归一化、SSRF 和凭据测试 - 合成 ONVIF/RTSP 服务集成测试 - 获准实验室摄像机兼容测试;无设备时明确记录未验证边界 - 前端接入向导、错误恢复、lint 和 build ## 风险与回退 网络发现、SSRF 与凭据处理风险高。默认拒绝未授权网络和重定向;失败不改变已验证 Profile;回退任务迁移与接入记录。 ## 协同需求摘要 本工单不建立跨项目契约。发现 Sense→Brain 源/区域配置或 Sense/Brain→Bell 事件/证据需求时,只记录生产者、消费者、目的与建议验证,不取得共享写路径。 ## 实施结果(2026-08-14) - 实现提交:`2bb1614`;长期文档提交:`26e2e63`;待验收归档镜像提交:`d74e1ae`。 - PR:#84 已合并到 `dev`,merge commit `24cf4bbd6532356084b8d6f3643f03844946dc77`。 - 后端 `go test ./...`、`go vet ./...`、`go build ./...` 通过;前端 9 suites / 34 tests、lint(0 error)及生产构建通过。 - PostgreSQL 17 迁移、重复迁移和连接重开后的 Profile 主子码流恢复通过;迁移结果:2 张业务表、3 个菜单、7 条策略。 - Wiki 归档:`Task-66-Sense视频接入与Profile`,完成 revision `322feb232fc03c3a9ba22f65504cf3e151fb0e57`;验收镜像提交 `ab54235`,一致性检查通过。 - 未验证:未连接客户或实验室真实摄像机;真实厂商 Digest/RTSP 兼容、现场网络 ACL、设备校时和目标浏览器需在授权现场验收,不声称已经通过。 ## 验收结论(2026-08-14) 用户明确验收通过;PR #84 已合并到 `dev`。真实摄像机现场兼容性仍按已记录边界留待授权环境验证。
ila added the kind/taskproject/sensescope/independentpriority/p0 labels 2026-08-14 10:26:39 +08:00
Author
Owner

2026-08-14 开始实施,前置 #65 已验收并合入 dev。路径按当前 GoAdmin 派生树校正:迁移位于 cmd/migrate/migration/version/,路由注册位于 app/admin/router/sense_admission.go;为消费 #65 已建立的只写凭据边界,增加 app/sense/credential/** 内部读取端口,但不新增 HTTP 读取能力。该调整不改变用户确认的功能结果或跨项目边界。

已完整阅读冻结 go-admin-doc 的 router.md、api.md、dto.md、service.md、db.md:采用既有 JWT + Casbin 路由链、Api/Service 分层、显式 DTO 白名单、GORM/PostgreSQL 迁移;前端继续复用 go-admin-ui 页面容器、Element Plus Form/Dialog/Table/Tag、权限指令和 Axios。旧 explore 仅提取 Digest、地址归一化、发现网卡门禁、Profile 语义和测试证据。

2026-08-14 开始实施,前置 #65 已验收并合入 `dev`。路径按当前 GoAdmin 派生树校正:迁移位于 `cmd/migrate/migration/version/`,路由注册位于 `app/admin/router/sense_admission.go`;为消费 #65 已建立的只写凭据边界,增加 `app/sense/credential/**` 内部读取端口,但不新增 HTTP 读取能力。该调整不改变用户确认的功能结果或跨项目边界。 已完整阅读冻结 go-admin-doc 的 `router.md`、`api.md`、`dto.md`、`service.md`、`db.md`:采用既有 JWT + Casbin 路由链、Api/Service 分层、显式 DTO 白名单、GORM/PostgreSQL 迁移;前端继续复用 go-admin-ui 页面容器、Element Plus Form/Dialog/Table/Tag、权限指令和 Axios。旧 `explore` 仅提取 Digest、地址归一化、发现网卡门禁、Profile 语义和测试证据。
Author
Owner

实现中补充 Sense/ui/src/views/sense/device/index.vue:#66 会新增 active 设备状态,设备台账必须显示“已接入”而不是继续显示“待接入”。这是接入结果的必要用户反馈,不改变任务范围或跨项目边界。

实现中补充 `Sense/ui/src/views/sense/device/index.vue`:#66 会新增 `active` 设备状态,设备台账必须显示“已接入”而不是继续显示“待接入”。这是接入结果的必要用户反馈,不改变任务范围或跨项目边界。
Author
Owner

#66 已完成实现并进入待验收。

  • PR:#84(feature/66-sense-onvif-admission → dev),当前打开、未合并。
  • 提交:2bb1614(实现)、26e2e63(长期文档)、d74e1ae(待验收归档镜像)。
  • 后端:go test ./...、go vet ./...、go build ./... 均通过。
  • 前端:lint 0 error(31 条上游 warning),9 suites / 34 tests 通过,生产构建通过(6 条上游 warning)。
  • PostgreSQL 17:迁移及重复迁移通过;2 张业务表、3 个菜单、7 条 Casbin 策略;隔离数据库连接重开后读取主/子 Profile 通过。
  • 安全边界:显式发现网卡/CIDR、禁代理与重定向、DNS 重新解析后固定获准目标、拒绝 URL 凭据和敏感查询参数、凭据仅经内部端口读取;相关单元与合成协议测试通过。
  • 权限证据:迁移中的菜单与 Casbin 策略数量/内容已核验;本工单未声称完成独立 HTTP 角色矩阵集成测试。
  • Wiki:Task-66-Sense视频接入与Profile revision ae7785b6bcfbe1f9105ce76ee8aef5505fc3c0f3;sync_wiki_docs.py --check 通过。
  • 未验证:尚未连接客户/实验室真实摄像机,真实厂商 Digest/RTSP 兼容、现场网络 ACL、设备校时和目标浏览器留待授权现场验收。

请按工单标准验收;验收通过后再合并 PR #84 到 dev,不会合并到 main。

#66 已完成实现并进入待验收。 - PR:#84(`feature/66-sense-onvif-admission` → `dev`),当前打开、未合并。 - 提交:`2bb1614`(实现)、`26e2e63`(长期文档)、`d74e1ae`(待验收归档镜像)。 - 后端:`go test ./...`、`go vet ./...`、`go build ./...` 均通过。 - 前端:lint 0 error(31 条上游 warning),9 suites / 34 tests 通过,生产构建通过(6 条上游 warning)。 - PostgreSQL 17:迁移及重复迁移通过;2 张业务表、3 个菜单、7 条 Casbin 策略;隔离数据库连接重开后读取主/子 Profile 通过。 - 安全边界:显式发现网卡/CIDR、禁代理与重定向、DNS 重新解析后固定获准目标、拒绝 URL 凭据和敏感查询参数、凭据仅经内部端口读取;相关单元与合成协议测试通过。 - 权限证据:迁移中的菜单与 Casbin 策略数量/内容已核验;本工单未声称完成独立 HTTP 角色矩阵集成测试。 - Wiki:`Task-66-Sense视频接入与Profile` revision `ae7785b6bcfbe1f9105ce76ee8aef5505fc3c0f3`;`sync_wiki_docs.py --check` 通过。 - 未验证:尚未连接客户/实验室真实摄像机,真实厂商 Digest/RTSP 兼容、现场网络 ACL、设备校时和目标浏览器留待授权现场验收。 请按工单标准验收;验收通过后再合并 PR #84 到 `dev`,不会合并到 `main`。
ila closed this issue 2026-08-14 17:18:56 +08:00
Author
Owner

用户已于 2026-08-14 明确验收通过。归档 Wiki 完成 revision:322feb232fc03c3a9ba22f65504cf3e151fb0e57;本地验收镜像提交:ab54235;PR #84 已合并到 dev,merge commit:24cf4bbd6532356084b8d6f3643f03844946dc77。工单现已关闭。

用户已于 2026-08-14 明确验收通过。归档 Wiki 完成 revision:`322feb232fc03c3a9ba22f65504cf3e151fb0e57`;本地验收镜像提交:`ab54235`;PR #84 已合并到 `dev`,merge commit:`24cf4bbd6532356084b8d6f3643f03844946dc77`。工单现已关闭。
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: ila/yovision#66