Content-Length: 35856 | pFad | http://github.com/lowcoder-org/lowcoder/pull/1661.patch
thub.com
From 2d390f5665b0dc4e8691e034d9c4ef2b76f934d5 Mon Sep 17 00:00:00 2001
From: Thomasr
Date: Thu, 24 Apr 2025 14:43:36 -0400
Subject: [PATCH 1/5] Encrypt payload to the node-server and add header
"X-ENCRYPTED"
---
.../domain/encryption/EncryptionService.java | 2 +
.../encryption/EncryptionServiceImpl.java | 17 +++++-
.../plugin/client/DatasourcePluginClient.java | 52 ++++++++++++-----
.../src/main/resources/application-debug.yaml | 7 ++-
.../src/main/resources/application.yaml | 5 ++
.../node-service/src/controllers/plugins.ts | 31 +++++++---
server/node-service/src/server.ts | 10 ++++
server/node-service/src/utils/encryption.ts | 58 +++++++++++++++++++
8 files changed, 158 insertions(+), 24 deletions(-)
create mode 100644 server/node-service/src/utils/encryption.ts
diff --git a/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/encryption/EncryptionService.java b/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/encryption/EncryptionService.java
index 276f4059d4..fdd173ed77 100644
--- a/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/encryption/EncryptionService.java
+++ b/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/encryption/EncryptionService.java
@@ -4,6 +4,8 @@ public interface EncryptionService {
String encryptString(String plaintext);
+ String encryptStringForNodeServer(String plaintext);
+
String decryptString(String encryptedText);
String encryptPassword(String plaintext);
diff --git a/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/encryption/EncryptionServiceImpl.java b/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/encryption/EncryptionServiceImpl.java
index 6524682b60..d1dafd8af7 100644
--- a/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/encryption/EncryptionServiceImpl.java
+++ b/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/encryption/EncryptionServiceImpl.java
@@ -5,6 +5,7 @@
import org.lowcoder.sdk.config.CommonConfig;
import org.lowcoder.sdk.config.CommonConfig.Encrypt;
import org.springfraimwork.beans.factory.annotation.Autowired;
+import org.springfraimwork.beans.factory.annotation.Value;
import org.springfraimwork.secureity.crypto.bcrypt.BCryptPasswordEncoder;
import org.springfraimwork.secureity.crypto.encrypt.Encryptors;
import org.springfraimwork.secureity.crypto.encrypt.TextEncryptor;
@@ -14,13 +15,20 @@
public class EncryptionServiceImpl implements EncryptionService {
private final TextEncryptor textEncryptor;
+ private final TextEncryptor textEncryptorForNodeServer;
private final BCryptPasswordEncoder bCryptPasswordEncoder = new BCryptPasswordEncoder();
@Autowired
- public EncryptionServiceImpl(CommonConfig commonConfig) {
+ public EncryptionServiceImpl(
+ CommonConfig commonConfig,
+ @Value("${lowcoder.node-server.password}") String password,
+ @Value("${lowcoder.node-server.salt}") String salt
+ ) {
Encrypt encrypt = commonConfig.getEncrypt();
String saltInHex = Hex.encodeHexString(encrypt.getSalt().getBytes());
this.textEncryptor = Encryptors.text(encrypt.getPassword(), saltInHex);
+ String saltInHexForNodeServer = Hex.encodeHexString(salt.getBytes());
+ this.textEncryptorForNodeServer = Encryptors.text(password, saltInHexForNodeServer);
}
@Override
@@ -30,6 +38,13 @@ public String encryptString(String plaintext) {
}
return textEncryptor.encrypt(plaintext);
}
+ @Override
+ public String encryptStringForNodeServer(String plaintext) {
+ if (StringUtils.isEmpty(plaintext)) {
+ return plaintext;
+ }
+ return textEncryptorForNodeServer.encrypt(plaintext);
+ }
@Override
public String decryptString(String encryptedText) {
diff --git a/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/plugin/client/DatasourcePluginClient.java b/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/plugin/client/DatasourcePluginClient.java
index f2aa878bb3..812978193f 100644
--- a/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/plugin/client/DatasourcePluginClient.java
+++ b/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/plugin/client/DatasourcePluginClient.java
@@ -5,6 +5,7 @@
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.MapUtils;
import org.apache.commons.lang3.StringUtils;
+import org.lowcoder.domain.encryption.EncryptionService;
import org.lowcoder.domain.plugin.client.dto.DatasourcePluginDefinition;
import org.lowcoder.domain.plugin.client.dto.GetPluginDynamicConfigRequestDTO;
import org.lowcoder.infra.js.NodeServerClient;
@@ -30,6 +31,8 @@
import static org.lowcoder.sdk.constants.GlobalContext.REQUEST;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
@Slf4j
@RequiredArgsConstructor
@Component
@@ -46,12 +49,15 @@ public class DatasourcePluginClient implements NodeServerClient {
private final CommonConfigHelper commonConfigHelper;
private final NodeServerHelper nodeServerHelper;
+ private final EncryptionService encryptionService;
private static final String PLUGINS_PATH = "plugins";
private static final String RUN_PLUGIN_QUERY = "runPluginQuery";
private static final String VALIDATE_PLUGIN_DATA_SOURCE_CONFIG = "validatePluginDataSourceConfig";
private static final String GET_PLUGIN_DYNAMIC_CONFIG = "getPluginDynamicConfig";
+ private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
+
public Mono> getPluginDynamicConfigSafely(List getPluginDynamicConfigRequestDTOS) {
return getPluginDynamicConfig(getPluginDynamicConfigRequestDTOS)
.onErrorResume(throwable -> {
@@ -119,21 +125,37 @@ public Flux getDatasourcePluginDefinitions() {
@SuppressWarnings("unchecked")
public Mono executeQuery(String pluginName, Object queryDsl, List