GitHub App 一键安装:manifest 建 App、安装记录、双 secret 验签、/fix-review 内容去重
This commit is contained in:
1 parent
ecf4b5c715
commit
32059178bd
5 files changed
+1210
-14
No files matched your search
@@ -159,6 +159,45 @@ client_secret(只走环境变量),不是无认证后门。
|
||||
没有返回 404)后恢复原来的 oauth 账号登录。查看自己的绑定:
|
||||
`GET /oauth/{provider}/bindings`(须持本站 key,只看得到自己的)。
|
||||
|
||||
### GitHub App 一键安装(已实现安装一半;App-token API 动作未做)
|
||||
|
||||
目标:把手动建 webhook(填 URL、secret、选事件)变成“点一下
|
||||
安装”。流程用 GitHub manifest 流程(GitHub 文档标准流程):
|
||||
|
||||
1. 操作方持本站 key 调 `POST /github-app/setup/state`(body 可含
|
||||
org),返回 `{state, setup_url}`;要求环境变量
|
||||
`GITHUB_APP_PUBLIC_BASE`(公网域名,如 `https://api.diante.me`,
|
||||
manifest 里的 hook / 回调地址都由它拼出)。
|
||||
2. 用户打开 setup_url:表单页含 manifest JSON(App 名默认
|
||||
`codex-app-server`,可由 `GITHUB_APP_NAME` / `GITHUB_APP_URL`
|
||||
改;权限 contents:write、pull_requests:write、issues:read,
|
||||
事件 issue_comment、pull_request;默认私有 App,只有所有者
|
||||
能安装,`GITHUB_APP_PUBLIC=1` 可翻成公开)与 state,点提交
|
||||
到 GitHub 建 App 页(个人账号 `/settings/apps/new`,组织账号
|
||||
`/organizations/{org}/settings/apps/new`),用户确认 Create。
|
||||
3. GitHub 跳回 `GET /github-app/callback?code=...&state=...`:
|
||||
server 验 setup state(一次性、1 小时过期,manifest code 同样
|
||||
1 小时内有效)→ POST
|
||||
`api.github.com/app-manifests/{code}/conversions` 换回 id、slug、
|
||||
webhook_secret、pem → 存库里 `github_app_config` 表(单行)。
|
||||
成功页只显示 App 身份与安装链接
|
||||
`https://github.com/apps/<slug>/installations/new`,绝不显示
|
||||
webhook_secret 与 pem。
|
||||
4. 用户点安装:installation 事件到 `/webhooks/github`,记
|
||||
`github_app_installations` 表(created/added 增行、removed 减
|
||||
行、deleted 清安装),`GET /github-app/status`(须持本站 key)
|
||||
可查配置与安装列表,同样不含 secret/pem。
|
||||
|
||||
验签与去重:webhook 验签同时接受 App secret(库里)与 env 里
|
||||
`GITHUB_WEBHOOK_SECRET`(手动 webhook,过渡期共存);App 装好
|
||||
后应删掉手动 webhook,避免同一事件送两遍;即使共存,
|
||||
/fix-review 也有内容去重(repo + PR + 评论 id,
|
||||
`github_fix_review_dedup` 表),只建一次任务。
|
||||
|
||||
诚实边界:pem 虽然存下来了,但本阶段不用它签 JWT、不用它换
|
||||
installation token;推分支、建 PR 仍走 gh + PAT(见“云端派发与
|
||||
自动 PR”),App-token API 动作是下一阶段。
|
||||
|
||||
### 推送凭证清单
|
||||
|
||||
- webhook / slack:需要可注入 sender(worker 侧),HTTP 层没有
|
||||
|
||||
Reference in new issue
Block a user