mediabot-pt
|
88728ce2c2
|
feat: API 访问日志系统(拦截器 + 统计分析 + 管理页面)
- V6: api_access_logs 表(method/path/email/IP/status/耗时/错误)
- ApiLogInterceptor: 记录所有 /api/v1/** 请求,order(0) 最优先
- ApiLogController: 分页查询 + 按邮箱/路径统计(24h 窗口)
- 前端 ApiLogs.vue: 筛选/统计面板/日志列表/分页
- 导航新增「访问日志」菜单项
|
2026-06-30 11:32:50 +08:00 |
|
mediabot-pt
|
8d8e066e6d
|
feat: Flyway 启动自动 repair → migrate,应用自愈失败迁移记录
- FlywayConfig: 自定义 FlywayMigrationStrategy
- 启动时先 flyway.repair() 清理残留失败记录
- 再 flyway.migrate() 执行待迁移
- 全程应用内完成,无需外部操作
|
2026-06-30 10:44:41 +08:00 |
|
mediabot-pt
|
da79a2dd70
|
fix: 使用 Flyway repair-on-migrate 清理残留失败迁移记录
|
2026-06-30 10:02:31 +08:00 |
|
mediabot-pt
|
56e2615624
|
feat: 待审核变更支持手动搜索匹配已有站点
|
2026-06-30 09:09:24 +08:00 |
|
mediabot-pt
|
d504649100
|
fix: SiteController.submitSiteInfo 返回类型改为 Map(不再返回SiteDTO)
|
2026-06-30 09:05:15 +08:00 |
|
mediabot-pt
|
a7eb63ce1b
|
refactor: site_change_log 重命名为 site_changes,更准确表达待审核+已变更
|
2026-06-30 09:03:58 +08:00 |
|
mediabot-pt
|
39af3dc034
|
refactor: site_submissions 重命名为 site_change_log,更通用的变更记录表
|
2026-06-30 09:02:09 +08:00 |
|
mediabot-pt
|
a6bfc69000
|
feat: 站点管理支持按站点查看变更(审核)记录
|
2026-06-30 08:58:39 +08:00 |
|
mediabot-pt
|
657e0c1a78
|
feat: 新增 site_submissions 审核表, 提交先进审核再写入sites
|
2026-06-30 08:57:10 +08:00 |
|
mediabot-pt
|
aa1e3e9b28
|
feat: sites表支持多名称/多地址(names/urls JSON列), DTO/Service/前端全部适配
|
2026-06-30 08:53:22 +08:00 |
|
mediabot-pt
|
b37b5cc5de
|
fix: 站点管理改用admin全量接口, 显示待审核站点并提供通过/拒绝
|
2026-06-30 08:44:46 +08:00 |
|
mediabot-pt
|
550535f882
|
fix: 站点编辑实现编辑弹窗+PUT端点, 配置查看修复(加载失败)改用/content端点+DTO加submitterId
|
2026-06-30 00:32:14 +08:00 |
|
mediabot-pt
|
48d0e6a247
|
feat: 新增 /api/v1/sites/{siteId}/info 站点信息反馈接口, 支持多名称/多地址/状态/备注
|
2026-06-30 00:16:05 +08:00 |
|
mediabot-pt
|
7c7fe0405a
|
fix: manifest 只返回 ACTIVE 状态的站点
|
2026-06-29 23:35:48 +08:00 |
|
mediabot-pt
|
b829fc68fe
|
feat: 站点提交改为待审核(pending),管理员审核通过/拒绝
- submitSite: 新站点 status=PENDING
- AdminController: GET /admin/sites/pending, POST /admin/sites/{id}/approve|reject
- reject 物理删除站点记录
|
2026-06-29 23:34:14 +08:00 |
|
mediabot-pt
|
d1445d3920
|
fix: 下载配置接口加null检查,前端去掉responseType:text让axios自动解析
|
2026-06-29 23:25:26 +08:00 |
|
mediabot-pt
|
b806a01f13
|
feat: 审核通过移动文件到approved,拒绝删除pending文件
- StorageService 新增 delete()
- approve: 文件 pending → approved
- reject: 删除 pending 文件
|
2026-06-29 23:21:44 +08:00 |
|
mediabot-pt
|
7d7de75bbd
|
refactor: 文件路径按pending/approved区分,去掉版本号
- submit: configs/{siteId}/pending/{hash}.json
- approve: 文件移到 configs/{siteId}/approved/{hash}.json
|
2026-06-29 23:20:14 +08:00 |
|
mediabot-pt
|
d093c5eb28
|
refactor: 存储模式动态检查环境变量,改PAR_STORAGE_TYPE无需重启
- CachedStorageService 每次调用读 PAR_STORAGE_TYPE 环境变量
- QiniuStorageService 首次调用懒初始化,读 QINIU_* 环境变量
- 去掉 @ConditionalOnProperty/@ConditionalOnMissingBean
|
2026-06-29 23:13:38 +08:00 |
|
mediabot-pt
|
cd78cfbf88
|
fix: 七牛读取改用公开URL HTTP GET,不依赖SDK私有API
|
2026-06-29 23:05:07 +08:00 |
|
mediabot-pt
|
41f3a15ddd
|
refactor: 版本号由PAR审核通过时自动分配
- submitConfig: 不再比较版本号,相同hash跳过,不同hash都插入pending
- approveConfig: 自动取最大版本号+1 分配(如 1, 2, 3...)
- 存储路径含hash前缀避免同名冲突
|
2026-06-29 23:02:30 +08:00 |
|
mediabot-pt
|
f351d71d18
|
feat: 七牛云存储支持(本地缓存/备份)
- StorageService 抽象层(store/read/exists)
- QiniuStorageService: 七牛云主存储(@ConditionalOnProperty)
- LocalStorageService: 本地文件存储(默认/@ConditionalOnMissingBean)
- CachedStorageService: 七牛主+本地缓存(写:七牛→本地, 读:本地→七牛)
- 配置: PAR_STORAGE_TYPE=qiniu + QINIU_AK/SK/BUCKET/REGION
- 不配七牛时自动降级到纯本地存储
|
2026-06-29 22:58:32 +08:00 |
|
mediabot-pt
|
377aa90c96
|
fix: 配置文件路径改为 ./data/static(容器内可写)
|
2026-06-29 22:50:14 +08:00 |
|
mediabot-pt
|
64c2ec7700
|
fix: 配置提交500 — 修正静态文件路径 + 启动时创建目录
- par.static.path 默认 ./static(不再重复 configs/)
- @PostConstruct 确保 static/configs 目录存在
- submitConfig 异常时详细日志
|
2026-06-29 22:49:48 +08:00 |
|
mediabot-pt
|
6412026c69
|
fix: @PathVariable 显式指定参数名,兼容无 -parameters 编译
|
2026-06-29 22:43:56 +08:00 |
|
mediabot-pt
|
8565629a80
|
fix: 恢复 V1 原样,site_type 改动迁移到 V5
- V1: 恢复到原始 DEFAULT 'private' + 原始注释
- V5: ALTER TABLE sites MODIFY site_type DEFAULT 'unknown'
- 彻底解决 Flyway checksum 冲突,不改 flyway_schema_history
|
2026-06-29 21:33:34 +08:00 |
|
mediabot-pt
|
23fc6375fd
|
fix: Flyway 关闭 validate-on-migrate 避免 V1 checksum 冲突
|
2026-06-29 21:22:44 +08:00 |
|
mediabot-pt
|
cbf5684abc
|
feat: Manifest 接口支持 ETag 条件请求
- ETag = SHA256(所有 siteId + configHash 拼接)
- 客户端传 If-None-Match 命中返回 304 无数据
- 替代新增 /latest 接口,同一端点高效轮询
|
2026-06-29 17:21:22 +08:00 |
|
mediabot-pt
|
4ba9ade790
|
feat: 添加 GET /api/v1/time 基准时间接口
- 返回服务端 Unix 时间戳(秒)
- 客户端签名前调用此接口获取 timestamp
- 避免跨服务器时钟偏差导致 PSK 签名过期
|
2026-06-29 17:07:29 +08:00 |
|
mediabot-pt
|
bb96062b7c
|
fix: 安全加固 — HMAC_SECRET 启动检查 + 登录锁定 + PSK 窗口配置
- SecurityCheck: 启动时 HMAC_SECRET 为空输出 ERROR 日志
- AccountServiceImpl: Caffeine 缓存实现登录失败计数/锁定
(par.security.login-max-failures=5, login-lock-minutes=30)
- PskService: pskWindowSeconds 从 application.yml 读取
- AdminController: 清理重复 import
|
2026-06-29 17:05:43 +08:00 |
|
mediabot-pt
|
ae8d0ed7d2
|
refactor: PSK 签名改为 METHOD:path:timestamp 格式
- 签名内容不再包含 email,email 仅作审计
- 改用 METHOD:path:timestamp 防重放到不同端点
- X-Email 头改为可选
- medibot 签名: HMAC(PSK, 'POST:/api/v1/sites/x/submit:1234567890')
|
2026-06-29 16:58:56 +08:00 |
|
mediabot-pt
|
311ead0e89
|
refactor: 彻底移除 apiSecret 认证方式,仅保留 Bearer + PSK
删除:
- HmacUtil: deriveApiKey/deriveApiSecret/verifyMediabotPsk
- HmacAuthInterceptor: apiSecret 验签/自动创建账户/readBody
- AccountService: generateApiCredentials/registerByInterceptor
- AccountDTO: apiKey 字段
- AuthController: register 返回 apiSecret
- AdminController: generateApiKey 端点
- Users.vue: API Key 列/生成密钥弹窗
- api/index.js: genApiKey
认证方式简化为两种:
Bearer Token → Web 管理后台
PSK 签名 → 外部集成客户端
|
2026-06-29 16:56:00 +08:00 |
|
mediabot-pt
|
5304449de6
|
feat: PSK 版本化管理 + DB 表 + 管理后台增删启禁
- V4 迁移: psks 表 (version, secret, description, is_active)
- PskService: 启动导入 PAR_MEDIABOT_PSK → v1, verify 遍历所有活跃 PSK
- HmacAuthInterceptor: PSK 签名优先验签,精简为 Bearer/PSK 双路径
- AdminController: GET/POST /psks + toggle 启禁
- AuthController: register/recover 改用 PskService 验证
- docker-compose.yml 新增 PAR_MEDIABOT_PSK 环境变量
mediabot 端只需: X-Signature = HMAC(PSK, 'email:ts')
|
2026-06-29 16:52:20 +08:00 |
|
mediabot-pt
|
11d0840e42
|
feat: Mediabot PSK 签名恢复 + 注册自动提权
- par.mediabot.psk 配置项(环境变量 PAR_MEDIABOT_PSK)
- HmacUtil.verifyMediabotPsk() PSK 签名验证
- POST /auth/recover: PSK 签名 → 返回/重建 apiKey/apiSecret → 自动 TRUSTED
- POST /auth/register: 携带 PSK 头 → 自动提升为 TRUSTED
- AccountService 新增 updateAccount
mediabot 端只需:
const PSK = '内置密钥'
sig = HMAC('email:timestamp', PSK)
POST /auth/recover {email} + X-Medibot-* 头 → 拿回凭据
|
2026-06-29 16:44:59 +08:00 |
|
mediabot-pt
|
26c686fa69
|
feat: 注册时自动生成 API Key,mediabot 自注册即可获得凭据
- AccountService.register() 自动生成 api_key + api_secret
- POST /auth/register 返回 apiKey + apiSecret(一次性)
- POST /auth/login 返回 apiKey(不含 secret)
- V3 迁移自动为已有管理员生成 key
mediabot 集成流程:
1. POST /auth/register → 得到 apiKey + apiSecret → 保存
2. 管理员在后台提升 trustLevel 为 TRUSTED
3. 用 apiKey/apiSecret 做 HMAC 签名调用写入接口
|
2026-06-29 16:34:39 +08:00 |
|
mediabot-pt
|
2d91552ea4
|
feat: API Key 静默认证 + 多邮箱支持
核心改动:
- V3 迁移: accounts 加 api_key/api_secret + account_emails 多邮箱关联表
- HMAC 验签改用 api_secret 替代密码哈希(改密码不影响集成)
- findByAnyEmail 支持主邮箱 + 关联邮箱查找
- AdminController: API Key 生成/重置 + 邮箱绑定/解绑/列表
- 前端 Users.vue: API Key 列 + 生成按钮 + Secret 复制弹窗
- 现有邮箱自动迁移到 account_emails 表
认证流程:
旧: X-Email → account.email → passwordHash 作 HMAC key
新: X-Email → account_emails ∪ account.email → api_secret 作 HMAC key
|
2026-06-29 16:30:53 +08:00 |
|
mediabot-pt
|
c4877f983a
|
feat: 添加站点收录提交接口 POST /api/v1/sites/{siteId}/submit
- 支持创建新站点或更新已有站点
- HMAC 签名鉴权保护
- Swagger 文档同步可见
|
2026-06-29 15:09:40 +08:00 |
|
mediabot-pt
|
20a8983afb
|
chore: Swagger 文档隐藏管理后台接口,仅暴露集成端点
|
2026-06-29 14:54:06 +08:00 |
|
mediabot-pt
|
bf754d058c
|
feat: 集成 SpringDoc OpenAPI + Swagger UI 文档页面
- 添加 springdoc-openapi-starter-webmvc-ui 2.5.0
- OpenApiConfig 配置 API 标题、描述、版本、认证方案
- 文档包含 Bearer Token 和 HMAC 签名两种认证说明
- Swagger UI: /swagger-ui.html
- OpenAPI JSON: /v3/api-docs
|
2026-06-29 14:52:43 +08:00 |
|
mediabot-pt
|
40f1da1e2b
|
feat: 用户等级改为下拉选择 + 禁止修改管理员/提升为管理员
- Users.vue: ElMessageBox.prompt → el-dialog + el-select 下拉
- Users.vue: 管理员行隐藏设置按钮,显示标签文本
- AdminController: 拒绝修改 MANAGER 账户等级,拒绝提升为 ADMIN
- 信任等级显示改为中文标签
|
2026-06-29 14:51:36 +08:00 |
|
mediabot-pt
|
7575d65428
|
fix: 补全管理后台缺失的 API 端点 + 修复 @RequestParam 参数名
- AdminController: 新增 GET /admin/accounts 用户列表
- ConfigController: 新增 GET /configs/pending 待审核列表
- AdminController: 修复 @RequestParam 缺少参数名导致参数绑定失败
- SiteConfigMapper/ConfigService: 新增 selectPending/listPendingConfigs
|
2026-06-29 14:41:36 +08:00 |
|
mediabot-pt
|
c15016d57c
|
feat: Bearer Token 认证,修复 Web 管理后台 401 问题
- HmacAuthInterceptor 增加 Bearer Token 优先认证(Web 管理后台)
- AuthController.login 使用 hmac.secret 签发 24h 有效 token
- AccountDTO 新增 token 字段(@JsonInclude NON_NULL)
- 前端 Login.vue 存储登录返回的 token
- 原有 HMAC 签名认证不受影响(外部 API 客户端继续可用)
|
2026-06-29 14:20:29 +08:00 |
|
mediabot-pt
|
a5279e0a69
|
fix: 静态资源配置添加 classpath:/static/ 回退路径,修复首页 500 错误
|
2026-06-29 13:49:34 +08:00 |
|
mediabot-pt
|
03bcf974b1
|
fix: ENTRYPOINT 兼容 DB_* 和 MYSQL_* 两种变量命名,修复 MySQL 连接失败
|
2026-06-29 13:08:11 +08:00 |
|
mediabot-pt
|
180022e42d
|
perf: 参考 mediabot 优化 Dockerfile 入口脚本和镜像元数据
- 两个 Dockerfile 同步 OCI 标准镜像标签(org.opencontainers.image.*)
- ENTRYPOINT 改为动态构造数据源 URL(MYSQL_* → SPRING_DATASOURCE_*),兼容不同环境
- 注入 APP_VERSION / APP_BUILD_TIME 环境变量,便于运行时查看版本
- 支持 JAVA_OPTS 环境变量
- 创建 /app/data /app/logs 运行时目录
|
2026-06-29 12:57:24 +08:00 |
|
mediabot-pt
|
b24ec27905
|
perf: 优化 CI Docker 镜像构建速度
- 新增 CI 精简 Dockerfile,直接打包 drone 预编译 jar,避免在 Docker 内重复编译(省去 npm ci + mvn 全量编译 ~15min)
- build-docker-image 步骤改用精简 Dockerfile,去掉无效的 docker pull 缓存尝试
- maven-build 步骤优化:动态检测 CPU 核数设置并行度 -T 1C/2C、增加 JVM 内存、添加 --fail-at-end
- .dockerignore 优化:CI Dockerfile 仅需 par-api/target/*.jar,排除所有源码/pom/前端文件
- par-api/Dockerfile 标注为独立多阶段构建版本(本地使用)
参考 mediabot 项目的多阶段构建思路,但将编译前置到 drone host 缓存中,Docker 构建秒级完成
|
2026-06-29 12:53:33 +08:00 |
|
mediabot-pt
|
d5fc73cad7
|
ci: speed up docker build with BuildKit cache mount and layer caching
|
2026-06-29 12:37:48 +08:00 |
|
mediabot-pt
|
76f975915c
|
ci: align Dockerfile base images with mediabot (use Harbor maven-java21 + eclipse-temurin)
|
2026-06-29 12:24:37 +08:00 |
|
mediabot-pt
|
478a1e197a
|
ci: use aliyun mirror for eclipse-temurin base images
|
2026-06-29 12:20:55 +08:00 |
|
mediabot-pt
|
c6f371af0f
|
ci: speed up build by using Harbor images and Aliyun mirrors for Maven/npm
|
2026-06-29 12:05:28 +08:00 |
|