跳转到主要内容
返回作品列表
开源项目维护中

plugin-software

Software Manager Plugin Logo

Software Manager for Halo

独立、主题中立的软件内容与版本管理插件核心能力 · 安装 · 文档 · 开发

项目定位

Software Manager 为 Halo 提供完整的软件领域模型、Console 管理界面、公共查询能力和下载门禁。它可以被任意 Halo 主题消费,也可以通过 REST API 服务其他客户端。

Important

插件不是某个主题的附属后端。主题决定页面如何展示,插件决定软件数据如何建模、查询、授权和发布。

frontend-macwk-halo-theme 是一个完整接入示例,但不是插件运行的前置条件。

核心能力

能力

说明

软件内容管理

软件基础信息、平台、架构、图标、截图、详情、SEO 与关联内容

版本管理

版本号、发布日期、系统要求、架构、语言、更新日志和校验值

下载源管理

下载类型、来源、优先级、登录/Turnstile 门禁和敏感字段隔离

内容组织

多级分类、标签、专题、推荐、精选和发布状态

Console UI

软件列表与编辑器,以及分类、标签、专题和下载源管理页面

公共查询

softwareFinder、主题 Router 和版本化 REST API

评论集成

SoftwareApp 注册为 Halo 评论资源,并提供 Console 资源引用

权限与安全

查看/管理/敏感配置分权、HTML 净化、目标白名单和短期下载授权

可选 AI

通过 AI Foundation 为摘要、详情和 SEO 提供编辑建议

领域模型

Extension

职责

SoftwareApp

软件主记录、展示信息、发布状态、SEO 和聚合统计

SoftwareVersion

版本、兼容信息、更新日志、校验值和下载统计

DownloadAsset

下载源、供应方、门禁标记、敏感字段和健康状态

SoftwareCategory

可见性、优先级和父子分类关系

SoftwareTag

软件标签、可见性和排序

SoftwareTopic

专题内容、软件集合、精选和发布状态

资源 API Group 为 software.jiewen.run/v1alpha1。Public VO、Console VO 和原始 Extension 分开维护,避免把管理字段或 Secret 暴露给访客。

安装与使用

环境要求

组件

要求

Halo

>= 2.25.0

Java

源码构建需要 Java 21

Node.js / pnpm

Console UI 构建建议 Node.js 24、pnpm 10

AI Foundation

可选,不影响软件管理核心能力

安装插件

  1. GitHub Releases 下载插件 JAR。

  2. 在 Halo Console 的“插件”页面上传并启用。

  3. 使用管理员账号进入“软件”菜单,配置分类、标签、专题和下载源。

  4. 非管理员账号按需授予“软件查看”或“软件管理”角色模板;只有确需查看 URL、提取码等字段的账号再授予“软件敏感下载配置”。

  5. 如需 AI 编辑建议,再安装并启用兼容版本的 AI Foundation。

推荐先配置选项、分类、标签和专题,再创建软件、版本与下载源,最后检查公开详情并发布。

下载安全配置

下载源的 URL、storageKey、提取码和密码 Secret 引用只通过独立的 Console Secret API 读写,普通“软件查看/管理”角色无法读取。需要验证码时:

  1. 在 Halo 中创建 Secret,并把 Turnstile Secret Key 放在 data.secret(数据键可配置);

  2. 在插件“下载安全”设置填写 Turnstile Site Key、Halo Secret 名称和数据键;

  3. 主题通过公开的 download-options 获取 Site Key,再将 Turnstile token 提交给 download-grants

验证码服务异常、Secret 缺失或目标 URL 不安全时下载授权会 fail-closed。插件只允许 HTTP(S) 或安全的站内绝对路径,并为敏感响应设置 no-store

插件与主题的边界

插件负责

主题负责

软件领域模型与状态

卡片、列表和详情布局

搜索、过滤、排序和分页

网格/列表切换与浏览器偏好

Finder、Router 和 REST API

调用公共契约并渲染数据

下载登录/验证门禁

下载面板和用户反馈

RBAC、Public VO 和字段隔离

颜色、动画和响应式设计

插件不会提供 grid/list 参数、主题 CSS class 或某个主题专用的卡片模型。

getHome() / SoftwareHomeVo 是保留的主题中立聚合接口。它聚合最新、热门、推荐、评论、专题和分类数据,但不包含任何布局状态。

