This commit is contained in:
2025-10-21 08:29:56 +00:00
parent 8eaf13f445
commit 1d395a5943
2 changed files with 113 additions and 1 deletions

113
README.md Normal file
View File

@@ -0,0 +1,113 @@
# est-api
EST 本地部署的后端 API包含两个子服务并通过统一入口启动
- 根路径 `/`平台框架接口frameworkapi
- 前缀 `/dsxapi`DSX 模拟器相关接口dsxapi
## 快速启动
```bash
# 安装依赖
npm install
# 启动统一入口(默认监听 3000
npm start
```
- 统一入口:`app.js`,将 `frameworkapi` 挂载到 `/``dsxapi` 挂载到 `/dsxapi`
- 端口:默认 `3000`
## 目录结构
- `/app.js` 统一入口,挂载两个子服务
- `/farmeworkapi/` 平台框架接口
- `.env` 环境变量文件(子服务加载)
- `farmeworkapi.js` 主入口
- `license/` 存放许可证(.lic
- `pub.pem`/`priv.pem` 公钥/私钥;`license_issuer.html` 颁发页面
- `network` 宿主机网络配置中转文件
- `/dsxapi/` DSX 模拟器接口
- `dsxapi.js` 主入口
- `competition_data/` 结束后持久化的比赛数据(.est
- `competition_tmp/` 比赛进行时的临时备份目录
- `connection_maps/connectionMap.json` 连接映射持久化
## 配置与环境变量
`farmeworkapi` 会加载其目录下 `.env`
```ini
# Database configuration
DB_HOST=est_mysql
DB_PORT=3306
DB_USER=root
DB_PASSWORD=MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQDQMYcjqnrMnr9G
DB_NAME=login
# SurveyKing_DB_NAME
SurveyKing_DB_HOST=est_mysql
SurveyKing_DB_PORT=3306
SurveyKing_DB_USER=root
SurveyKing_DB_PASSWORD=MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQDQMYcjqnrMnr9G
SurveyKing_DB_NAME=surveyking
# JWT configuration
JWT_SECRET=MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQDQMYcjqnrMnr9G
# Server configuration
PORT=3000
```
## 路由与接口
以下路径均为统一入口下的最终路径。
### frameworkapi前缀 `/`
- `POST /login` AES(CBC) 加密的登录数据,成功返回 `token` 与用户等级
- `GET /check-auth`(鉴权)返回当前用户认证状态
- `POST /verify-token` 校验令牌有效性
- `GET /user-info`(鉴权)获取用户信息
- `GET /verify-admin`(鉴权)校验是否管理员
- `GET /admin/users`(鉴权)列出用户
- `POST /admin/users`(鉴权)新增/修改用户
- `DELETE /admin/users/:student_id`(鉴权)删除用户
- `GET /online-users`(鉴权)在线与历史统计
- `POST /update-activity`(鉴权)更新心跳/活跃时间
- `POST /logout`(鉴权)登出
许可证相关:
- `GET /public-key` 获取 RSA 公钥(用于前端加密)
- `GET /product-model` 返回产品型号(随许可证状态)
- `POST /upload-license` 上传 `.lic` 文件并验证form-data
- `GET /license-status` 许可证验证状态摘要
- `GET /license-info`(鉴权)许可证详细信息
网络配置:
- `GET /network-config`(鉴权)读取 `farmeworkapi/network`
- `POST /network-config`(鉴权)更新指定键:`BOOTPROTO``IPADDR``NETMASK``GATEWAY``DNS`
- `BOOTPROTO` 仅支持 `dhcp``static`
- `static` 时必须提供 `IPADDR``NETMASK``GATEWAY``DNS`
Survey 数据:
- `GET /survey-answers` 读取 SurveyKing 数据库中的问卷答案(具体查询参数以实现为准)
### dsxapi前缀 `/dsxapi`
连接映射:
- `GET /api/connectionMap?scene=XXX` 返回 `pass` 与指定场景合并后的映射
- `POST /api/connectionMap` 更新某场景映射(禁止修改 `pass`
- `POST /api/initConnectionMap` 恢复到初始映射并持久化
比赛流程:
- `POST /api/competition/start` 开始比赛,返回 `UUID`,每分钟写入临时备份到 `competition_tmp/<UUID>/`
- `POST /api/competition/end` 结束比赛,写入编码 `.est` 文件到 `competition_data/`
- `GET /api/competition/status` 查询是否进行中及 `UUID`、开始时间
- `POST /api/competition/data` 上传统计数据(需携带 `UUID``fingerprint``data`
- `GET /api/competition/data?UUID=...&fingerprint=...` 查询指定指纹数据(返回 `projects`
- `GET /api/competition/data` 返回当前全部统计数据快照
## 日志
- `farmeworkapi/server.log` 常规日志;`farmeworkapi/admin.log` 管理员操作日志
- dsxapi 独立运行时在控制台输出重要提示与告警
## Docker 与挂载建议
- 挂载 `farmeworkapi/license/` 以便导入许可证
- 挂载 `farmeworkapi/network` 供网络配置接口读写
- 挂载 `/hardware_serial` 到容器内,提供硬件序列号以完成许可证绑定
- 可选择将 `dsxapi/competition_data/``dsxapi/competition_tmp/` 映射到持久卷

View File

@@ -4,7 +4,6 @@ const fs = require('fs');
const path = require('path');
const app = express();
const PORT = 3007;
// 初始连接映射数据
const initialConnectionMap = {