feat: AI账号api_key加密存储 + 余额刷新接口与前端按钮
This commit is contained in:
@@ -68,7 +68,9 @@ def _detail_to_read(detail):
|
||||
if isinstance(detail, DomainDetail):
|
||||
return DomainDetailRead.model_validate(detail)
|
||||
if isinstance(detail, AIAccount):
|
||||
return AIAccountRead.model_validate(detail)
|
||||
read = AIAccountRead.model_validate(detail)
|
||||
read.has_api_key = bool(detail.api_key_encrypted or detail.api_key)
|
||||
return read
|
||||
return None
|
||||
|
||||
|
||||
@@ -103,6 +105,10 @@ def _build_detail(asset_type: AssetType, asset_id: int, detail_in):
|
||||
data["ssh_key_encrypted"] = crypto.encrypt(detail_in.ssh_key)
|
||||
data["password_encrypted"] = crypto.encrypt(detail_in.password)
|
||||
return model(asset_id=asset_id, **data)
|
||||
if asset_type == AssetType.AI_AGENT:
|
||||
data = detail_in.model_dump(exclude={"api_key"})
|
||||
data["api_key_encrypted"] = crypto.encrypt(detail_in.api_key)
|
||||
return model(asset_id=asset_id, **data)
|
||||
return model(asset_id=asset_id, **detail_in.model_dump())
|
||||
|
||||
|
||||
@@ -116,6 +122,12 @@ def _apply_detail_update(asset_type: AssetType, existing, detail_in) -> None:
|
||||
existing.ssh_key_encrypted = crypto.encrypt(detail_in.ssh_key)
|
||||
if detail_in.password is not None:
|
||||
existing.password_encrypted = crypto.encrypt(detail_in.password)
|
||||
elif asset_type == AssetType.AI_AGENT:
|
||||
data = detail_in.model_dump(exclude={"api_key"})
|
||||
for key, value in data.items():
|
||||
setattr(existing, key, value)
|
||||
if detail_in.api_key is not None:
|
||||
existing.api_key_encrypted = crypto.encrypt(detail_in.api_key)
|
||||
else:
|
||||
for key, value in detail_in.model_dump().items():
|
||||
setattr(existing, key, value)
|
||||
|
||||
Reference in New Issue
Block a user