| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- 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),
- )
|