feat(01-01): 新增 common/utils.py 含 mask_token 工具函数

- 落地 mask_token(token, visible_tail=4, mask_char='*') 通用脱敏函数
- 末 N 位明文保留;空/短输入兜底(短于 visible_tail 时全脱敏防长度泄露)
- 不依赖 Django,纯 Python utility,供 Phase 1 Admin / Phase 3 日志 formatter 复用
- 覆盖需求 CRED-01 工具支撑部分
This commit is contained in:
pmc 2026-05-07 17:33:49 +08:00
parent 343b5d0fee
commit a9c25eb2ac

32
qy_lty/common/utils.py Normal file
View File

@ -0,0 +1,32 @@
"""通用工具函数集合。
common/ 不是 Django app apps.py未注册到 INSTALLED_APPS
仅作为跨 app 的纯函数 utility 命名空间使用
不要在此放 Django Model / Manager / 任何依赖 app registry 的对象
"""
def mask_token(token: str, visible_tail: int = 4, mask_char: str = '*') -> str:
"""脱敏长 token / secret仅保留末 N 位明文。
设计动机CredentialSlot.access_token Admin 列表 / 查看态需仅显示末 4
Phase 3 阿里云日志 formatter 也将复用本函数
Args:
token: 待脱敏字符串空字符串 / None 直接返回 ''
visible_tail: 末尾保留明文的字符数默认 4
mask_char: 掩码字符默认 *
Returns:
脱敏后的字符串
'sk-abcdef1234' -> '*********1234'
'' -> ''
None -> ''
'abc' -> '***' # 短于 visible_tail 时全部脱敏,不暴露长度信号
"""
if not token:
return ''
if len(token) <= visible_tail:
return mask_char * len(token)
return mask_char * (len(token) - visible_tail) + token[-visible_tail:]