Skip to content

Commit 14c4dda

Browse files
committed
1. remove password type keys from js datasource config
2. make /datasourceTypes public
1 parent 39bc978 commit 14c4dda

File tree

6 files changed

+50
-13
lines changed

6 files changed

+50
-13
lines changed

server/api-service/openblocks-domain/src/main/java/com/openblocks/domain/datasource/service/DatasourceService.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,13 @@ public interface DatasourceService {
2020

2121
Mono<DatasourceTestResult> testDatasource(Datasource datasource);
2222

23+
/**
24+
* before merge, encrypt, decrypt, and removePasswords
25+
*/
2326
Mono<Void> processJsDatasourcePlugin(Datasource datasource);
2427

28+
Mono<Void> removePasswordTypeKeysFromJsDatasourcePluginConfig(Datasource datasource);
29+
2530
Flux<Datasource> getByOrgId(String orgId);
2631

2732
Mono<Long> countByOrganizationId(String orgId);

server/api-service/openblocks-domain/src/main/java/com/openblocks/domain/datasource/service/impl/DatasourceServiceImpl.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,7 @@ private Mono<DatasourceTestResult> testDatasourceByNodeJs(Datasource datasource)
186186
}
187187

188188
/**
189-
* before merge, encrypt, decrypt
189+
* before merge, encrypt, decrypt, and removePasswords
190190
*/
191191
@Override
192192
public Mono<Void> processJsDatasourcePlugin(Datasource datasource) {
@@ -207,6 +207,17 @@ public Mono<Void> processJsDatasourcePlugin(Datasource datasource) {
207207
});
208208
}
209209

