mirror of
https://github.com/ReCloudStudio/WebHooker.git
synced 2026-09-22 16:11:29 +00:00
feat(groups): host-based forge sources with optional display name
- forgeSources entries are now { host, type, name? }: the repository URL's
hostname is matched case-insensitively against host (github.com for GitHub,
distinct hosts for multiple Gitea instances); the footer label is the
optional name, falling back to the host
- GroupEditor renders one row per source: host input + type select + optional
display name (grid layout); hostname validation mirrors the server
- fix: apiFetch sends Content-Type: application/json — h3's readBody only
parses JSON bodies with that header, so every PUT/POST from the refactored
console arrived as a raw string and failed with 'groups must be an array'
- hardening: readJsonBody (admin + actions) JSON-parses string bodies so curl
and older clients without the content-type header still work
- regression test: groups PUT without content-type + forgeSources round-trip
- docs: groups.md/message-format.md (en/zh), AGENTS.md, config.example.yaml
This commit is contained in:
parent
17d10db845
commit
3f6f7f17b5
19 changed files with 469 additions and 108 deletions
|
|
@ -198,11 +198,14 @@ const en: Dict = {
|
|||
"Bind this group to one GitHub App installation (the org/user that installed the app). Only events from that installation enter this group's routes; leave empty to allow any installation (still filtered by Owner scope).",
|
||||
"groupEditor.errInstallationId": "Installation ID must be a positive integer",
|
||||
"groupEditor.emoji": "Show emojis in messages",
|
||||
"groupEditor.forgeLabel": "Show forge source",
|
||||
"groupEditor.forgeLabelNote": "(optional)",
|
||||
"groupEditor.forgeLabelLabel": "Show which forge (GitHub / Gitea / custom) produced each event",
|
||||
"groupEditor.forgeLabelHint":
|
||||
"Adds the forge icon and site name to the message footer so events from different forges can be told apart.",
|
||||
"groupEditor.forgeSources": "Forge hosts",
|
||||
"groupEditor.forgeSourcesNote": "(optional — label events by their host)",
|
||||
"groupEditor.forgeSourcesHost": "git.example.com",
|
||||
"groupEditor.forgeSourcesName": "Optional display name",
|
||||
"groupEditor.forgeSourcesAdd": "+ Add host",
|
||||
"groupEditor.forgeSourcesHint":
|
||||
"Events whose repository host matches an entry are labeled in the message footer with its display name (or the host when none is set) — e.g. git1.example.com and git2.example.com for two Gitea instances. GitHub events match github.com.",
|
||||
"groupEditor.errForgeSourceHost": "Every forge host must be a valid hostname",
|
||||
"groupEditor.logTarget": "Webhook log channel",
|
||||
"groupEditor.logTargetNote": "(optional)",
|
||||
"groupEditor.logDisabled": "— Disabled —",
|
||||
|
|
@ -453,11 +456,14 @@ const zh: Dict = {
|
|||
"将本分组绑定到一个 GitHub App 安装(安装了 App 的组织/用户)。只有来自该安装的事件才会进入本分组的路由;留空表示接受任意安装(仍受来源限定过滤)。",
|
||||
"groupEditor.errInstallationId": "安装 ID 必须为正整数",
|
||||
"groupEditor.emoji": "消息中显示表情符号",
|
||||
"groupEditor.forgeLabel": "显示来源平台",
|
||||
"groupEditor.forgeLabelNote": "(可选)",
|
||||
"groupEditor.forgeLabelLabel": "在消息中标识事件来源(GitHub / Gitea / 自定义)",
|
||||
"groupEditor.forgeLabelHint":
|
||||
"在消息底部显示来源平台的图标与站点名称,便于区分不同 forge 的事件。",
|
||||
"groupEditor.forgeSources": "来源主机",
|
||||
"groupEditor.forgeSourcesNote": "(可选 —— 按主机标识事件)",
|
||||
"groupEditor.forgeSourcesHost": "git.example.com",
|
||||
"groupEditor.forgeSourcesName": "可选显示名称",
|
||||
"groupEditor.forgeSourcesAdd": "+ 添加主机",
|
||||
"groupEditor.forgeSourcesHint":
|
||||
"仓库主机与条目匹配的事件,会在消息底部用该条目的显示名称标注(未填名称则用主机名)——例如两个 Gitea 实例可分别填 git1.example.com 和 git2.example.com。GitHub 事件匹配 github.com。",
|
||||
"groupEditor.errForgeSourceHost": "每个来源主机必须是有效的主机名",
|
||||
"groupEditor.logTarget": "Webhook 日志频道",
|
||||
"groupEditor.logTargetNote": "(可选)",
|
||||
"groupEditor.logDisabled": "— 未启用 —",
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue