feat: 声明求职密码库 PostgreSQL 存储
Pipelines as Code CI / hwlab-web-probe-sentinel-nc01- Success
Pipelines as Code CI / platform-infra-gitea-nc01- Success
Pipelines as Code CI / unidesk-host- Success

This commit is contained in:
pikastech
2026-07-19 10:53:17 +02:00
parent 052f157fc5
commit d87c10e964
2 changed files with 67 additions and 8 deletions
+58
View File
@@ -361,6 +361,36 @@ postgres:
user: hwlab_jd01_v03_app
address: 74.48.78.17/32
method: scram-sha-256
- type: hostssl
database: findjob
user: findjob
address: 10.0.8.0/22
method: scram-sha-256
- type: hostssl
database: postgres
user: findjob
address: 10.0.8.0/22
method: scram-sha-256
- type: hostssl
database: findjob
user: findjob
address: 74.48.78.17/32
method: scram-sha-256
- type: hostssl
database: postgres
user: findjob
address: 74.48.78.17/32
method: scram-sha-256
- type: hostssl
database: findjob
user: findjob
address: 152.53.229.148/32
method: scram-sha-256
- type: hostssl
database: postgres
user: findjob
address: 152.53.229.148/32
method: scram-sha-256
secrets:
source: master-local
@@ -464,6 +494,20 @@ secrets:
HWLAB_JD01_V03_DB_NAME: hwlab_jd01_v03
randomHex:
HWLAB_JD01_V03_DB_PASSWORD: 32
- name: findjob-db-credentials
sourceRef: platform-db/findjob-db.env
type: env
requiredKeys:
- FINDJOB_DB_USER
- FINDJOB_DB_PASSWORD
- FINDJOB_DB_NAME
createIfMissing:
enabled: true
values:
FINDJOB_DB_USER: findjob
FINDJOB_DB_NAME: findjob
randomHex:
FINDJOB_DB_PASSWORD: 32
objects:
roles:
- name: sub2api
@@ -529,6 +573,15 @@ objects:
createdb: false
createrole: false
superuser: false
- name: findjob
passwordRef:
sourceRef: platform-db/findjob-db.env
key: FINDJOB_DB_PASSWORD
login: true
attributes:
createdb: false
createrole: false
superuser: false
databases:
- name: sub2api
owner: sub2api
@@ -565,6 +618,11 @@ objects:
encoding: UTF8
locale: C.UTF-8
extensions: []
- name: findjob
owner: findjob
encoding: UTF8
locale: C.UTF-8
extensions: []
exports:
connectionStrings:
@@ -22,7 +22,7 @@
- 账号、简历、岗位和申请状态投影。
- 图形验证码、短信验证码、真人校验、资料补充和提交确认等人工事项。
- 统一管理员密码认证、HTTPS 公开入口和受控会话。
- 招聘账号密码的本地加密保存、按单位生成、查看和复制。
- 招聘账号密码在 host PostgreSQL 中按单位明文保存、生成、查看和复制。
- Vite 前端与 Bun API 的 native 热重载开发形态。
- 声明式业务状态、本地私密运行状态和外部表单工作流的边界。
@@ -42,7 +42,7 @@
| 人工事项 | 自动流程需要本人查看、填写或确认后才能继续的任务。 |
| 业务状态 | 可提交到私有仓库的单位、材料和申请公开状态。 |
| 私密运行状态 | 工作流 ID、验证码 artifact、本人答案和其他不得提交的临时状态。 |
| 招聘密码库 | 以统一管理员密码派生密钥加密、按单位保存招聘账号和密码的本地私密状态。 |
| 招聘密码库 | 在 host PostgreSQL 独立数据库中按单位保存招聘账号和明文密码的私密状态。 |
## 4. 系统边界
@@ -61,7 +61,7 @@ flowchart LR
Career[单位与申请 YAML] --> API[Bun API]
Tasks[本地人工事项] --> API
Secret[统一密码 sourceRef] --> API
Vault[本地加密招聘密码库] <--> API
Vault[host PostgreSQL 明文招聘密码库] <--> API
Workflow[外部表单工作流] <--> API
API --> Vite[Vite Web 工作台]
Vite --> Edge[HTTPS 公共边缘]
@@ -72,7 +72,7 @@ flowchart LR
- 端口、启动命令、状态路径和认证来源由求职仓库 `config.json` 拥有。
- 公共域名、TLS upstream 和 health path 由 UniDesk public exposure YAML 拥有。
- 私密运行状态只保存在求职仓库 `.state/`
- 招聘密码库密钥只从统一管理员密码派生,不维护第二个主密码。
- 招聘密码库使用受控 Secret sourceRef 连接 host PostgreSQL,不维护第二个主密码。
- 招聘密码明文只在已认证会话的单条显式查看请求中返回。
## 6. 原子需求
@@ -114,13 +114,14 @@ native 开发应同时保持前端 HMR 和 API 文件监听热重载。服务端
工作台应为每个单位管理独立招聘账号和密码,并满足以下要求:
- 使用密码学安全随机源生成符合指定长度的密码。
- 密码库文件只保存在 `.state/`,文件权限为 `0600`
- 密码库使用统一管理员密码派生的密钥进行认证加密。
- 密码库使用 host PostgreSQL 独立数据库和最小权限角色
- `password_plaintext` 字段直接保存招聘密码明文,不进行应用层或字段级加密。
- 数据库连接参数只从受控 Secret sourceRef 读取,不写入仓库。
- 单位列表和密码库摘要只返回账号、密码是否存在和更新时间,不返回密码明文。
- 查看或复制密码必须由已认证用户对单个单位显式触发。
- 前端不得把全部密码预加载到页面状态。
- API、CLI、日志、TaskTree、Git 和错误响应不得打印密码明文。
- 更新密码时应覆盖该单位的加密条目,不保留可由普通接口读取的历史明文
- 更新密码时应覆盖该单位的当前明文记录,不保留可由普通接口读取的历史密码
## 7. 验收契约
@@ -132,4 +133,4 @@ native 开发应同时保持前端 HMR 和 API 文件监听热重载。服务端
- 桌面和移动视口均无文本重叠、横向页面溢出或操作按钮不可达。
- 正确登录后能为单个单位生成、查看和复制招聘密码。
- 未登录请求、单位列表请求和密码库摘要请求均不能取得密码明文。
- 密码库文件和 Git diff 中不出现招聘密码明文。
- Git diff、CLI、日志和 TaskTree 中不出现招聘密码明文。