FIT2CLOUD
软件分发管理 的图标

软件分发管理

433
118

适配 Halo 2.x 的软件分发管理插件,提供后台软件管理、版本包分片上传、Halo Attachment 附件存储复用、临时下载链接、防盗链、下载日志、统计面板、运营审计、反馈和订阅能力。

软件分发管理插件

适配 Halo 2.x 的软件分发管理插件,提供后台软件管理、版本包分片上传、Halo Attachment 附件存储复用、临时下载链接、防盗链、下载日志、统计面板、运营审计、反馈和订阅能力。

已实现功能

  • 软件管理:新增、编辑、删除、批量删除、置顶、上下架、排序权重、关键词/分类/系统筛选
  • 版本管理:多版本包、推荐版本、系统类型、架构、发布通道、最低系统要求、版本说明、MD5、SHA256、镜像下载源、下载次数
  • 上传能力:分片上传、断点续传、后缀白名单、自动计算 MD5/SHA256、重复文件提示、失败后可重新触发上传
  • 下载能力:游客下载或仅登录下载、限时 token、防盗链、同 IP 同版本短时间限流、Halo Attachment 共享链接跳转
  • 下载日志:记录 IP、用户、时间、软件、版本,后台可检索并导出 CSV
  • 数据统计:总下载、今日下载、热门版本排行、最近 7 天趋势
  • 运营管理:后台操作审计、用户反馈、更新订阅列表
  • 前台页面:/software 软件列表,/software/detail/{id} 软件详情、订阅、反馈和下载
  • 封面辅助:后台使用 Halo 风格封面选择器,支持本地上传、附件库选择、图片链接填写和预览

目录

src/main/java/space/itcainiao/pluginsoftwarecategory
├─ controller   后台接口、公开接口、前台页面
├─ dto          请求和响应 DTO
├─ model        Halo Custom Extension 模型
├─ service      上传、下载、软件、分类、统计、设置、运营服务

ui/src
├─ components/VersionUploadModal.vue
├─ views/SoftwareListView.vue
├─ views/CategoryView.vue
├─ views/StatsView.vue
├─ views/DownloadLogsView.vue
├─ views/OperationsView.vue
├─ views/SettingsView.vue
├─ api.ts
└─ index.ts

## 数据存储

插件业务数据按 Halo 规范存储为 Custom Extension,不再使用插件私有 H2/JPA 数据表:

- `Software`:软件基础信息、SEO 信息、官网、标签、排序、状态
- `SoftwareVersion`:软件版本包,按 `spec.softwareId` 关联软件,承载附件引用、系统/架构、校验值、镜像源、下载量和发布状态
- `SoftwareCategory`:分类
- `SoftwareDownloadLog`:下载日志
- `SoftwareUploadSession`:分片上传会话
- `SoftwareAuditLog`:后台操作审计
- `SoftwareFeedback`:用户反馈
- `SoftwareSubscription`:更新订阅

文件本体仍存储在 Halo Attachment 中,插件只保存附件 `metadata.name` 引用。

版本包已支持独立 Custom Extension 存储。新建或更新软件时,版本包会写入 `SoftwareVersion` 资源,避免大量版本继续膨胀 `Software.spec.versions`;旧版本内嵌数据仍保留读取兼容,后续可通过迁移任务逐步搬迁并清理。

插件启动时会自动执行一次安全迁移:扫描旧的 `Software.spec.versions`,为缺失的版本包创建独立 `SoftwareVersion` 资源;迁移完成后会将对应 `Software` 标记为 `versionStorage=EXTERNAL`、`versionsMigrated=true`,并清空旧的内嵌版本列表,降低后续读取和更新成本。

## 入口

后台:

