ShiErFeng/shierfeng-fastapi-backend/cli/groups/crypto/command.py
2026-07-24 09:43:10 +08:00

95 lines
2.7 KiB
Python

import typer
from cli.context import AllowProdOption, DryRunOption, EnvOption, OutputOption, YesOption
from .controller import CryptoCommandController
app = typer.Typer(
help='传输加密相关命令',
no_args_is_help=True,
context_settings={'help_option_names': ['-h', '--help']},
)
_CRYPTO_COMMAND_CONTROLLER = CryptoCommandController()
@app.command('validate', help='校验传输加密配置')
def validate(
env: EnvOption = 'dev',
output: OutputOption = 'text',
) -> None:
"""
校验传输加密配置。
:param env: 当前命令运行环境
:param output: 输出格式
:return: None
"""
_CRYPTO_COMMAND_CONTROLLER.validate(env, output)
@app.command('keygen', help='生成新的传输加密密钥对')
def keygen(
env: EnvOption = 'dev',
output: OutputOption = 'text',
kid: str = typer.Option('default', '--kid', help='生成的密钥版本标识'),
key_size: int = typer.Option(2048, '--key-size', help='RSA 密钥长度'),
) -> None:
"""
生成新的传输加密密钥对。
:param env: 当前命令运行环境
:param output: 输出格式
:param kid: 生成的密钥版本标识
:param key_size: RSA 密钥长度
:return: None
"""
_CRYPTO_COMMAND_CONTROLLER.keygen(env, output, kid=kid, key_size=key_size)
@app.command('rotate', help='生成传输加密密钥轮换辅助结果')
def rotate(
env: EnvOption = 'dev',
output: OutputOption = 'text',
allow_prod: AllowProdOption = False,
yes: YesOption = False,
dry_run: DryRunOption = False,
next_kid: str = typer.Option('rotated', '--next-kid', help='轮换后的新密钥版本标识'),
key_size: int = typer.Option(2048, '--key-size', help='新密钥的 RSA 长度'),
) -> None:
"""
生成传输加密密钥轮换辅助结果。
:param env: 当前命令运行环境
:param output: 输出格式
:param allow_prod: 是否允许生产环境危险命令
:param yes: 是否跳过确认
:param dry_run: 是否演练执行
:param next_kid: 轮换后的新密钥版本标识
:param key_size: 新密钥的 RSA 长度
:return: None
"""
_CRYPTO_COMMAND_CONTROLLER.rotate(
env,
output,
allow_prod,
yes,
dry_run,
next_kid=next_kid,
key_size=key_size,
)
@app.command('export-public', help='查看当前运行环境的公钥信息')
def export_public(
env: EnvOption = 'dev',
output: OutputOption = 'text',
) -> None:
"""
导出当前运行环境的公钥信息。
:param env: 当前命令运行环境
:param output: 输出格式
:return: None
"""
_CRYPTO_COMMAND_CONTROLLER.export_public(env, output)