210+
@Override
211+
public Mono<Void> removePasswordTypeKeysFromJsDatasourcePluginConfig(Datasource datasource) {
212+
return processJsDatasourcePlugin(datasource)
213+
.doFinally(__ -> {
214+
if (datasourceMetaInfoService.isJsDatasourcePlugin(datasource.getType())
215+
&& datasource.getDetailConfig() instanceof JsDatasourceConnectionConfig jsDatasourceConnectionConfig) {
216+
jsDatasourceConnectionConfig.removePasswords();
217+
}
218+
});
219+
}
220+
210221
@Override
211222
public Flux<Datasource> getByOrgId(String orgId) {
212223
return repository.findAllByOrganizationId(orgId);

server/api-service/openblocks-sdk/src/main/java/com/openblocks/sdk/models/JsDatasourceConnectionConfig.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,12 @@ private List<?> getParams() {
6565
return Collections.emptyList();
6666
}
6767

68+
public void removePasswords() {
69+
for (String passwordKey : getPasswordTypeKeys()) {
70+
this.remove(passwordKey);
71+
}
72+
}
73+
6874
@Override
6975
public DatasourceConnectionConfig mergeWithUpdatedConfig(DatasourceConnectionConfig detailConfig) {
7076
if (!(detailConfig instanceof JsDatasourceConnectionConfig jsDatasourceConnectionConfig)) {

server/api-service/openblocks-server/src/main/java/com/openblocks/api/datasource/DatasourceApiService.java

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -113,16 +113,18 @@ public Flux<DatasourceView> listOrgDataSources(String orgId) {
113113
.cache();
114114

115115
// build view
116-
return datasourceFlux.flatMap(datasource ->
117-
Mono.zip(datasourceId2MaxPermissionMapMono, userMapMono)
118-
.map(tuple -> {
119-
Map<String, ResourcePermission> datasourceId2MaxPermissionMap = tuple.getT1();
120-
Map<String, User> userMap = tuple.getT2();
121-
User creator = userMap.get(datasource.getCreatedBy());
122-
ResourcePermission maxPermission = datasourceId2MaxPermissionMap.get(datasource.getId());
123-
boolean manage = maxPermission != null && maxPermission.getResourceRole().canDo(MANAGE_DATASOURCES);
124-
return new DatasourceView(datasource, manage, creator == null ? null : creator.getName());
125-
}));
116+
return datasourceFlux
117+
.delayUntil(datasourceService::removePasswordTypeKeysFromJsDatasourcePluginConfig)
118+
.flatMap(datasource ->
119+
Mono.zip(datasourceId2MaxPermissionMapMono, userMapMono)
120+
.map(tuple -> {
121+
Map<String, ResourcePermission> datasourceId2MaxPermissionMap = tuple.getT1();
122+
Map<String, User> userMap = tuple.getT2();
123+
User creator = userMap.get(datasource.getCreatedBy());
124+
ResourcePermission maxPermission = datasourceId2MaxPermissionMap.get(datasource.getId());
125+
boolean manage = maxPermission != null && maxPermission.getResourceRole().canDo(MANAGE_DATASOURCES);
126+
return new DatasourceView(datasource, manage, creator == null ? null : creator.getName());
127+
}));
126128
}
127129

128130
public Flux<DatasourceView> listAppDataSources(String appId) {

server/api-service/openblocks-server/src/main/java/com/openblocks/api/datasource/DatasourceController.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
import com.openblocks.api.permission.view.CommonPermissionView;
3838
import com.openblocks.api.util.BusinessEventPublisher;
3939
import com.openblocks.domain.datasource.model.Datasource;
40+
import com.openblocks.domain.datasource.service.DatasourceService;
4041
import com.openblocks.domain.datasource.service.DatasourceStructureService;
4142
import com.openblocks.domain.permission.model.ResourceRole;
4243
import com.openblocks.infra.constant.NewUrl;
@@ -58,23 +59,28 @@ public class DatasourceController {
5859
private final DatasourceApiService datasourceApiService;
5960
private final UpsertDatasourceRequestMapper upsertDatasourceRequestMapper;
6061
private final BusinessEventPublisher businessEventPublisher;
62+
private final DatasourceService datasourceService;
6163

6264
@Autowired
6365
public DatasourceController(
6466
DatasourceStructureService datasourceStructureService,
6567
DatasourceApiService datasourceApiService,
66-
UpsertDatasourceRequestMapper upsertDatasourceRequestMapper, BusinessEventPublisher businessEventPublisher) {
68+
UpsertDatasourceRequestMapper upsertDatasourceRequestMapper,
69+
BusinessEventPublisher businessEventPublisher,
70+
DatasourceService datasourceService) {
6771
this.datasourceStructureService = datasourceStructureService;
6872
this.datasourceApiService = datasourceApiService;
6973
this.upsertDatasourceRequestMapper = upsertDatasourceRequestMapper;
7074
this.businessEventPublisher = businessEventPublisher;
75+
this.datasourceService = datasourceService;
7176
}
7277

7378
@JsonView(JsonViews.Public.class)
7479
@PostMapping
7580
@ResponseStatus(HttpStatus.CREATED)
7681
public Mono<ResponseView<Datasource>> create(@Valid @RequestBody UpsertDatasourceRequest request) {
7782
return datasourceApiService.create(upsertDatasourceRequestMapper.resolve(request))
83+
.delayUntil(datasourceService::removePasswordTypeKeysFromJsDatasourcePluginConfig)
7884
.delayUntil(datasource -> businessEventPublisher.publishDatasourceEvent(datasource, DATA_SOURCE_CREATE))
7985
.map(ResponseView::success);
8086
}
@@ -83,6 +89,7 @@ public Mono<ResponseView<Datasource>> create(@Valid @RequestBody UpsertDatasourc
8389
@GetMapping("/{id}")
8490
public Mono<ResponseView<Datasource>> getById(@PathVariable String id) {
8591
return datasourceApiService.findByIdWithPermission(id)
92+
.delayUntil(datasourceService::removePasswordTypeKeysFromJsDatasourcePluginConfig)
8693
.map(ResponseView::success);
8794
}
8895

@@ -92,6 +99,7 @@ public Mono<ResponseView<Datasource>> update(@PathVariable String id,
9299
@RequestBody UpsertDatasourceRequest request) {
93100
Datasource resolvedDatasource = upsertDatasourceRequestMapper.resolve(request);
94101
return datasourceApiService.update(id, resolvedDatasource)
102+
.delayUntil(datasourceService::removePasswordTypeKeysFromJsDatasourcePluginConfig)
95103
.delayUntil(datasource -> businessEventPublisher.publishDatasourceEvent(datasource, DATA_SOURCE_UPDATE))
96104
.map(ResponseView::success);
97105
}

server/api-service/openblocks-server/src/main/java/com/openblocks/api/framework/security/SecurityConfig.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import static com.openblocks.infra.constant.Url.CUSTOM_AUTH;
88
import static com.openblocks.infra.constant.Url.GROUP_URL;
99
import static com.openblocks.infra.constant.Url.INVITATION_URL;
10+
import static com.openblocks.infra.constant.Url.ORGANIZATION_URL;
1011
import static com.openblocks.infra.constant.Url.QUERY_URL;
1112
import static com.openblocks.infra.constant.Url.STATE_URL;
1213
import static com.openblocks.infra.constant.Url.USER_URL;
@@ -90,6 +91,7 @@ public SecurityWebFilterChain securityWebFilterChain(ServerHttpSecurity http) {
9091

9192
ServerWebExchangeMatchers.pathMatchers(HttpMethod.GET, GROUP_URL + "/list"), // application view
9293
ServerWebExchangeMatchers.pathMatchers(HttpMethod.POST, QUERY_URL + "/execute"), // application view
94+
ServerWebExchangeMatchers.pathMatchers(HttpMethod.GET, ORGANIZATION_URL + "/*/datasourceTypes"), // datasource types
9395

9496
ServerWebExchangeMatchers.pathMatchers(HttpMethod.GET, GITHUB_STAR),
9597

@@ -110,7 +112,8 @@ public SecurityWebFilterChain securityWebFilterChain(ServerHttpSecurity http) {
110112
ServerWebExchangeMatchers.pathMatchers(HttpMethod.GET, NewUrl.USER_URL + "/currentUser"),
111113
ServerWebExchangeMatchers.pathMatchers(HttpMethod.GET, NewUrl.GROUP_URL + "/list"),
112114
ServerWebExchangeMatchers.pathMatchers(HttpMethod.POST, NewUrl.QUERY_URL + "/execute"),
113-
ServerWebExchangeMatchers.pathMatchers(HttpMethod.GET, NewUrl.MATERIAL_URL + "/**")
115+
ServerWebExchangeMatchers.pathMatchers(HttpMethod.GET, NewUrl.MATERIAL_URL + "/**"),
116+
ServerWebExchangeMatchers.pathMatchers(HttpMethod.GET, NewUrl.ORGANIZATION_URL + "/*/datasourceTypes") // datasource types
114117
)
115118
.permitAll()
116119
.pathMatchers("/api/**")
@@ -145,12 +148,14 @@ private CorsConfigurationSource buildCorsConfigurationSource() {
145148
source.registerCorsConfiguration(QUERY_URL + "/execute", skipCheckCorsForAll);
146149
source.registerCorsConfiguration(APPLICATION_URL + "/*/view", skipCheckCorsForAll);
147150
source.registerCorsConfiguration(GITHUB_STAR, skipCheckCorsForAll);
151+
source.registerCorsConfiguration(ORGANIZATION_URL + "/*/datasourceTypes", skipCheckCorsForAll);
148152

149153
source.registerCorsConfiguration(NewUrl.USER_URL + "/me", skipCheckCorsForAll);
150154
source.registerCorsConfiguration(NewUrl.CONFIG_URL, skipCheckCorsForAll);
151155
source.registerCorsConfiguration(NewUrl.GROUP_URL + "/list", skipCheckCorsForAll);
152156
source.registerCorsConfiguration(NewUrl.QUERY_URL + "/execute", skipCheckCorsForAll);
153157
source.registerCorsConfiguration(NewUrl.APPLICATION_URL + "/*/view", skipCheckCorsForAll);
158+
source.registerCorsConfiguration(NewUrl.ORGANIZATION_URL + "/*/datasourceTypes", skipCheckCorsForAll);
154159

155160
source.registerCorsConfiguration("/**", skipCheckCorsForAllowListDomains);
156161
return source;

0 commit comments

Comments
 (0)