(improvement)(headless) Encrypt database password (#1553)

* (improvement)(headless) Encrypt database password


---------

Co-authored-by: lxwcodemonkey
This commit is contained in:
LXW
2024-08-12 00:37:32 +08:00
committed by GitHub
parent 8b01dac8d4
commit 1ff4a71a41
8 changed files with 65 additions and 102 deletions

View File

@@ -3,9 +3,6 @@ package com.tencent.supersonic.headless.server.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.google.common.collect.Lists;
import com.tencent.supersonic.auth.api.authentication.pojo.User;
import com.tencent.supersonic.common.jsqlparser.SqlSelectHelper;
import com.tencent.supersonic.common.pojo.Constants;
import com.tencent.supersonic.common.pojo.Pair;
import com.tencent.supersonic.common.pojo.QueryColumn;
import com.tencent.supersonic.headless.api.pojo.DBColumn;
import com.tencent.supersonic.headless.api.pojo.request.DatabaseReq;
@@ -31,7 +28,6 @@ import lombok.extern.slf4j.Slf4j;
import net.sf.jsqlparser.parser.CCJSqlParserUtil;
import net.sf.jsqlparser.statement.Statement;
import net.sf.jsqlparser.util.TablesNamesFinder;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
@@ -64,16 +60,15 @@ public class DatabaseServiceImpl extends ServiceImpl<DatabaseDOMapper, DatabaseD
@Override
public DatabaseResp createOrUpdateDatabase(DatabaseReq databaseReq, User user) {
Database database = DatabaseConverter.convert(databaseReq);
DatabaseDO databaseDO = getDatabaseDO(databaseReq.getId());
if (databaseDO != null) {
database.updatedBy(user.getName());
DatabaseConverter.convert(database, databaseDO);
databaseReq.updatedBy(user.getName());
DatabaseConverter.convert(databaseReq, databaseDO);
updateById(databaseDO);
return DatabaseConverter.convertWithPassword(databaseDO);
}
database.createdBy(user.getName());
databaseDO = DatabaseConverter.convert(database);
databaseReq.createdBy(user.getName());
databaseDO = DatabaseConverter.convertDO(databaseReq);
save(databaseDO);
return DatabaseConverter.convertWithPassword(databaseDO);
}
@@ -146,19 +141,6 @@ public class DatabaseServiceImpl extends ServiceImpl<DatabaseDOMapper, DatabaseD
return queryWithColumns(sql, DatabaseConverter.convert(databaseResp));
}
private Pair<String, String> getDbTableName(String sql, DatabaseResp databaseResp) {
String dbTableName = SqlSelectHelper.getDbTableName(sql);
if (StringUtils.isBlank(dbTableName)) {
return Pair.pair("", "");
}
if (dbTableName.contains(Constants.DOT)) {
String db = dbTableName.split("\\.")[0];
String table = dbTableName.split("\\.")[1];
return Pair.pair(db, table);
}
return Pair.pair(databaseResp.getDatabase(), dbTableName);
}
@Override
public Map<String, List<DatabaseParameter>> getDatabaseParameters() {
return DbParameterFactory.getMap().entrySet().stream().collect(LinkedHashMap::new,

View File

@@ -15,42 +15,21 @@ public class DatabaseConverter {
public static Database convert(DatabaseResp databaseResp) {
Database database = new Database();
BeanUtils.copyProperties(databaseResp, database);
ConnectInfo connectInfo = getConnectInfo(databaseResp);
database.setConnectInfo(connectInfo);
database.setVersion(databaseResp.getVersion());
return database;
}
public static Database convert(DatabaseReq databaseReq) {
Database database = new Database();
BeanUtils.copyProperties(databaseReq, database);
ConnectInfo connectInfo = new ConnectInfo();
connectInfo.setUserName(databaseReq.getUsername());
connectInfo.setPassword(databaseReq.getPassword());
connectInfo.setUrl(databaseReq.getConnectUrl());
connectInfo.setDatabase(databaseReq.getDatabase());
database.setConnectInfo(connectInfo);
database.setVersion(databaseReq.getVersion());
return database;
}
public static DatabaseDO convert(Database database, DatabaseDO databaseDO) {
database.setId(databaseDO.getId());
database.setCreatedBy(databaseDO.getCreatedBy());
database.setCreatedAt(databaseDO.getCreatedAt());
BeanUtils.copyProperties(database, databaseDO);
databaseDO.setConfig(JSONObject.toJSONString(database.getConnectInfo()));
databaseDO.setAdmin(String.join(",", database.getAdmins()));
databaseDO.setViewer(String.join(",", database.getViewers()));
return databaseDO;
}
public static DatabaseDO convert(Database database) {
DatabaseDO databaseDO = new DatabaseDO();
BeanUtils.copyProperties(database, databaseDO);
databaseDO.setConfig(JSONObject.toJSONString(database.getConnectInfo()));
databaseDO.setAdmin(String.join(",", database.getAdmins()));
databaseDO.setViewer(String.join(",", database.getViewers()));
public static DatabaseDO convert(DatabaseReq databaseReq, DatabaseDO databaseDO) {
BeanUtils.copyProperties(databaseReq, databaseDO);
ConnectInfo connectInfo = getConnectInfo(databaseReq);
databaseDO.setConfig(JSONObject.toJSONString(connectInfo));
databaseDO.setAdmin(String.join(",", databaseReq.getAdmins()));
databaseDO.setViewer(String.join(",", databaseReq.getViewers()));
return databaseDO;
}
@@ -70,6 +49,16 @@ public class DatabaseConverter {
return databaseResp;
}
public static DatabaseDO convertDO(DatabaseReq databaseReq) {
DatabaseDO databaseDO = new DatabaseDO();
BeanUtils.copyProperties(databaseReq, databaseDO);
ConnectInfo connectInfo = getConnectInfo(databaseReq);
databaseDO.setConfig(JSONObject.toJSONString(connectInfo));
databaseDO.setAdmin(String.join(",", databaseReq.getAdmins()));
databaseDO.setViewer(String.join(",", databaseReq.getViewers()));
return databaseDO;
}
public static DatabaseResp convertWithPassword(DatabaseDO databaseDO) {
DatabaseResp databaseResp = convert(databaseDO);
ConnectInfo connectInfo = JSONObject.parseObject(databaseDO.getConfig(), ConnectInfo.class);
@@ -86,4 +75,13 @@ public class DatabaseConverter {
return connectInfo;
}
public static ConnectInfo getConnectInfo(DatabaseReq databaseReq) {
ConnectInfo connectInfo = new ConnectInfo();
connectInfo.setUserName(databaseReq.getUsername());
connectInfo.setPassword(databaseReq.getPassword());
connectInfo.setUrl(databaseReq.getUrl());
connectInfo.setDatabase(databaseReq.getDatabase());
return connectInfo;
}
}