严格 json 格式
This commit is contained in:
parent
24c81035e8
commit
14d9136a3b
|
|
@ -84,6 +84,8 @@ ConnectHub 是一个轻量级企业集成中间件:统一管理多系统集成
|
||||||
{"rest_user":"REST帐号","rest_password":"REST密码","loginName":"可选-模拟登录名"}
|
{"rest_user":"REST帐号","rest_password":"REST密码","loginName":"可选-模拟登录名"}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
- 注意:在 Admin 中保存 `public_cfg/secret_cfg` 时必须输入 **合法 JSON 对象(双引号、且为 `{...}`)**,否则会直接报错并阻止落库。
|
||||||
|
|
||||||
- token 失效处理:遇到 401 或响应包含 `Invalid token`,自动刷新 token 并重试一次。
|
- token 失效处理:遇到 401 或响应包含 `Invalid token`,自动刷新 token 并重试一次。
|
||||||
|
|
||||||
#### 示例插件:sync_oa_to_didi(仅演示 token 获取日志)
|
#### 示例插件:sync_oa_to_didi(仅演示 token 获取日志)
|
||||||
|
|
|
||||||
|
|
@ -106,34 +106,27 @@ class JobAdmin(ModelView, model=Job):
|
||||||
itr = croniter(str(cron_expr).strip(), base)
|
itr = croniter(str(cron_expr).strip(), base)
|
||||||
_ = itr.get_next(datetime)
|
_ = itr.get_next(datetime)
|
||||||
|
|
||||||
# public_cfg 允许以 JSON 字符串输入
|
# public_cfg:必须是合法 JSON 对象(dict),否则直接报错阻止落库
|
||||||
pcfg = _maybe_json(data.get("public_cfg"))
|
pcfg = data.get("public_cfg")
|
||||||
if isinstance(pcfg, str):
|
if isinstance(pcfg, str):
|
||||||
|
try:
|
||||||
|
pcfg = json.loads(pcfg)
|
||||||
|
except json.JSONDecodeError as e:
|
||||||
|
raise ValueError("public_cfg must be a JSON object") from e
|
||||||
|
if not isinstance(pcfg, dict):
|
||||||
raise ValueError("public_cfg must be a JSON object")
|
raise ValueError("public_cfg must be a JSON object")
|
||||||
if isinstance(pcfg, dict):
|
data["public_cfg"] = pcfg
|
||||||
data["public_cfg"] = pcfg
|
|
||||||
|
|
||||||
# secret_cfg:若用户输入 JSON 字符串,则自动加密落库;若输入已是 token,则原样保存
|
# secret_cfg:必须是合法 JSON 对象(dict),并且保存时必须加密落库
|
||||||
scfg = data.get("secret_cfg", "")
|
scfg = data.get("secret_cfg")
|
||||||
if scfg is None:
|
|
||||||
data["secret_cfg"] = ""
|
|
||||||
return
|
|
||||||
if isinstance(scfg, str):
|
if isinstance(scfg, str):
|
||||||
s = scfg.strip()
|
try:
|
||||||
if not s:
|
scfg = json.loads(scfg)
|
||||||
data["secret_cfg"] = ""
|
except json.JSONDecodeError as e:
|
||||||
return
|
raise ValueError("secret_cfg must be a JSON object") from e
|
||||||
parsed = _maybe_json(s)
|
if not isinstance(scfg, dict):
|
||||||
if isinstance(parsed, dict):
|
raise ValueError("secret_cfg must be a JSON object")
|
||||||
data["secret_cfg"] = encrypt_json(parsed)
|
data["secret_cfg"] = encrypt_json(scfg)
|
||||||
else:
|
|
||||||
# 非 JSON:视为已加密 token
|
|
||||||
data["secret_cfg"] = s
|
|
||||||
return
|
|
||||||
if isinstance(scfg, dict):
|
|
||||||
data["secret_cfg"] = encrypt_json(scfg)
|
|
||||||
return
|
|
||||||
raise ValueError("secret_cfg must be JSON object or encrypted token string")
|
|
||||||
|
|
||||||
|
|
||||||
class JobLogAdmin(ModelView, model=JobLog):
|
class JobLogAdmin(ModelView, model=JobLog):
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue