3.9 KiB
3.9 KiB
generated: true (请先修改 Gitea Wiki,禁止直接编辑本文件) wiki_page: Task-66-Sense视频接入与Profile wiki_url: https://git.ilapage.cn/ila/yovision/wiki/Task-66-Sense%E8%A7%86%E9%A2%91%E6%8E%A5%E5%85%A5%E4%B8%8EProfile.- wiki_revision: 87b3a59f3f27df1f1fb357f6c13a1e31cdde5e05 synchronized_at: 2026-08-27T09:13:37Z
66 Sense视频接入与Profile
- 类型:需求
- 所属 Epic:#7
- 所属 MVP / 版本:#8
- 状态:已完成
- 日期:2026-08-14
- 验收:用户于 2026-08-14 明确验收通过
- 工单:#66
- Pull Request:#84
- 主项目:Sense
背景与目标
在 #65 设备与凭据边界上重建获准网卡 ONVIF 发现、手工接入、认证、RTSP 验证和 Profile 持久化。Brain、Bell 不启动时可独立验收。
最终方案
- WS-Discovery 只绑定 SENSE_ONVIF_DISCOVERY_IP 指定的本机地址;无配置或非本机地址给出明确提示。
- ONVIF、Media XAddr 和 RTSP Stream URI 均受 SENSE_ONVIF_ALLOWED_CIDRS 限制;每次连接重新解析并固定目标 IP,禁用代理和重定向,拒绝 URL 用户信息及敏感查询参数。
- ONVIF 支持 Basic、MD5/SHA-256 Digest auth;不支持的算法或 qop 拒绝。
- 内部读取 #65 的 ONVIF/RTSP 分用途密文,HTTP 不提供凭据读取。
- Profile、主/子码流、无凭据 Stream URI 和逐项验证状态持久化到 PostgreSQL;失败重探保留最后一次已验证 Profile。
- 复用 GoAdmin JWT/Casbin/操作审计、迁移和 go-admin-ui BasicLayout、Element Plus Form/Dialog/Table/Tag、动态菜单与权限按钮。
- implementation_operator、site_admin 可发现和探测,viewer 只读保存结果。
修改文件
- 后端入口与业务:
Sense/server/app/admin/router/sense_admission.go、Sense/server/app/sense/admission/**、Sense/server/app/sense/onvif/**、Sense/server/app/sense/rtsp/**。 - 数据与验证:
Sense/server/cmd/migrate/migration/version/2026081417000_profile.go、Sense/server/tests/admission/postgres_test.go。 - 前端:
Sense/ui/src/api/sense/admission.js、Sense/ui/src/views/sense/admission/**、Sense/ui/src/views/sense/device/index.vue及对应单元测试。 - 完整文件清单以实现提交
2bb1614和 PR #84 的 Git diff 为准。
验收结果
| 标准 | 结果 |
|---|---|
| 未配置获准网卡不扫描 | 单元测试及错误映射通过 |
| Digest/Basic 与 RTSP 验证 | 合成协议服务通过 |
| ONVIF/RTSP 分离凭据且不回显 | 内部端口与严格 DTO 通过 |
| SSRF/重定向/凭据泄漏防护 | CIDR、DNS、URL、重定向测试通过 |
| Profile 重启恢复 | PostgreSQL 17 连接重开测试通过 |
| 认证失败、时间异常、重探 | 状态分类和失败保留 Profile 测试通过 |
测试
- go test ./...:通过。
- go vet ./...:通过。
- go build ./...:通过。
- 前端 lint:0 error,31 条上游继承 warning。
- 前端单测:9 suites、34 tests 通过。
- 前端生产构建:通过,6 条继承 warning。
- PostgreSQL 17:迁移与重复迁移通过;migration=1、tables=2、menus=3、policies=7。
- SENSE_ADMISSION_TEST_DATABASE_URL 隔离测试:写入 Profile、重开连接、读取主子码流通过。
- Wiki 镜像检查:通过。 未验证部分:未连接客户或实验室真实摄像机;真实厂商 Digest/RTSP 兼容、网络 ACL、设备校时和目标浏览器留待授权现场验收,不声称已通过。
回退
回退 PR #84 的实现和文档提交可移除入口;已产生的接入表保留以避免破坏追溯数据。失败探测本身不删除最后一次已验证 Profile。