Skip to content
OrPuddingPublic

About

No description, website, or topics provided.

Resources

Stars

2 stars

Watchers

0 watching

Forks

Repository files navigation

OVAM

Open Vela Authorization Manager — 快应用/嵌入式设备的授权、订单履约、动态遥测与云控管理系统。

功能

  • 订单履约与自动补单:
    • 支持接收爱发电 Webhook 实时回调,自动核验并激活设备
    • 内置定时后台对账协程,自动轮询爱发电 API 补单
    • 支持后台手动创建订单、一键拉取爱发电订单同步
  • 设备授权与订单改配:
    • 基于 SKU 与有效期的设备授权管理,支持行级事务锁防止并发冲突
    • 支持订单快速改配(换绑目标产品、调整 SKU 档位或设备 ID,并可立即重新计算设备到期时间)
  • License 签发:RSA 签名 License,支持客户端在线/离线验签,支持永久授权与按时长续费叠加
  • 多产品动态遥测 (Telemetry):
    • 产品级独立遥测配置(自定义启动/活跃事件、行为统计白名单、每日聚合)
    • 数据大盘可视化(近 30 天 DAU 趋势、启动频次、设备硬件代号分布、应用版本分布)
    • 单设备精准管理(支持按时长/永久黑名单封禁并自定义拦截提示,支持设备级功能开关覆盖)
  • 云控中心:结构化配置下发(公告推送、维护模式、功能开关 Feature Toggles、版本更新提醒)
  • 现代化管理后台:Material Design 3 风格 Web UI(纯 Go 单文件通过 embed.FS 嵌入打包,无需额外静态服务器),支持多产品快速切换
  • 安全与免密登录:
    • bcrypt 密码哈希 + TOTP 双因素认证(强制 2FA)
    • JWT 默认 7 天有效 / 支持勾选【30天免密登录】
    • 内置无感滑动续期(API 交互自动静默延长 Token 寿命)
    • 密钥本地持久化(重启服务或拉取更新后无需反复扫码登录)
  • 审计日志:完整记录管理员关键操作行为与审计回溯

技术栈

  • 后端:Go 1.23+ + Gin + GORM + SQLite(github.com/glebarez/sqlite 纯 Go 驱动)
  • 前端:Material Web Components + Lit HTML(单文件嵌入)
  • 认证:bcrypt + TOTP + JWT(默认7天/支持30天免密,无感滑动续期)
  • 构建:纯 Go 零 CGO 依赖,支持全平台一键交叉编译

快速开始

1. 下载

git clone https://github.com/yourusername/ovam.git
cd ovam

2. 配置环境变量

cp .env.example .env

编辑 .env:

# 管理员认证(必需)
OVAM_ADMIN_PASSWORD=your-secure-password
OVAM_TOTP_SECRET=your-totp-secret

# 爱发电配置(如使用)
OVAM_AFDIAN_USER_ID=your-user-id
OVAM_AFDIAN_API_TOKEN=your-api-token
AFDIAN_WEBHOOK_TOKEN=your-webhook-token

# JWT 签名密钥(可选,未设置时系统会自动持久化存储于 data/.jwt_secret)
OVAM_JWT_SECRET=your-jwt-secret
# JWT 过期小时数(可选,默认 168 小时即 7 天;勾选记住登录时为 30 天)
OVAM_JWT_EXPIRE_HOURS=168

# 产品私钥(通过 private_key_env 关联)
OVAM_OMUSIC_VELA_PRIVATE_KEY=-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----

生成 TOTP Secret: 打开 tools/generate-totp.html(本地文件),使用 Google/Microsoft Authenticator 扫描生成的二维码。

3. 配置产品与遥测

编辑 config.yaml:

server:
  port: 5050
  run_mode: release

database:
  path: ./data/ovam.db
  max_open_conns: 1
  enable_wal: true

afdian:
  user_id: ${OVAM_AFDIAN_USER_ID}
  api_token: ${OVAM_AFDIAN_API_TOKEN}
  webhook_token: ${AFDIAN_WEBHOOK_TOKEN}
  auto_sync: true             # 开启后台定时轮询自动补单
  sync_interval_min: 5        # 补单轮询间隔(分钟)

products:
  - slug: your_product
    name: 产品名称
    plan_id: 爱发电方案ID
    private_key_env: ENV_KEY_NAME
    telemetry:                # 动态遥测配置
      enabled: true           # 开启该产品遥测
      startup_event: app_start
      allowed_behaviors:      # 允许统计的行为白名单(留空表示允许全部)
        - open_menu
        - open_search
        - play_music
      daily_aggregation: true # 开启每日按日期聚合统计
    skus:
      - alias: m
        sku_id: 爱发电SKU-ID
        amount: "5.00"
        duration_days: 30
        plan_name: 一个月
      - alias: f
        sku_id: 爱发电SKU-ID
        amount: "50.00"
        duration_days: -1
        plan_name: 永久

4. 编译

# Linux AMD64(默认)
./build.sh

# 其他平台
./build.sh linux arm64
./build.sh darwin arm64
./build.sh windows amd64

5. 运行

./dist/ovam-linux-amd64

访问 http://localhost:5050,使用密码 + TOTP 验证码登录管理控制台。

架构

ovam/
├── main.go                  # 入口、DB 初始化与优雅停机
├── internal/
│   ├── app/                # 全局 State 状态容器
│   ├── config/             # 配置加载、环境变量映射、热重载
│   ├── handler/            # HTTP 控制器 (核心业务与管理端 API)
│   ├── middleware/         # JWT 鉴权中间件、登录频控、滑动续期
│   ├── model/              # 数据模型 (通用遥测、设备、订单、管理员表)
│   ├── router/             # 路由注册与 embed.FS 前端静态资源挂载
│   ├── service/            # License 签发、订单处理/快速改绑、爱发电补单服务
│   ├── utils/              # RSA 签名算法、TOTP/密码校验、爱发电 API 客户端
│   └── worker/             # 异步事件队列与后台自动补单定时协程
├── config.yaml             # 产品、SKU、云控及遥测配置
├── .env                    # 敏感私钥与凭证(gitignored)
└── tools/
    └── generate-totp.html  # TOTP 密钥与二维码生成工具

API 文档

详见 docs/API.md。

开源许可

MIT License — 详见 LICENSE。

About

No description, website, or topics provided.

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages