add credential id

This commit is contained in:
jyong 2025-08-12 17:56:28 +08:00
parent 71d8a0c0b6
commit fcdbfbda4f
2 changed files with 56 additions and 56 deletions

View File

@ -309,53 +309,54 @@ class DatasourceMessage(ToolInvokeMessage):
######################### #########################
# Online driver file # Online drive file
######################### #########################
class OnlineDriveFile(BaseModel): class OnlineDriveFile(BaseModel):
""" """
Online driver file Online drive file
""" """
key: str = Field(..., description="The key of the file") id: str = Field(..., description="The file ID")
size: int = Field(..., description="The size of the file") name: str = Field(..., description="The file name")
size: int = Field(..., description="The file size")
type: str = Field(..., description="The file type: folder or file")
class OnlineDriveFileBucket(BaseModel): class OnlineDriveFileBucket(BaseModel):
""" """
Online driver file bucket Online drive file bucket
""" """
bucket: Optional[str] = Field(None, description="The bucket of the file") bucket: Optional[str] = Field(None, description="The file bucket")
files: list[OnlineDriveFile] = Field(..., description="The files of the bucket") files: list[OnlineDriveFile] = Field(..., description="The file list")
is_truncated: bool = Field(False, description="Whether the bucket has more files") is_truncated: bool = Field(False, description="Whether the result is truncated")
next_page_parameters: Optional[dict] = Field(None, description="Parameters for fetching the next page")
class OnlineDriveBrowseFilesRequest(BaseModel): class OnlineDriveBrowseFilesRequest(BaseModel):
""" """
Get online driver file list request Get online drive file list request
""" """
prefix: Optional[str] = Field(None, description="File path prefix for filtering eg: 'docs/dify/'") bucket: Optional[str] = Field(None, description="The file bucket")
bucket: Optional[str] = Field(None, description="Storage bucket name") prefix: str = Field(..., description="The parent folder ID")
max_keys: int = Field(20, description="Maximum number of files to return") max_keys: int = Field(20, description="Page size for pagination")
start_after: Optional[str] = Field( next_page_parameters: Optional[dict] = Field(None, description="Parameters for fetching the next page")
None, description="Pagination token for continuing from a specific file eg: 'docs/dify/1.txt'"
)
class OnlineDriveBrowseFilesResponse(BaseModel): class OnlineDriveBrowseFilesResponse(BaseModel):
""" """
Get online driver file list response Get online drive file list response
""" """
result: list[OnlineDriveFileBucket] = Field(..., description="The bucket of the files") result: list[OnlineDriveFileBucket] = Field(..., description="The list of file buckets")
class OnlineDriveDownloadFileRequest(BaseModel): class OnlineDriveDownloadFileRequest(BaseModel):
""" """
Get online driver file Get online drive file
""" """
id: str = Field(..., description="The id of the file") id: str = Field(..., description="The id of the file")

View File

@ -165,44 +165,43 @@ class DatasourceProviderService:
# refresh the credentials # refresh the credentials
real_credentials_list = [] real_credentials_list = []
for datasource_provider in datasource_providers: for datasource_provider in datasource_providers:
if datasource_provider.expires_at != -1 and (datasource_provider.expires_at - 60) < int(time.time()): decrypted_credentials = self.decrypt_datasource_provider_credentials(
decrypted_credentials = self.decrypt_datasource_provider_credentials( tenant_id=tenant_id,
tenant_id=tenant_id, datasource_provider=datasource_provider,
datasource_provider=datasource_provider, plugin_id=plugin_id,
plugin_id=plugin_id, provider=provider,
provider=provider, )
) datasource_provider_id = DatasourceProviderID(f"{plugin_id}/{provider}")
datasource_provider_id = DatasourceProviderID(f"{plugin_id}/{provider}") provider_name = datasource_provider_id.provider_name
provider_name = datasource_provider_id.provider_name redirect_uri = (
redirect_uri = ( f"{dify_config.CONSOLE_API_URL}/console/api/oauth/plugin/"
f"{dify_config.CONSOLE_API_URL}/console/api/oauth/plugin/" f"{datasource_provider_id}/datasource/callback"
f"{datasource_provider_id}/datasource/callback" )
) system_credentials = self.get_oauth_client(tenant_id, datasource_provider_id)
system_credentials = self.get_oauth_client(tenant_id, datasource_provider_id) refreshed_credentials = OAuthHandler().refresh_credentials(
refreshed_credentials = OAuthHandler().refresh_credentials( tenant_id=tenant_id,
tenant_id=tenant_id, user_id=current_user.id,
user_id=current_user.id, plugin_id=datasource_provider_id.plugin_id,
plugin_id=datasource_provider_id.plugin_id, provider=provider_name,
provider=provider_name, redirect_uri=redirect_uri,
redirect_uri=redirect_uri, system_credentials=system_credentials or {},
system_credentials=system_credentials or {}, credentials=decrypted_credentials,
credentials=decrypted_credentials, )
) datasource_provider.encrypted_credentials = self.encrypt_datasource_provider_credentials(
datasource_provider.encrypted_credentials = self.encrypt_datasource_provider_credentials( tenant_id=tenant_id,
tenant_id=tenant_id, raw_credentials=refreshed_credentials.credentials,
raw_credentials=refreshed_credentials.credentials, provider=provider,
provider=provider, plugin_id=plugin_id,
plugin_id=plugin_id, datasource_provider=datasource_provider,
datasource_provider=datasource_provider, )
) datasource_provider.expires_at = refreshed_credentials.expires_at
datasource_provider.expires_at = refreshed_credentials.expires_at real_credentials = self.decrypt_datasource_provider_credentials(
real_credentials = self.decrypt_datasource_provider_credentials( tenant_id=tenant_id,
tenant_id=tenant_id, datasource_provider=datasource_provider,
datasource_provider=datasource_provider, plugin_id=plugin_id,
plugin_id=plugin_id, provider=provider,
provider=provider, )
) real_credentials_list.append(real_credentials)
real_credentials_list.append(real_credentials)
session.commit() session.commit()
return real_credentials_list return real_credentials_list