feat/datasource
jyong 11 months ago
parent 804e55824d
commit 976b465e76

@ -29,7 +29,7 @@ class DatasourceProvider(Base):
) )
id = db.Column(StringUUID, server_default=db.text("uuid_generate_v4()")) id = db.Column(StringUUID, server_default=db.text("uuid_generate_v4()"))
tenant_id = db.Column(StringUUID, nullable=False) tenant_id = db.Column(StringUUID, nullable=False)
plugin_id: Mapped[str] = db.Column(StringUUID, nullable=False) plugin_id: Mapped[str] = db.Column(db.TEXT, nullable=False)
provider: Mapped[str] = db.Column(db.String(255), nullable=False) provider: Mapped[str] = db.Column(db.String(255), nullable=False)
auth_type: Mapped[str] = db.Column(db.String(255), nullable=False) auth_type: Mapped[str] = db.Column(db.String(255), nullable=False)
encrypted_credentials: Mapped[dict] = db.Column(JSONB, nullable=False) encrypted_credentials: Mapped[dict] = db.Column(JSONB, nullable=False)

@ -35,28 +35,28 @@ class DatasourceProviderService:
:param credentials: :param credentials:
""" """
credential_valid = self.provider_manager.validate_provider_credentials(tenant_id=tenant_id, credential_valid = self.provider_manager.validate_provider_credentials(tenant_id=tenant_id,
user_id=current_user.id, user_id=current_user.id,
provider=provider, provider=provider,
credentials=credentials) credentials=credentials)
if credential_valid: if credential_valid:
# Get all provider configurations of the current workspace # Get all provider configurations of the current workspace
datasource_provider = db.session.query(DatasourceProvider).filter_by(tenant_id=tenant_id, datasource_provider = db.session.query(DatasourceProvider).filter_by(tenant_id=tenant_id,
provider=provider, provider=provider,
plugin_id=plugin_id).first() plugin_id=plugin_id).first()
provider_credential_secret_variables = self.extract_secret_variables(tenant_id=tenant_id, provider_credential_secret_variables = self.extract_secret_variables(tenant_id=tenant_id,
provider=provider provider=provider
) )
if not datasource_provider: if not datasource_provider:
for key, value in credentials.items(): for key, value in credentials.items():
if key in provider_credential_secret_variables: if key in provider_credential_secret_variables:
# if send [__HIDDEN__] in secret input, it will be same as original value # if send [__HIDDEN__] in secret input, it will be same as original value
credentials[key] = encrypter.encrypt_token(tenant_id, value) credentials[key] = encrypter.encrypt_token(tenant_id, value)
datasource_provider = DatasourceProvider(tenant_id=tenant_id, datasource_provider = DatasourceProvider(tenant_id=tenant_id,
provider=provider, provider=provider,
plugin_id=plugin_id, plugin_id=plugin_id,
auth_type="api_key", auth_type="api_key",
encrypted_credentials=credentials) encrypted_credentials=credentials)
db.session.add(datasource_provider) db.session.add(datasource_provider)
db.session.commit() db.session.commit()
else: else:
@ -91,7 +91,6 @@ class DatasourceProviderService:
return secret_input_form_variables return secret_input_form_variables
def get_datasource_credentials(self, tenant_id: str, provider: str, plugin_id: str) -> list[dict]: def get_datasource_credentials(self, tenant_id: str, provider: str, plugin_id: str) -> list[dict]:
""" """
get datasource credentials. get datasource credentials.
@ -102,9 +101,11 @@ class DatasourceProviderService:
:return: :return:
""" """
# Get all provider configurations of the current workspace # Get all provider configurations of the current workspace
datasource_providers: list[DatasourceProvider] = db.session.query(DatasourceProvider).filter_by(tenant_id=tenant_id, datasource_providers: list[DatasourceProvider] = db.session.query(DatasourceProvider).filter(
provider=provider, DatasourceProvider.tenant_id == tenant_id,
plugin_id=plugin_id).all() DatasourceProvider.provider == provider,
DatasourceProvider.plugin_id == plugin_id
).all()
if not datasource_providers: if not datasource_providers:
return [] return []
copy_credentials_list = [] copy_credentials_list = []
@ -127,7 +128,6 @@ class DatasourceProviderService:
return copy_credentials_list return copy_credentials_list
def remove_datasource_credentials(self, def remove_datasource_credentials(self,
tenant_id: str, tenant_id: str,
provider: str, provider: str,
@ -141,9 +141,8 @@ class DatasourceProviderService:
:return: :return:
""" """
datasource_provider = db.session.query(DatasourceProvider).filter_by(tenant_id=tenant_id, datasource_provider = db.session.query(DatasourceProvider).filter_by(tenant_id=tenant_id,
provider=provider, provider=provider,
plugin_id=plugin_id).first() plugin_id=plugin_id).first()
if datasource_provider: if datasource_provider:
db.session.delete(datasource_provider) db.session.delete(datasource_provider)
db.session.commit() db.session.commit()

Loading…
Cancel
Save