Files
林玮 (Jade Lin) febb5f949f Merge remote-tracking branch 'origin/main' into linw/snp-911-end-user-auth
# Conflicts:
#	api/.importlinter
#	api/controllers/console/__init__.py
#	api/controllers/console/workspace/account.py
#	api/core/app/apps/message_based_app_generator.py
#	api/core/app/entities/app_invoke_entities.py
#	api/core/tools/tool_manager.py
#	api/extensions/application_services/installed_app.py
#	api/extensions/ext_application_services.py
#	api/models/__init__.py
#	api/models/workflow.py
#	api/openapi/markdown/console-openapi.md
#	api/openapi/markdown/web-openapi.md
#	api/repositories/account/repository.py
#	api/repositories/api_workflow_run_repository.py
#	api/repositories/app/console_repository.py
#	api/repositories/app_definition_query_repository.py
#	api/services/app_definition_query_service.py
#	api/services/app_generate_service.py
#	api/services/conversation_service.py
#	api/services/message_service.py
#	api/services/web_conversation_service.py
#	api/tasks/app_generate/workflow_execute_task.py
#	api/tests/unit_tests/controllers/console/auth/test_login.py
#	api/tests/unit_tests/controllers/web/test_app.py
#	api/tests/unit_tests/core/app/apps/advanced_chat/test_app_generator.py
#	api/tests/unit_tests/repositories/app/test_console_repository.py
#	api/tests/unit_tests/services/test_app_definition_query_service.py
#	api/tests/unit_tests/services/test_app_generate_service.py
#	api/tests/unit_tests/services/test_message_service.py
#	docker/envs/core-services/api.env.example
#	packages/contracts/generated/api/console/account/types.gen.ts
#	packages/contracts/generated/api/console/account/zod.gen.ts
#	packages/contracts/generated/api/console/apps/errors.gen.ts
#	packages/contracts/generated/api/console/apps/orpc.gen.ts
#	packages/contracts/generated/api/console/errors.gen.ts
#	packages/contracts/generated/api/console/workspaces/errors.gen.ts
#	packages/contracts/generated/api/console/workspaces/orpc.gen.ts
#	packages/contracts/generated/api/web/errors.gen.ts
#	packages/contracts/generated/api/web/orpc.gen.ts
#	packages/contracts/generated/api/web/types.gen.ts
#	packages/contracts/generated/api/web/zod.gen.ts
2026-11-05 14:17:44 +08:00

36 lines
1.7 KiB
Python

"""Compose provider-scoped tool credential resolution for workflow execution."""
from collections.abc import Mapping
from configs import dify_config
from core.db.session_factory import get_session_maker
from core.plugin.entities.plugin_daemon import CredentialType
from core.tools.builtin_tool.provider import BuiltinToolProviderController
from core.tools.plugin_tool.provider import PluginToolProviderController
from extensions.ext_redis import redis_client
from models.provider_ids import ToolProviderID
from repositories.credentials.query_repository import CredentialQueryRepository
from services.credentials.redis_refresh_lock import RedisCredentialRefreshLock
from services.credentials.tool_runtime import ToolCredentialService
from services.credentials.tool_runtime_adapters import ProviderToolCredentialRuntime
def resolve_tool_credentials(
*, controller: BuiltinToolProviderController, provider_id: str, workspace_id: str, credential_id: str | None
) -> tuple[Mapping[str, object], CredentialType, str]:
if isinstance(controller, PluginToolProviderController):
provider = ToolProviderID(provider_id)
providers = (str(provider), provider.provider_name)
else:
providers = (provider_id,)
runtime = ProviderToolCredentialRuntime(
controller=controller, provider_id=provider_id, console_api_url=dify_config.CONSOLE_API_URL
)
service = ToolCredentialService(
credentials=CredentialQueryRepository(session_factory=get_session_maker()),
runtime=runtime,
refresh_lock=RedisCredentialRefreshLock(client=redis_client),
providers=providers,
)
return runtime.resolve(service=service, workspace_id=workspace_id, credential_id=credential_id)