From e2df3f182dc54edda13e90e5bafc793c8f47699b Mon Sep 17 00:00:00 2001 From: jyong <718720800@qq.com> Date: Tue, 29 Jul 2025 16:01:06 +0800 Subject: [PATCH] transform document --- .../datasets/rag_pipeline/datasource_auth.py | 16 ++++++ api/services/datasource_provider_service.py | 57 +++++++++++++++++++ 2 files changed, 73 insertions(+) diff --git a/api/controllers/console/datasets/rag_pipeline/datasource_auth.py b/api/controllers/console/datasets/rag_pipeline/datasource_auth.py index cf63fe79dd..44954278d6 100644 --- a/api/controllers/console/datasets/rag_pipeline/datasource_auth.py +++ b/api/controllers/console/datasets/rag_pipeline/datasource_auth.py @@ -208,6 +208,17 @@ class DatasourceAuthListApi(Resource): tenant_id=current_user.current_tenant_id ) return {"result": jsonable_encoder(datasources)}, 200 + +class DatasourceHardCodeAuthListApi(Resource): + @setup_required + @login_required + @account_initialization_required + def get(self): + datasource_provider_service = DatasourceProviderService() + datasources = datasource_provider_service.get_hard_code_datasource_credentials( + tenant_id=current_user.current_tenant_id + ) + return {"result": jsonable_encoder(datasources)}, 200 class DatasourceAuthOauthCustomClient(Resource): @@ -314,6 +325,11 @@ api.add_resource( "/auth/plugin/datasource/list", ) +api.add_resource( + DatasourceHardCodeAuthListApi, + "/auth/plugin/datasource/default-list", +) + api.add_resource( DatasourceAuthOauthCustomClient, "/auth/plugin/datasource//custom-client", diff --git a/api/services/datasource_provider_service.py b/api/services/datasource_provider_service.py index 8f81e5462d..25966ed41a 100644 --- a/api/services/datasource_provider_service.py +++ b/api/services/datasource_provider_service.py @@ -625,6 +625,63 @@ class DatasourceProviderService: } ) return datasource_credentials + + def get_hard_code_datasource_credentials(self, tenant_id: str) -> list[dict]: + """ + get hard code datasource credentials. + + :return: + """ + # get all plugin providers + manager = PluginDatasourceManager() + datasources = manager.fetch_installed_datasource_providers(tenant_id) + datasource_credentials = [] + for datasource in datasources: + if datasource.plugin_id in ["langgenius/firecrawl_datasource", "langgenius/notion_datasource", "langgenius/jina_datasource"]: + datasource_provider_id = DatasourceProviderID(f"{datasource.plugin_id}/{datasource.provider}") + credentials = self.get_datasource_credentials( + tenant_id=tenant_id, provider=datasource.provider, plugin_id=datasource.plugin_id + ) + redirect_uri = ( + f"{dify_config.CONSOLE_API_URL}/console/api/oauth/plugin/{datasource_provider_id}/datasource/callback" + ) + datasource_credentials.append( + { + "provider": datasource.provider, + "plugin_id": datasource.plugin_id, + "plugin_unique_identifier": datasource.plugin_unique_identifier, + "icon": datasource.declaration.identity.icon, + "name": datasource.declaration.identity.name.split("/")[-1], + "label": datasource.declaration.identity.label.model_dump(), + "description": datasource.declaration.identity.description.model_dump(), + "author": datasource.declaration.identity.author, + "credentials_list": credentials, + "credential_schema": [ + credential.model_dump() for credential in datasource.declaration.credentials_schema + ], + "oauth_schema": { + "client_schema": [ + client_schema.model_dump() + for client_schema in datasource.declaration.oauth_schema.client_schema + ], + "credentials_schema": [ + credential_schema.model_dump() + for credential_schema in datasource.declaration.oauth_schema.credentials_schema + ], + "oauth_custom_client_params": self.get_tenant_oauth_client( + tenant_id, datasource_provider_id, mask=True + ), + "is_oauth_custom_client_enabled": self.is_tenant_oauth_params_enabled( + tenant_id, datasource_provider_id + ), + "is_system_oauth_params_exists": self.is_system_oauth_params_exist(datasource_provider_id), + "redirect_uri": redirect_uri, + } + if datasource.declaration.oauth_schema + else None, + } + ) + return datasource_credentials def get_real_datasource_credentials(self, tenant_id: str, provider: str, plugin_id: str) -> list[dict]: """