Commit Graph

9 Commits

Author SHA1 Message Date
noelorin 478a758263 feat(trunk): SRS as single trunk, trunk+distributors in config/events 2026-08-23 13:59:20 +08:00
noelorin 1f422c7340 feat(proto): add distribution model srs-hls/cf/cdn 2026-08-23 13:56:31 +08:00
noelorin 077226df4c refactor(manage): 对齐 GOSpeak 壳层拆分管理页 + 清理重复流程
- 从 919 行单文件拆为 8 模块:ManageShell/ManageOverview/ManageRooms/ManagePermissions/ManageSystem/ManageUsersInline/constants/manageNav
- 主入口 web/src/app/routes/manage.tsx 80 行仅作状态与组合,去掉与 /users 重复的用户内嵌 tab(保留权限/房间/概览/系统)
- manageNav 引入权限过滤 MANAGE_TABS,对齐 GOSpeak 的 manageNav + ManageShell 壳层思路
- 忽略规则修正:server -> /server 避免误吞 internal/server,新增 .shots/ 与 web/shot*.mjs
- 新增 playwright 截图链路(devDep),配套更新 pnpm-lock
2026-08-21 07:56:33 +08:00
noelorin 46a6bd02d9 feat: 接入 sync-live 后端重构,前端全面对齐新协议与接口
- proto: live_sfu.proto -> sync_live.proto (synclive.v1/SyncLive),重生成 gen/sync_live.*
- module: example.com/live-sfu -> sync-live,go.mod/go.sum 同步
- 后端: 新增 internal/room (role/member/room/service/store/permission),manage 治理面 internal/server/manage.go,auth(jwt/policy) 与 gateway/server 重构,适配 token_type/access+refresh 与 HttpOnly Cookie
- 前端: types/api/auth/permissions 全量对齐,rooms 优先 query 分页、manage 创建,login 双模式+角色降级,用户管理封禁/解封,新增 /manage 5 Tab 治理页,主题与路由同步
- 构建: web 产物直出 internal/server/static,role 字符串序列化兼容数字,libsql 链接告警忽略

验证: web tsc --noEmit / go test / vite build / go build 常驻联调通过 (role:"creator" / manage/overview/rooms/query/create/members/refresh)
2026-08-21 00:31:51 +08:00
noelorin ffc69d691c feat(web): acid redesign + hero mouse parallax
- 纯黑/冷白双主题 + 100% 饱和电光酸色(lime/cyan/magenta),强对比冲击
- 氛围层:网格 + 双色光晕 + 扫描线 + 噪点;HUD 边角 / 跑马灯 / 信号条 / 滚动入场
- hero 鼠标视差:ghost 水印反向漂移 + 标题/deck/统计分层位移,rAF+lerp 平滑,reduced-motion 降级
- 修复整页刷新时房间列表鉴权竞态、推流页右栏拉伸空白
- vite dev 根路径服务 + /api /rtc /live 代理(build 仍落 /static/)
2026-08-20 16:15:54 +08:00
noelorin 7274cf58f3 feat(chat): room chat/danmaku over SSE with history replay, host broadcast API and rate limit
- chatHub broadcasts room danmaku over SSE; new subscribers replay the
  last N messages on join so they don't face an empty room.
- Add a host-only external push endpoint POST /api/room/{room}/broadcast
  (requires room:publish, Bearer token) that marks messages host:true.
- Slide-window rate limiter (room+sender+IP, 5 per 3s) guards both the
  public chat and the broadcast endpoint.
- Wire RBAC room:chat policy, SPA routing and the room-creation route.
2026-08-20 15:03:18 +08:00
noelorin 340296f6cc feat(web): rewrite frontend as SolidJS + Tailwind v4 SPA with chat UI
Replace the legacy vanilla HTML/CSS/JS pages with a SolidJS single-page
app (TanStack Router/Query, Ark UI, Tailwind v4) and embed its build
output into the Go binary via //go:embed. SPA routes fall back to
index.html. Includes the room chat/danmaku panel, color picker and
broadcaster overlay on the watch/publish pages. Add web/node_modules
and local data to .gitignore.
2026-08-20 15:03:03 +08:00
noelorin 115b34dcd3 feat(auth): 基于 casbin 的登录与 RBAC 权限系统
- 引入 github.com/casbin/casbin/v2 实现 RBAC (model.conf + policy.csv)
- 角色: admin/publisher/viewer/guest,资源: config/room/user/srs,动作: read/list/publish/subscribe/stop/watch/manage
- JWT 登录 (golang-jwt/jwt/v5,bcrypt 存储,data/users.json 持久化,种子用户 admin/publisher/viewer)
- 中间件: HTTP AuthorizeMiddleware + gRPC Unary/Stream 拦截器,支持 Authorization Bearer/Cookie/Query/X-Token
- 新增 API: POST /api/auth/login|register|logout, GET /api/auth/me|users|check, POST /api/auth/users/role (Casbin 鉴权)
- 保护业务路由: /api/publish/subscribe/stop/rooms/room/*/events/srs/streams 及媒体代理 /rtc/v1/* /api/cf/*
- gRPC 契约新增 Login/Register/GetMe/ListUsers/UpdateUserRole (api/live_sfu.proto + gen)
- 前端 login.html + app.js 自动附加 Authorization,SSE 通过 ?token 传递,未登录自动跳转
- 配置: JWT_SECRET/JWT_TTL/CASBIN_MODEL/CASBIN_POLICY/AUTH_USER_FILE/ALLOW_REGISTER
- 集成 TursoDB 持久化与测试覆盖 (auth_test.go)
2026-08-19 16:42:17 +08:00
noelorin c4a50b07c6 feat: live SFU fan-out demo (Cloudflare Realtime + SRS)
- protobuf/gRPC control plane (LiveSFU service, buf generated)
- Cloudflare Realtime as primary SFU, SRS as secondary backend
- WHIP/WHEP + Cloudflare Realtime media proxies (server injects credentials)
- room fan-out state with SSE; publish/watch frontend
2026-08-17 15:14:51 +08:00