开发者文档

文档

内容

主题 API 文档

插件守卫、主题路由、模板变量、Finder、Public VO、评论与降级行为

REST API 文档

公共/Console/Extension API、参数、RBAC、错误状态和下载门禁

开发环境搭建

Halo DevTools、Console UI、测试、构建和公共契约变更流程

README 只提供项目入口;上述文档是相应公共契约的详细来源。修改 Endpoint、Router、Finder 或 Public VO 时,应同时更新测试和对应文档。

主题接入概览

插件注册软件公共路由并提供模板模型,当前主题负责实现模板:

路由

主题模板

/soft/all/p{page}、分类页、标签页

software-list.html

/soft/{slug}

software-detail.html

/special/{slug}

software-special.html

主题应先检查插件状态:

<th:block th:if="${pluginFinder.available('software')}">
    <a href="/soft/all/p1">软件</a></th:block>

插件未安装或未启用时,插件路由不存在;主题应隐藏软件入口,并为主题自己拥有的页面提供降级内容。完整变量、Finder 方法和 VO 字段见 主题 API 文档。

REST API 概览

匿名公共 API 前缀:

/apis/api.software.jiewen.run/v1alpha1

公共 API 提供软件、分类、标签、专题和下载门禁查询。普通软件详情不会暴露最终下载 URL、storageKey、提取码或密码 Secret;新客户端通过 POST /download-grants 获取短期授权,通过 GET /download-options 获取安全公开的 Turnstile 启动配置。

Console API、分页筛选、错误状态、AI Endpoint 和 RBAC 说明见 REST API 文档。

评论与权限

软件评论资源三元组:

group: software.jiewen.run
kind: SoftwareApp
name: <SoftwareApp.metadata.name>

插件注册“软件查看”“软件管理”“软件敏感下载配置”和匿名公共 API 四类角色。主题不得通过 Console API 或原始 Extension 绕过公共 VO 和下载门禁。

可选 AI 集成

AI 只用于 Console 编辑辅助,不是软件管理的核心依赖:

pluginDependencies:
    ai-foundation?: ">=1.0.0-SNAPSHOT & <2.0.0"

未安装或禁用 AI Foundation 时,软件管理、公共 API、Finder 和主题路由仍正常工作;Console 隐藏 AI 操作。

项目结构

plugin-software/
├── dev/                              # 开发、主题 API 与 REST API 文档
├── src/main/java/run/jiewen/software/
│   ├── extension/                    # 六类领域 Extension
│   ├── api/                          # 写入 Command 与下载授权请求
│   ├── download/                     # Turnstile 与下载目标安全策略
│   ├── reconciler/                   # 聚合状态、计数和兼容迁移
│   ├── finders/                      # Console 与公共查询服务
│   ├── vo/                           # Public、Finder 与 Console VO
│   ├── comment/                      # SoftwareApp 评论资源
│   ├── ai/                           # 可选 AI 编辑辅助
│   ├── SoftwareThemeRouter.java      # 主题公共路由
│   └── *Endpoint.java                # Console 与公共 REST API
├── src/main/resources/               # 插件清单、设置、RBAC 与 Logo
├── src/test/                         # Java 单元与契约测试
├── api-docs/                         # 生成的 OpenAPI JSON
├── ui/                               # Vue Console UI、生成 API Client 与测试
├── build.gradle
└── settings.gradle

开发与构建

完整检查与打包:

./gradlew build

更新 OpenAPI 与 TypeScript Client:

./gradlew generateApiClient --no-daemon

Halo DevTools:

./gradlew haloServer
./gradlew reloadPlugin

开发实例默认运行在 http://localhost:8099,插件 JAR 输出到 build/libs/。环境准备、UI 命令和验证清单见 开发环境搭建。

兼容与发布策略

  • v1alpha1 已发布字段不做无迁移重命名或删除;允许向后兼容地新增可选字段。

  • Public VO、Console VO 和 Finder 聚合 VO 分开维护。

  • Router 模板变量、Finder 方法、RBAC 和敏感字段隔离均由契约测试保护。

  • GitHub CI/CD 使用 Halo 官方插件工作流;Halo 应用市场发布当前未启用。

许可证

GPL-3.0 © jiewenhuang

项目时间

开始
2026-07-02

技术栈

  • TypeScript
  • Java
  • Vue
  • Shell