Skip to content

Commit 12581e3

Browse files
authored
补齐一些获取用户名密码的代码 (#2918)
1 parent a38cc95 commit 12581e3

File tree

5 files changed

+45
-11
lines changed

5 files changed

+45
-11
lines changed

sql/binlog.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -134,12 +134,12 @@ def my2sql(request):
134134

135135
# 提交给my2sql进行解析
136136
my2sql = My2SQL()
137-
137+
username, password = instance.get_username_password()
138138
# 准备参数
139139
args = {
140140
"host": instance.host,
141-
"user": instance.user,
142-
"password": instance.password,
141+
"user": username,
142+
"password": password,
143143
"port": instance.port,
144144
"work-type": work_type,
145145
"start-file": start_file,

sql/engines/__init__.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ def __del__(self):
4949
del self.remotessh
5050

5151
def remote_instance_conn(self, instance=None):
52+
user, password = instance.get_username_password()
5253
# 判断如果配置了隧道则连接隧道
5354
if not hasattr(self, "remotessh") and instance.tunnel:
5455
self.remotessh = SSHConnection(
@@ -62,13 +63,14 @@ def remote_instance_conn(self, instance=None):
6263
instance.tunnel.pkey_password,
6364
)
6465
self.remote_host, self.remote_port = self.remotessh.get_ssh()
65-
self.remote_user = instance.user
66-
self.remote_password = instance.password
66+
user, password = instance.get_username_password()
67+
self.remote_user = user
68+
self.remote_password = password
6769
elif not instance.tunnel:
6870
self.remote_host = instance.host
6971
self.remote_port = instance.port
70-
self.remote_user = instance.user
71-
self.remote_password = instance.password
72+
self.remote_user = user
73+
self.remote_password = password
7274
return (
7375
self.remote_host,
7476
self.remote_port,

sql/engines/tests.py

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import json
22
from datetime import timedelta, datetime
33
from unittest.mock import MagicMock, patch, Mock, ANY
4+
from pytest_mock import MockerFixture
45

56
import sqlparse
67
from django.contrib.auth import get_user_model
@@ -17,7 +18,14 @@
1718
from sql.engines.mongo import MongoEngine
1819
from sql.engines.clickhouse import ClickHouseEngine
1920
from sql.engines.odps import ODPSEngine
20-
from sql.models import DataMaskingColumns, Instance, SqlWorkflow, SqlWorkflowContent
21+
from sql.models import (
22+
DataMaskingColumns,
23+
Instance,
24+
SqlWorkflow,
25+
SqlWorkflowContent,
26+
Tunnel,
27+
)
28+
2129

2230
User = get_user_model()
2331

@@ -2501,3 +2509,22 @@ def test_get_all_columns_by_tb(self, mock_get_connection):
25012509
self.assertEqual(
25022510
result.column_list, ["COLUMN_NAME", "COLUMN_TYPE", "COLUMN_COMMENT"]
25032511
)
2512+
2513+
2514+
def test_ssh(db_instance, mocker: MockerFixture):
2515+
tunnel = Tunnel.objects.create(tunnel_name="test", host="test", port=22)
2516+
db_instance.tunnel = tunnel
2517+
db_instance.save()
2518+
2519+
class FakeTunnel:
2520+
def get_ssh(self):
2521+
return "remote_host", "remote_password"
2522+
2523+
mocker.patch("sql.engines.SSHConnection", return_value=FakeTunnel())
2524+
from sql.engines import EngineBase
2525+
2526+
engine = EngineBase(instance=db_instance)
2527+
remote_host, remote_password, _, _ = engine.remote_instance_conn(
2528+
instance=engine.instance
2529+
)
2530+
assert (remote_host, remote_password) == ("remote_host", "remote_password")

sql/instance.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -238,14 +238,18 @@ def schemasync(request):
238238
tag = int(time.time())
239239
output_directory = os.path.join(settings.BASE_DIR, "downloads/schemasync/")
240240
os.makedirs(output_directory, exist_ok=True)
241+
242+
username, password = instance.get_username_password()
243+
target_username, target_password = target_instance.get_username_password()
244+
241245
args = {
242246
"sync-auto-inc": sync_auto_inc,
243247
"sync-comments": sync_comments,
244248
"charset": "utf8mb4",
245249
"tag": tag,
246250
"output-directory": output_directory,
247-
"source": f"mysql://{instance.user}:{instance.password}@{instance.host}:{instance.port}/{db_name}",
248-
"target": f"mysql://{target_instance.user}:{target_instance.password}@{target_instance.host}:{target_instance.port}/{target_db_name}",
251+
"source": f"mysql://{username}:{password}@{instance.host}:{instance.port}/{db_name}",
252+
"target": f"mysql://{target_username}:{target_password}@{target_instance.host}:{target_instance.port}/{target_db_name}",
249253
}
250254
# 参数检查
251255
args_check_result = schema_sync.check_args(args)

sql/sql_analyze.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,8 @@ def analyze(request):
6666
)
6767
soar_test_dsn = SysConfig().get("soar_test_dsn")
6868
# 获取实例连接信息
69-
online_dsn = f"{instance.user}:{instance.password}@{instance.host}:{instance.port}/{db_name}"
69+
user, password = instance.get_username_password()
70+
online_dsn = f"{user}:{password}@{instance.host}:{instance.port}/{db_name}"
7071
else:
7172
online_dsn = ""
7273
soar_test_dsn = ""

0 commit comments

Comments
 (0)