mirror of
https://github.com/langgenius/dify.git
synced 2026-01-14 06:07:33 +08:00
- Added `name` parameter to `TriggerSubscriptionBuilderCreateApi` for better subscription identification. - Implemented `delete_cache_for_subscription` function to clear cache associated with trigger subscriptions. - Updated `WorkflowPluginTriggerService` to check for existing subscriptions before creating new plugin triggers, improving error handling. - Refactored `TriggerProviderService` to utilize the new cache deletion method during provider deletion. This improves the overall management of trigger subscriptions and enhances cache efficiency.
144 lines
5.5 KiB
Python
144 lines
5.5 KiB
Python
from collections.abc import Mapping
|
|
from typing import Union
|
|
|
|
from core.entities.provider_entities import BasicProviderConfig, ProviderConfig
|
|
from core.helper.provider_cache import ProviderCredentialsCache
|
|
from core.helper.provider_encryption import ProviderConfigCache, ProviderConfigEncrypter, create_provider_encrypter
|
|
from core.plugin.entities.plugin_daemon import CredentialType
|
|
from core.trigger.entities.api_entities import TriggerProviderSubscriptionApiEntity
|
|
from core.trigger.provider import PluginTriggerProviderController
|
|
from models.trigger import TriggerSubscription
|
|
|
|
|
|
class TriggerProviderCredentialsCache(ProviderCredentialsCache):
|
|
"""Cache for trigger provider credentials"""
|
|
|
|
def __init__(self, tenant_id: str, provider_id: str, credential_id: str):
|
|
super().__init__(tenant_id=tenant_id, provider_id=provider_id, credential_id=credential_id)
|
|
|
|
def _generate_cache_key(self, **kwargs) -> str:
|
|
tenant_id = kwargs["tenant_id"]
|
|
provider_id = kwargs["provider_id"]
|
|
credential_id = kwargs["credential_id"]
|
|
return f"trigger_credentials:tenant_id:{tenant_id}:provider_id:{provider_id}:credential_id:{credential_id}"
|
|
|
|
|
|
class TriggerProviderOAuthClientParamsCache(ProviderCredentialsCache):
|
|
"""Cache for trigger provider OAuth client"""
|
|
|
|
def __init__(self, tenant_id: str, provider_id: str):
|
|
super().__init__(tenant_id=tenant_id, provider_id=provider_id)
|
|
|
|
def _generate_cache_key(self, **kwargs) -> str:
|
|
tenant_id = kwargs["tenant_id"]
|
|
provider_id = kwargs["provider_id"]
|
|
return f"trigger_oauth_client:tenant_id:{tenant_id}:provider_id:{provider_id}"
|
|
|
|
|
|
class TriggerProviderPropertiesCache(ProviderCredentialsCache):
|
|
"""Cache for trigger provider properties"""
|
|
|
|
def __init__(self, tenant_id: str, provider_id: str, subscription_id: str):
|
|
super().__init__(tenant_id=tenant_id, provider_id=provider_id, subscription_id=subscription_id)
|
|
|
|
def _generate_cache_key(self, **kwargs) -> str:
|
|
tenant_id = kwargs["tenant_id"]
|
|
provider_id = kwargs["provider_id"]
|
|
subscription_id = kwargs["subscription_id"]
|
|
return f"trigger_properties:tenant_id:{tenant_id}:provider_id:{provider_id}:subscription_id:{subscription_id}"
|
|
|
|
|
|
def create_trigger_provider_encrypter_for_subscription(
|
|
tenant_id: str,
|
|
controller: PluginTriggerProviderController,
|
|
subscription: Union[TriggerSubscription, TriggerProviderSubscriptionApiEntity],
|
|
) -> tuple[ProviderConfigEncrypter, ProviderConfigCache]:
|
|
cache = TriggerProviderCredentialsCache(
|
|
tenant_id=tenant_id,
|
|
provider_id=str(controller.get_provider_id()),
|
|
credential_id=subscription.id,
|
|
)
|
|
encrypter, _ = create_provider_encrypter(
|
|
tenant_id=tenant_id,
|
|
config=controller.get_credential_schema_config(subscription.credential_type),
|
|
cache=cache,
|
|
)
|
|
return encrypter, cache
|
|
|
|
def delete_cache_for_subscription(tenant_id: str, provider_id: str, subscription_id: str):
|
|
cache = TriggerProviderCredentialsCache(
|
|
tenant_id=tenant_id,
|
|
provider_id=provider_id,
|
|
credential_id=subscription_id,
|
|
)
|
|
cache.delete()
|
|
|
|
def create_trigger_provider_encrypter_for_properties(
|
|
tenant_id: str,
|
|
controller: PluginTriggerProviderController,
|
|
subscription: Union[TriggerSubscription, TriggerProviderSubscriptionApiEntity],
|
|
) -> tuple[ProviderConfigEncrypter, ProviderConfigCache]:
|
|
cache = TriggerProviderPropertiesCache(
|
|
tenant_id=tenant_id,
|
|
provider_id=str(controller.get_provider_id()),
|
|
subscription_id=subscription.id,
|
|
)
|
|
encrypter, _ = create_provider_encrypter(
|
|
tenant_id=tenant_id,
|
|
config=controller.get_properties_schema(),
|
|
cache=cache,
|
|
)
|
|
return encrypter, cache
|
|
|
|
|
|
def create_trigger_provider_encrypter(
|
|
tenant_id: str, controller: PluginTriggerProviderController, credential_id: str, credential_type: CredentialType
|
|
) -> tuple[ProviderConfigEncrypter, ProviderConfigCache]:
|
|
cache = TriggerProviderCredentialsCache(
|
|
tenant_id=tenant_id,
|
|
provider_id=str(controller.get_provider_id()),
|
|
credential_id=credential_id,
|
|
)
|
|
encrypter, _ = create_provider_encrypter(
|
|
tenant_id=tenant_id,
|
|
config=controller.get_credential_schema_config(credential_type),
|
|
cache=cache,
|
|
)
|
|
return encrypter, cache
|
|
|
|
|
|
def create_trigger_provider_oauth_encrypter(
|
|
tenant_id: str, controller: PluginTriggerProviderController
|
|
) -> tuple[ProviderConfigEncrypter, ProviderConfigCache]:
|
|
cache = TriggerProviderOAuthClientParamsCache(
|
|
tenant_id=tenant_id,
|
|
provider_id=str(controller.get_provider_id()),
|
|
)
|
|
encrypter, _ = create_provider_encrypter(
|
|
tenant_id=tenant_id,
|
|
config=[x.to_basic_provider_config() for x in controller.get_oauth_client_schema()],
|
|
cache=cache,
|
|
)
|
|
return encrypter, cache
|
|
|
|
|
|
def masked_credentials(
|
|
schemas: list[ProviderConfig],
|
|
credentials: Mapping[str, str],
|
|
) -> Mapping[str, str]:
|
|
masked_credentials = {}
|
|
configs = {x.name: x.to_basic_provider_config() for x in schemas}
|
|
for key, value in credentials.items():
|
|
config = configs.get(key)
|
|
if not config:
|
|
masked_credentials[key] = value
|
|
continue
|
|
if config.type == BasicProviderConfig.Type.SECRET_INPUT:
|
|
if len(value) <= 4:
|
|
masked_credentials[key] = "*" * len(value)
|
|
else:
|
|
masked_credentials[key] = value[:2] + "*" * (len(value) - 4) + value[-2:]
|
|
else:
|
|
masked_credentials[key] = value
|
|
return masked_credentials
|