diff --git a/backend/apps/datasource/api/datasource.py b/backend/apps/datasource/api/datasource.py
index cdc5aa9e..49155de5 100644
--- a/backend/apps/datasource/api/datasource.py
+++ b/backend/apps/datasource/api/datasource.py
@@ -10,8 +10,8 @@ def datasource_list(session: SessionDep):
return get_datasource_list(session=session)
@router.post("/check")
-def check(session: SessionDep, conf: DatasourceConf):
- return check_status(session, conf)
+def check(session: SessionDep, ds: CoreDatasource):
+ return check_status(session, ds)
@router.post("/add", response_model=CoreDatasource)
def add(session: SessionDep, ds: CoreDatasource):
diff --git a/backend/apps/datasource/crud/datasource.py b/backend/apps/datasource/crud/datasource.py
index 3a2a3519..960aee90 100644
--- a/backend/apps/datasource/crud/datasource.py
+++ b/backend/apps/datasource/crud/datasource.py
@@ -3,13 +3,17 @@ from ..models.datasource import CoreDatasource, DatasourceConf
import pyodbc
import datetime
from common.core.deps import SessionDep
+import json
+from ..utils.utils import aes_decrypt
+
def get_datasource_list(session: SessionDep) -> CoreDatasource:
statement = select(CoreDatasource).order_by(CoreDatasource.create_time.desc())
datasource_list = session.exec(statement).fetchall()
return datasource_list
-def check_status(session: SessionDep, conf: DatasourceConf):
+def check_status(session: SessionDep, ds: CoreDatasource):
+ conf = DatasourceConf(**json.loads(aes_decrypt(ds.configuration)))
conn_str = (
"DRIVER={MySQL ODBC 9.3 Unicode Driver};" # todo driver config
f"SERVER={conf.host};"
@@ -32,20 +36,20 @@ def check_status(session: SessionDep, conf: DatasourceConf):
conn.close()
def create_ds(session: SessionDep, ds: CoreDatasource):
+ ds.create_time = datetime.datetime.now()
+ ds.status = "Success" # todo check status
record = CoreDatasource(**ds.model_dump())
- record.create_time = datetime.datetime.now()
- record.status = "Success" # todo check status
session.add(record)
session.commit()
- return record
+ return ds
def update_ds(session: SessionDep, ds: CoreDatasource):
ds.id = int(ds.id)
- term = session.exec(select(CoreDatasource).where(CoreDatasource.id == ds.id)).first()
+ record = session.exec(select(CoreDatasource).where(CoreDatasource.id == ds.id)).first()
update_data = ds.model_dump(exclude_unset=True)
for field, value in update_data.items():
- setattr(term, field, value)
- session.add(term)
+ setattr(record, field, value)
+ session.add(record)
session.commit()
return ds
diff --git a/backend/apps/datasource/utils/__init__.py b/backend/apps/datasource/utils/__init__.py
new file mode 100644
index 00000000..e69de29b
diff --git a/backend/apps/datasource/utils/utils.py b/backend/apps/datasource/utils/utils.py
new file mode 100644
index 00000000..993e6dce
--- /dev/null
+++ b/backend/apps/datasource/utils/utils.py
@@ -0,0 +1,19 @@
+from Crypto.Cipher import AES
+from Crypto.Util.Padding import unpad, pad
+import base64
+
+key = b'SQLBot1234567890'
+
+def aes_encrypt(data):
+ data = bytes(data,'utf-8')
+ cipher = AES.new(key, AES.MODE_ECB)
+ data = pad(data, AES.block_size)
+ encrypt = cipher.encrypt(data)
+ return base64.b64encode(encrypt)
+
+def aes_decrypt(encrypted_data):
+ encrypted_data = base64.b64decode(encrypted_data)
+ cipher = AES.new(key, AES.MODE_ECB)
+ text = cipher.decrypt(encrypted_data)
+ decrypted_text = unpad(text, AES.block_size)
+ return decrypted_text.decode('utf-8')
diff --git a/backend/pyproject.toml b/backend/pyproject.toml
index 76404dcd..db86a481 100644
--- a/backend/pyproject.toml
+++ b/backend/pyproject.toml
@@ -19,6 +19,7 @@ dependencies = [
"sentry-sdk[fastapi]<2.0.0,>=1.40.6",
"pyjwt<3.0.0,>=2.8.0",
"pyodbc (>=5.2.0,<5.2.1)",
+ "pycryptodome (>=3.22.0,<4.0.0)",
]
[[tool.uv.index]]
url = "https://pypi.tuna.tsinghua.edu.cn/simple"
diff --git a/frontend/package.json b/frontend/package.json
index 96a24441..7cc1e1a9 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -19,6 +19,7 @@
"@vitejs/plugin-vue": "^5.2.2",
"@vue/tsconfig": "^0.7.0",
"axios": "^1.8.4",
+ "crypto-js": "^4.2.0",
"element-plus": "^2.9.7",
"less": "^4.3.0",
"pinia": "^3.0.2",
diff --git a/frontend/src/views/ds/form.vue b/frontend/src/views/ds/form.vue
index ae280112..b9b9f69e 100644
--- a/frontend/src/views/ds/form.vue
+++ b/frontend/src/views/ds/form.vue
@@ -22,19 +22,19 @@