```text
http://localhost:8090/console/software-distribution

前台:

http://localhost:8090/software
http://localhost:8090/software/detail/{软件ID}

软件上传下载界面

公开 API:

image

image

image

image

image

/apis/plugin-softwarecategory.itcainiao.space/v1alpha1/public/page-config
/apis/plugin-softwarecategory.itcainiao.space/v1alpha1/public/software
/apis/plugin-softwarecategory.itcainiao.space/v1alpha1/public/software/{id}
/apis/plugin-softwarecategory.itcainiao.space/v1alpha1/public/software-view
/apis/plugin-softwarecategory.itcainiao.space/v1alpha1/public/software-view/{id}
/apis/plugin-softwarecategory.itcainiao.space/v1alpha1/public/software-view/latest
/apis/plugin-softwarecategory.itcainiao.space/v1alpha1/public/versions/{versionId}/token
/apis/plugin-softwarecategory.itcainiao.space/v1alpha1/public/versions/{versionId}/ticket
/apis/plugin-softwarecategory.itcainiao.space/v1alpha1/public/download?ticket=...
POST /apis/plugin-softwarecategory.itcainiao.space/v1alpha1/public/feedback
POST /apis/plugin-softwarecategory.itcainiao.space/v1alpha1/public/subscriptions

其中 /software/software/{id} 保留为前台页面兼容接口;主题模板或后续 Finder API 集成建议优先使用 /software-view 系列接口。software-view 会返回已整理的标签数组、推荐版本、版本包数量、下载源标识和详情页地址,不暴露 Halo Attachment ID 或镜像真实 URL。主题侧下载时应使用版本包 iddownloadSources[].source 调用 /versions/{versionId}/ticket 生成短 ticket,再跳转 /download?ticket=...

隐私说明

本插件会在提供软件下载、访问控制、统计、审计、反馈和订阅能力时处理必要的个人信息。站点管理员在启用、上架或公开提供本插件能力前,应在站点隐私政策或上架说明中告知访客数据处理规则,并按适用法律法规取得必要授权或同意。

插件可能收集和存储的信息包括:

  • 下载日志:访问 IP、登录用户名或访客标识、下载时间、软件名称、版本、系统类型、下载结果等。
  • 运营审计:后台操作人、操作类型、操作对象、操作时间和操作说明。
  • 反馈信息:反馈类型、联系方式、反馈内容、提交时间、提交 IP。
  • 更新订阅:订阅邮箱、关联软件、订阅时间、提交 IP。
  • 软件与版本数据:管理员录入的软件名称、描述、版本信息、附件引用和下载统计。

这些信息仅用于以下目的:

  • 生成限时下载 token、执行下载权限校验、防盗链、IP 限流和异常排查。
  • 统计软件下载量、热门版本和趋势数据。
  • 支持后台审计、问题反馈处理和更新订阅通知。
  • 帮助站点管理员维护软件分发内容和排查安全问题。

数据存储和传输边界:

  • 插件业务数据按 Halo 规范存储为 Custom Extension,位于当前 Halo 服务端环境内。
  • 文件本体存储在 Halo Attachment 中,插件仅保存附件引用。
  • 下载 token 签名密钥在首次启动时由服务端随机生成,并保存在 Halo 插件数据目录内;不会由插件名称、ConfigMap 名称等公开元数据派生。
  • 前台下载页面默认使用服务端短 ticket 跳转下载,避免把完整签名 token 暴露在浏览器地址栏、历史记录或访问日志中;旧版 token 下载参数仅作为兼容接口保留。
  • 插件自身不会主动把上述个人信息发送到第三方服务;如果站点配置了外部对象存储、反向代理、访问日志、邮件服务或其他扩展组件,相关处理边界由站点管理员负责说明。

保留和删除:

  • 下载日志和运营审计日志会按插件设置中的 downloadLogRetentionDaysauditLogRetentionDays 清理。
  • 管理端支持手动清理下载日志、审计日志、已处理反馈和已停用订阅;这些操作会删除对应个人信息,界面会显示二次确认,后端按下载日志导出权限或运营管理权限限制访问。
  • 管理员可在插件设置中关闭反馈、订阅、游客下载记录,或开启日志 IP 脱敏。
  • 删除软件时会删除插件业务记录,但不会主动删除 Halo Attachment 中的共享附件,避免误删其他内容引用的文件。
  • 反馈、订阅、下载日志和审计数据如需导出、删除或响应用户请求,应由站点管理员结合 Halo 数据管理能力和站点隐私政策处理。

敏感字段提交要求:

  • 反馈中的联系方式、反馈内容,以及订阅邮箱必须通过 POST JSON 请求体提交。
  • 插件不支持通过 GET query 提交上述字段,避免个人信息进入浏览器历史、代理日志或访问日志 URL。

讨论(3)

这是一个开源应用,我们推荐优先在开源仓库中提交 issue,以便开发者更好地接收和跟进问题。

去提交 issue