Skip to content

Commit 5778233

Browse files
author
苏义超
committed
get datasource password from db
1 parent 8c4d921 commit 5778233

File tree

3 files changed

+49
-3
lines changed

3 files changed

+49
-3
lines changed

dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/DataSourceController.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
import org.apache.dolphinscheduler.plugin.datasource.api.datasource.BaseDataSourceParamDTO;
4545
import org.apache.dolphinscheduler.plugin.datasource.api.utils.CommonUtils;
4646
import org.apache.dolphinscheduler.plugin.datasource.api.utils.DataSourceUtils;
47+
import org.apache.dolphinscheduler.plugin.datasource.api.utils.PasswordUtils;
4748
import org.apache.dolphinscheduler.plugin.task.api.utils.ParameterUtils;
4849
import org.apache.dolphinscheduler.spi.datasource.ConnectionParam;
4950
import org.apache.dolphinscheduler.spi.enums.DbType;
@@ -214,6 +215,11 @@ public Result<Object> queryDataSourceListPaging(@Parameter(hidden = true) @Reque
214215
public Result<Boolean> connectDataSource(@Parameter(hidden = true) @RequestAttribute(value = Constants.SESSION_USER) User loginUser,
215216
@io.swagger.v3.oas.annotations.parameters.RequestBody(description = "dataSourceParam") @RequestBody String jsonStr) {
216217
BaseDataSourceParamDTO dataSourceParam = DataSourceUtils.buildDatasourceParam(jsonStr);
218+
if (dataSourceParam.getId() != null
219+
&& dataSourceParam.getPassword().equals(dataSourceService.getHiddenPassword())) {
220+
String passwordInDb = dataSourceService.queryDataSourceRealPassword(dataSourceParam.getId(), loginUser);
221+
dataSourceParam.setPassword(PasswordUtils.decodePassword(passwordInDb));
222+
}
217223
DataSourceUtils.checkDatasourceParam(dataSourceParam);
218224
ConnectionParam connectionParams = DataSourceUtils.buildConnectionParams(dataSourceParam);
219225
dataSourceService.checkConnection(dataSourceParam.getType(), connectionParams);

dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/DataSourceService.java

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,13 +51,28 @@ public interface DataSourceService {
5151
DataSource updateDataSource(User loginUser, BaseDataSourceParamDTO dataSourceParam);
5252

5353
/**
54-
* updateWorkflowInstance datasource
54+
* query datasource with hidden password
5555
*
5656
* @param id datasource id
5757
* @return data source detail
5858
*/
5959
BaseDataSourceParamDTO queryDataSource(int id, User loginUser);
6060

61+
/**
62+
* get hidden password (resolve the security hotspot)
63+
*
64+
* @return hidden password
65+
*/
66+
String getHiddenPassword();
67+
68+
/**
69+
* query datasource real password
70+
*
71+
* @param id datasource id
72+
* @return data source detail
73+
*/
74+
String queryDataSourceRealPassword(int id, User loginUser);
75+
6176
/**
6277
* query datasource list by keyword
6378
*

dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/DataSourceServiceImpl.java

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,7 @@ private boolean checkName(String name) {
189189
}
190190

191191
/**
192-
* updateWorkflowInstance datasource
192+
* query datasource with hidden password
193193
*
194194
* @param id datasource id
195195
* @return data source detail
@@ -218,6 +218,30 @@ public BaseDataSourceParamDTO queryDataSource(int id, User loginUser) {
218218
return baseDataSourceParamDTO;
219219
}
220220

221+
/**
222+
* query datasource real password
223+
*
224+
* @param id datasource id
225+
* @return data source detail
226+
*/
227+
@Override
228+
public String queryDataSourceRealPassword(int id, User loginUser) {
229+
DataSource dataSource = dataSourceMapper.selectById(id);
230+
if (dataSource == null) {
231+
log.error("Datasource does not exist, id:{}.", id);
232+
throw new ServiceException(Status.RESOURCE_NOT_EXIST);
233+
}
234+
235+
if (!canOperatorPermissions(loginUser, new Object[]{dataSource.getId()}, AuthorizationType.DATASOURCE,
236+
ApiFuncIdentificationConstant.DATASOURCE)) {
237+
throw new ServiceException(Status.USER_NO_OPERATION_PERM);
238+
}
239+
240+
ConnectionParam connectionParam =
241+
DataSourceUtils.buildConnectionParams(dataSource.getType(), dataSource.getConnectionParams());
242+
return connectionParam.getPassword();
243+
}
244+
221245
/**
222246
* query datasource list by keyword
223247
*
@@ -268,7 +292,8 @@ private void handlePasswd(List<DataSource> dataSourceList) {
268292
*
269293
* @return hidden password
270294
*/
271-
private String getHiddenPassword() {
295+
@Override
296+
public String getHiddenPassword() {
272297
return Constants.XXXXXX;
273298
}
274299

0 commit comments

Comments
 (0)