加上登录和角色权限,并用 Vue 控制台区分用户与管理员。
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -23,14 +23,15 @@ python -m app
|
||||
| `app/jobs/daily_yield.py` | 凌晨清算入口 |
|
||||
| `app/scheduler.py` | 进程内定时任务 |
|
||||
| `app/settle.py` | 可单独执行的清算命令 |
|
||||
| `web/` | 控制台页面,服务启动后打开 `/` |
|
||||
| `frontend/` | Vue 3 控制台源码。改完后在该目录执行 `npm run build` |
|
||||
| `web/` | 控制台构建结果,服务启动后打开 `/` |
|
||||
| `deploy/manage.sh` | Ubuntu 22.04 交互式部署,支持 `curl \| bash` |
|
||||
|
||||
## 数据表
|
||||
|
||||
业务表:
|
||||
|
||||
- `users`:钱包地址、注册时间。
|
||||
- `users`:钱包地址、可选用户名和密码、角色 `user` / `admin`、注册时间。
|
||||
- `compute_nodes`:节点 SN、购买金额、12 个月授权、`online` / `offline`、最后心跳。可选 `callback_url` 用来推送任务。
|
||||
- `node_yields`:每日算力产出和积分。同一节点同一天只有一条。
|
||||
- `withdrawal_logs`:提现金额、资产符号、链上哈希、状态。
|
||||
@@ -66,14 +67,43 @@ python -m app
|
||||
|
||||
回传必须带上任务里的 `nonce`。超时、重复回传、nonce 不匹配都不算成功。
|
||||
|
||||
## 登录
|
||||
|
||||
普通用户可以注册钱包、用户名和密码。之后用钱包地址,或用户名加密码登录。管理员只能用账号密码。
|
||||
|
||||
新部署会在安装结束时打印管理员账号 `admin` 和随机密码,并写入 `/opt/hypernode/.env` 的 `ADMIN_PASSWORD`。已经部署过的机器如果 `.env` 里没有这两项,服务第一次启动会在日志里写一次初始密码:
|
||||
|
||||
```bash
|
||||
journalctl -u hypernode.service | grep 初始密码
|
||||
```
|
||||
|
||||
页面路由:
|
||||
|
||||
- `/login` 登录和注册
|
||||
- `/dashboard` 用户自己的节点、今日预计积分、提现申请
|
||||
- `/admin` 管理员看总用户、总节点、总产出、节点在线率和提现审核
|
||||
|
||||
节点心跳、拉任务、回传任务不需要登录。查看全网数据、清算、确认提现需要管理员令牌。
|
||||
|
||||
## 接口
|
||||
|
||||
前缀都是 `/api/v1`。金额在 JSON 里是字符串。
|
||||
前缀都是 `/api/v1`。金额在 JSON 里是字符串。浏览器登录后带 `Authorization: Bearer <token>`。
|
||||
|
||||
| 方法 | 路径 | 作用 |
|
||||
|---|---|---|
|
||||
| POST | `/users` | 注册钱包 |
|
||||
| POST | `/nodes` | 登记节点 |
|
||||
| POST | `/auth/register` | 注册钱包,可带用户名和密码,返回令牌 |
|
||||
| POST | `/auth/login` | 钱包地址,或用户名加密码 |
|
||||
| GET | `/me/dashboard` | 当前用户的节点、积分和提现 |
|
||||
| POST | `/me/nodes` | 给当前钱包登记节点 |
|
||||
| POST | `/me/withdrawals` | 当前用户申请提现 |
|
||||
| GET | `/admin/summary` | 管理员:用户数、节点数、总产出 |
|
||||
| GET | `/admin/users` | 管理员:全网用户 |
|
||||
| GET | `/admin/nodes` | 管理员:节点状态与今日在线率 |
|
||||
| GET | `/admin/withdrawals` | 管理员:提现审核列表 |
|
||||
| POST | `/admin/withdrawals/{id}/confirm` | 管理员:写入链上哈希并完成 |
|
||||
| POST | `/admin/withdrawals/{id}/reject` | 管理员:拒绝并释放占用的积分 |
|
||||
| POST | `/users` | 只登记钱包,不设置密码 |
|
||||
| POST | `/nodes` | 登记节点,必须是该钱包本人或管理员 |
|
||||
| GET | `/nodes/{sn}` | 查看节点 |
|
||||
| POST | `/node/heartbeat` | 心跳,请求体 `{"sn":"..."}` |
|
||||
| GET | `/node/{sn}/tasks` | 拉取未完成任务 |
|
||||
@@ -107,5 +137,10 @@ python -m app
|
||||
| `YIELD_HOUR` / `YIELD_MINUTE` | `0` / `5` | 清算时刻 |
|
||||
| `LICENSE_MONTHS` | `12` | 新节点授权月数 |
|
||||
| `DISABLE_SCHEDULER` | `false` | 设为 `true` 时不启动定时任务 |
|
||||
| `JWT_SECRET` | 空则自动生成并写入数据库 | 登录令牌签名 |
|
||||
| `JWT_EXPIRE_MINUTES` | `1440` | 令牌有效分钟数 |
|
||||
| `ADMIN_USERNAME` | `admin` | 初始管理员用户名 |
|
||||
| `ADMIN_PASSWORD` | 空则首次启动随机生成并写入日志 | 初始管理员密码 |
|
||||
| `ADMIN_WALLET` | `admin-root` | 初始管理员钱包地址 |
|
||||
|
||||
修改 `.env` 后执行 `systemctl restart hypernode`。
|
||||
|
||||
Reference in New Issue
Block a user