From 80c93d6f7542887f696292f25bd9c8e5433271e7 Mon Sep 17 00:00:00 2001 From: jlthzy Date: Tue, 29 Sep 2026 23:50:24 +0800 Subject: [PATCH 1/2] =?UTF-8?q?docs:=20=E7=BB=AD=E8=B4=B9=E8=AE=BE?= =?UTF-8?q?=E7=BD=AE=E9=87=8C=E7=9A=84=E8=B4=A7=E5=B8=81=E4=B8=8E=E4=BB=98?= =?UTF-8?q?=E6=AC=BE=E5=91=A8=E6=9C=9F=E4=B8=8D=E5=86=8D=E9=99=90=E5=AE=9A?= =?UTF-8?q?=E5=87=A0=E9=A1=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 续费一节原来只说「填价格、货币、付款周期和到期时间」,而 hub 现在两者都放开了 (上游 #71):货币是任意三字母代码、周期是「数字 + 月/年/一次性」1 个月到 100 年。 补三条:货币的填法与输入框下面那行中文名的来源(不在 ISO 4217 里的代码照原样 显示);周期的填法;以及为什么常见长度仍存成原来的名字——**为旧版 hub 写的 主题只认那六个名字**,18 个月这类才存成 `18m`。另外点明自动续期按实际月数顺延, 所以五年、18 个月的周期也会顺延(原来只说了「一次性」不顺延)。 --- src/content/config/nodes.mdx | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/content/config/nodes.mdx b/src/content/config/nodes.mdx index ea00c49..6e0caf1 100644 --- a/src/content/config/nodes.mdx +++ b/src/content/config/nodes.mdx @@ -21,8 +21,14 @@ 续费设置里填价格、货币、付款周期和到期时间。价格留空或填 0 显示为免费。 +- **货币**填三个字母的代码,大小写都行(存成大写)。输入框下面显示识别出的中文名,如 `TWD` → 新台币; + 不在 ISO 4217 里的代码照原样显示,如 `XYZ` +- **付款周期**是「数字 + 月 / 年 / 一次性」,从 1 个月到 100 年:五年套餐填 `5` 年,18 个月填 `18` 个月 +- 常见长度在 hub 里存成**原来的名字**(`monthly`、`quarterly`、`semiannual`、`yearly`、`biennial`、 + `triennial`),其余存成 `m`(18 个月存成 `18m`)。这样为旧版 hub 写的主题仍能显示周期 + 在线节点过了到期日会自动续期:hub 把到期日按付款周期往后顺延,直到晚于今天,并推送一条「已自动续期」 -通知。 +通知。顺延按**实际月数**算,所以 18 个月、5 年这类周期同样会顺延。 - 是否过了到期日按 hub 所在机器的时区算,hub 每小时巡检一次到期日。Docker 部署没设 `TZ` 时按 UTC 算, 东八区要到早上 8 点才跨日 From e4160292fe631225a0dbd17471ac507396ce9521 Mon Sep 17 00:00:00 2001 From: jlthzy Date: Wed, 30 Sep 2026 00:12:04 +0800 Subject: [PATCH 2/2] =?UTF-8?q?docs:=20=E4=B8=BB=E9=A2=98=E7=9A=84?= =?UTF-8?q?=E7=AC=AC=E4=B8=89=E7=A7=8D=E8=A3=85=E6=B3=95=EF=BC=88=E5=A1=AB?= =?UTF-8?q?=20GitHub=20=E4=BB=93=E5=BA=93=E5=9C=B0=E5=9D=80=EF=BC=89?= =?UTF-8?q?=EF=BC=8C=E4=BB=A5=E5=8F=8A=E5=8F=91=E5=B8=83=E6=97=B6=E5=BF=85?= =?UTF-8?q?=E9=A1=BB=E5=B8=A6=20sha256?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `dev/theme` 的「安装与切换」原来写着「安装有两种方式」,而 hub 现在多了一种:在 主题页填仓库地址直接装(上游 #75)。补成三种,并写清「不要选 Source code」—— 选错文件时 hub 的新提示也是这么说的。 另外补上我们这个 fork 特有的一条:**发布 release 时必须同时放 `theme.tar.gz.sha256`**,hub 从 GitHub 安装/更新时先读它再核对下载到的字节, 没有这个文件就装不上(只证明完整性,不证明作者身份;手动上传那条路不做校验和 核对)。原文只说「发布时打成 theme.tar.gz」,照它发布第三方主题会在安装时撞上 那条报错。`url` 字段的说明也跟着点明了这两个文件。 --- src/content/dev/theme.mdx | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/src/content/dev/theme.mdx b/src/content/dev/theme.mdx index d63d659..bf28e97 100644 --- a/src/content/dev/theme.mdx +++ b/src/content/dev/theme.mdx @@ -15,7 +15,12 @@ └── index.html ``` -发布时打成 `theme.tar.gz`,解开就是这个目录。 +发布时打成 `theme.tar.gz`,解开就是这个目录;同一个 release 里**再放一个 `theme.tar.gz.sha256`**, +内容是一行 sha256(`sha256sum theme.tar.gz > theme.tar.gz.sha256` 就是这个格式,多出来的文件名会被忽略)。 + +hub 从 GitHub 安装或更新时先读这个校验和、再核对下载到的字节:它证明的是完整性(校验和与包来自同一个 +release),不是作者身份。**没有这个文件就装不上**——hub 会提示让作者补上,或者手动上传那个包(上传这条 +路不做校验和核对)。直接放进 `--themes` 目录也不受此约束。 ### theme.json @@ -28,7 +33,7 @@ | `description` | 是 | 简介 | | `version` | 是 | 主题版本。用一键更新时要和 release 的 tag 对上(`v1.2.0` 对 `1.2.0`),否则每次都会重装一遍 | | `author` | 是 | 作者 | -| `url` | 是 | 源码地址。指向 GitHub 仓库时,面板的一键更新从它的 release 取 `theme.tar.gz` | +| `url` | 是 | 源码地址。指向 GitHub 仓库时,面板的一键更新与「从 GitHub 安装」都从它的 release 取 `theme.tar.gz`,并核对配套的 `theme.tar.gz.sha256` | 少写一个字段时,在面板上传会被拒绝,并指出缺的是哪个;直接放进 hub 的 `--themes` 目录的,主题不会 出现在列表里,hub 日志里有一条警告。 @@ -251,17 +256,24 @@ agent 只有 Linux 版。在 macOS 上开发时节点会一直显示离线,要 在**主题**页选一个即可切换,不用重启;选中的主题缺失或损坏时自动回落到内置默认主题。 -安装有两种方式:在面板上传 `theme.tar.gz`,或把主题目录直接放进 hub 的 `--themes` 目录(一键脚本部署是 -`/opt/monitor/data/themes/`)。卡片上的「从 GitHub 更新」从 `theme.json` 里 `url` 指向的 GitHub 仓库取 -最新 release,tag 与已装版本相同时不下载。 +安装有三种方式: + +- **填仓库地址**:在**主题**页的「安装主题」里粘贴主题的 GitHub 仓库地址(仓库首页、Releases 页、某个版本 + 的页面都可以),hub 读它最新 release 里的 `theme.tar.gz` 装上。地址只取 `/` 两段, + 下载地址由 hub 自己拼,所以它仍然只连 `api.github.com` 与 `github.com` +- **上传主题包**:下载 release 里的 `theme.tar.gz` 再上传——**不要选 Source code**,那不是主题包 +- **放进目录**:把主题目录直接放进 hub 的 `--themes` 目录(一键脚本部署是 `/opt/monitor/data/themes/`) + +三种都是同名主题整体替换。卡片上的「从 GitHub 更新」从 `theme.json` 里 `url` 指向的 GitHub 仓库取最新 +release,tag 与已装版本相同时不下载;前两种方式装的主题,卡片上还会显示它的作者与源码地址。 内置默认主题同样可以就地更新,不用升级 hub:更新会把新版装进 `themes/default/`,此后使用磁盘上的这份, 卡片上的「内置」标记随之消失;删掉它就回到二进制里的那份。二进制里的默认主题删不掉也改不了,磁盘上的主题 出问题时总能回落到它。 - 上传的主题是在访客浏览器里运行的第三方代码,和 hub 同源。安装时的检查只防止写到目录外和占满磁盘, - 不检查里面的 JS。只装信得过的来源。 + 装进来的主题是在访客浏览器里运行的第三方代码,和 hub 同源。安装时的检查只防止写到目录外、超过大小上限 + 和占满磁盘,不检查里面的 JS。只装信得过的来源——填一个仓库地址就等于把那个仓库当成了上传的文件。 ## 参考实现