Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 7 additions & 1 deletion src/content/config/nodes.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,14 @@

续费设置里填价格、货币、付款周期和到期时间。价格留空或填 0 显示为免费。

- **货币**填三个字母的代码,大小写都行(存成大写)。输入框下面显示识别出的中文名,如 `TWD` → 新台币;
不在 ISO 4217 里的代码照原样显示,如 `XYZ`
- **付款周期**是「数字 + 月 / 年 / 一次性」,从 1 个月到 100 年:五年套餐填 `5` 年,18 个月填 `18` 个月
- 常见长度在 hub 里存成**原来的名字**(`monthly`、`quarterly`、`semiannual`、`yearly`、`biennial`、
`triennial`),其余存成 `<n>m`(18 个月存成 `18m`)。这样为旧版 hub 写的主题仍能显示周期

在线节点过了到期日会自动续期:hub 把到期日按付款周期往后顺延,直到晚于今天,并推送一条「已自动续期」
通知。
通知。顺延按**实际月数**算,所以 18 个月、5 年这类周期同样会顺延。

- 是否过了到期日按 hub 所在机器的时区算,hub 每小时巡检一次到期日。Docker 部署没设 `TZ` 时按 UTC 算,
东八区要到早上 8 点才跨日
Expand Down
26 changes: 19 additions & 7 deletions src/content/dev/theme.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand All @@ -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 日志里有一条警告。
Expand Down Expand Up @@ -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` 装上。地址只取 `<owner>/<repo>` 两段,
下载地址由 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/`,此后使用磁盘上的这份,
卡片上的「内置」标记随之消失;删掉它就回到二进制里的那份。二进制里的默认主题删不掉也改不了,磁盘上的主题
出问题时总能回落到它。

<Note warn>
上传的主题是在访客浏览器里运行的第三方代码,和 hub 同源。安装时的检查只防止写到目录外和占满磁盘,
不检查里面的 JS。只装信得过的来源。
装进来的主题是在访客浏览器里运行的第三方代码,和 hub 同源。安装时的检查只防止写到目录外、超过大小上限
和占满磁盘,不检查里面的 JS。只装信得过的来源——填一个仓库地址就等于把那个仓库当成了上传的文件。
</Note>

## 参考实现
Expand Down
Loading