mirror of
https://github.com/langgenius/dify.git
synced 2025-12-21 02:05:24 -05:00
Signed-off-by: -LAN- <laipz8200@outlook.com> Co-authored-by: twwu <twwu@dify.ai> Co-authored-by: crazywoola <100913391+crazywoola@users.noreply.github.com> Co-authored-by: jyong <718720800@qq.com> Co-authored-by: Wu Tianwei <30284043+WTW0313@users.noreply.github.com> Co-authored-by: QuantumGhost <obelisk.reg+git@gmail.com> Co-authored-by: lyzno1 <yuanyouhuilyz@gmail.com> Co-authored-by: quicksand <quicksandzn@gmail.com> Co-authored-by: Jyong <76649700+JohnJyong@users.noreply.github.com> Co-authored-by: lyzno1 <92089059+lyzno1@users.noreply.github.com> Co-authored-by: zxhlyh <jasonapring2015@outlook.com> Co-authored-by: Yongtao Huang <yongtaoh2022@gmail.com> Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com> Co-authored-by: Joel <iamjoel007@gmail.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: nite-knite <nkCoding@gmail.com> Co-authored-by: Hanqing Zhao <sherry9277@gmail.com> Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com> Co-authored-by: Harry <xh001x@hotmail.com>
58 lines
1.8 KiB
Python
58 lines
1.8 KiB
Python
import enum
|
|
import logging
|
|
|
|
from pydantic import BaseModel
|
|
|
|
from services.enterprise.base import EnterprisePluginManagerRequest
|
|
from services.errors.base import BaseServiceError
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
class PluginCredentialType(enum.Enum):
|
|
MODEL = 0 # must be 0 for API contract compatibility
|
|
TOOL = 1 # must be 1 for API contract compatibility
|
|
|
|
def to_number(self):
|
|
return self.value
|
|
|
|
|
|
class CheckCredentialPolicyComplianceRequest(BaseModel):
|
|
dify_credential_id: str
|
|
provider: str
|
|
credential_type: PluginCredentialType
|
|
|
|
def model_dump(self, **kwargs):
|
|
data = super().model_dump(**kwargs)
|
|
data["credential_type"] = self.credential_type.to_number()
|
|
return data
|
|
|
|
|
|
class CredentialPolicyViolationError(BaseServiceError):
|
|
pass
|
|
|
|
|
|
class PluginManagerService:
|
|
@classmethod
|
|
def check_credential_policy_compliance(cls, body: CheckCredentialPolicyComplianceRequest):
|
|
try:
|
|
ret = EnterprisePluginManagerRequest.send_request(
|
|
"POST", "/check-credential-policy-compliance", json=body.model_dump()
|
|
)
|
|
if not isinstance(ret, dict) or "result" not in ret:
|
|
raise ValueError("Invalid response format from plugin manager API")
|
|
except Exception as e:
|
|
raise CredentialPolicyViolationError(
|
|
f"error occurred while checking credential policy compliance: {e}"
|
|
) from e
|
|
|
|
if not ret.get("result", False):
|
|
raise CredentialPolicyViolationError("Credentials not available: Please use ENTERPRISE global credentials")
|
|
|
|
logging.debug(
|
|
"Credential policy compliance checked for %s with credential %s, result: %s",
|
|
body.provider,
|
|
body.dify_credential_id,
|
|
ret.get("result", False),
|
|
)
|