feat: let administrators view and copy encrypted integration credentials
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
#!/usr/bin/env python3
|
||||
"""部署持久化的本地联调环境;私密配置只保存在 .local/compose-test。"""
|
||||
import datetime
|
||||
import base64
|
||||
import json
|
||||
import os
|
||||
from pathlib import Path
|
||||
@@ -86,12 +87,22 @@ def setup():
|
||||
'ORBIT_BUILD_TIME': datetime.datetime.now(datetime.timezone.utc).strftime('%Y-%m-%dT%H:%M:%SZ')})
|
||||
private_write(PRIVATE / 'admin.password', secrets.token_urlsafe(24) + '\n')
|
||||
values = settings()
|
||||
key_file = PRIVATE / 'credential-keys.json'
|
||||
if not key_file.exists():
|
||||
# 已启用后丢失主密钥,必须恢复备份,不能生成替代密钥使已有密文不可读。
|
||||
key_volumes = subprocess.check_output(['docker', 'volume', 'ls', '--filter', 'name=orbit-test_orbit-keys', '-q'], text=True).strip()
|
||||
if values.get('ORBIT_CREDENTIAL_VAULT_INITIALIZED') or key_volumes:
|
||||
raise RuntimeError('Token 保管密钥缺失,请恢复 credential-keys.json;不会替换既有密钥。')
|
||||
private_write(key_file, json.dumps({'active': 'local-v1', 'keys': {'local-v1': base64.b64encode(secrets.token_bytes(32)).decode()}}) + '\n')
|
||||
values['ORBIT_CREDENTIAL_VAULT_INITIALIZED'] = '1'
|
||||
values['ORBIT_BUILD_REVISION'] = subprocess.check_output(
|
||||
['git', 'rev-parse', 'HEAD'], cwd=ROOT, text=True).strip()
|
||||
save_settings(values)
|
||||
compose('config', '--quiet')
|
||||
compose('build', 'orbit')
|
||||
compose('up', '-d', 'mysql', 'verify', 'archive-init')
|
||||
# 完成构建后再优雅停止旧写节点,避免迁移期间混用凭据存储版本。
|
||||
compose('stop', 'orbit')
|
||||
compose('up', '-d', 'mysql', 'verify', 'archive-init', 'credential-key-init')
|
||||
# 显式再核验一次,失败不初始化身份、不启动流量。
|
||||
compose('run', '--rm', '-T', '--no-deps', 'verify')
|
||||
if not CREDENTIALS.exists():
|
||||
|
||||
Reference in New Issue
Block a user