Skip to content

Commit 4ee0e7e

Browse files
th37roseludomikula
th37rose
authored andcommitted
store ENV variables to serverSettings collection.
create new api endpoint: /api/serverSettings
1 parent aee0d43 commit 4ee0e7e

File tree

8 files changed

+153
-0
lines changed

8 files changed

+153
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package org.lowcoder.domain.serversetting.model;
2+
3+
import jakarta.persistence.Id;
4+
import lombok.Getter;
5+
import lombok.NoArgsConstructor;
6+
import lombok.Setter;
7+
import lombok.experimental.SuperBuilder;
8+
import lombok.extern.jackson.Jacksonized;
9+
import org.lowcoder.sdk.models.HasIdAndAuditing;
10+
import org.springframework.data.mongodb.core.mapping.Document;
11+
import org.springframework.http.MediaType;
12+
13+
@Document(collection = "serverSettings")
14+
@Jacksonized
15+
@Getter
16+
@Setter
17+
@SuperBuilder
18+
@NoArgsConstructor
19+
public class ServerSetting {
20+
21+
@Id
22+
private String key;
23+
private String value;
24+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package org.lowcoder.domain.serversetting.service;
2+
3+
import org.lowcoder.domain.serversetting.model.ServerSetting;
4+
import org.springframework.data.mongodb.repository.ReactiveMongoRepository;
5+
6+
public interface ServerSettingRepository extends ReactiveMongoRepository<ServerSetting, String> {
7+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package org.lowcoder.domain.serversetting.service;
2+
3+
import org.lowcoder.domain.serversetting.model.ServerSetting;
4+
import reactor.core.publisher.Flux;
5+
6+
public interface ServerSettingService {
7+
8+
Flux<ServerSetting> findAll();
9+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
package org.lowcoder.domain.serversetting.service;
2+
3+
import lombok.extern.slf4j.Slf4j;
4+
import org.lowcoder.domain.serversetting.model.ServerSetting;
5+
import org.lowcoder.sdk.exception.BizError;
6+
import org.lowcoder.sdk.exception.BizException;
7+
import org.springframework.beans.factory.annotation.Autowired;
8+
import org.springframework.stereotype.Service;
9+
import reactor.core.publisher.Flux;
10+
import reactor.core.publisher.Mono;
11+
12+
import javax.annotation.PostConstruct;
13+
import java.util.List;
14+
import java.util.Map;
15+
16+
17+
@Slf4j
18+
@Service
19+
public class ServerSettingServiceImpl implements ServerSettingService {
20+
private final ServerSettingRepository repository;
21+
private final List<String> EXCLUDED_KEYS = List.of("LOWCODER_MONGODB_EXPOSED",
22+
"LOWCODER_PUID",
23+
"LOWCODER_PGID",
24+
"LOWCODER_MONGODB_URL",
25+
"LOWCODER_REDIS_URL",
26+
"LOWCODER_DB_ENCRYPTION_PASSWORD",
27+
"LOWCODER_DB_ENCRYPTION_SALT",
28+
"LOWCODER_API_KEY_SECRET",
29+
"LOWCODER_ADMIN_SMTP_HOST",
30+
"LOWCODER_ADMIN_SMTP_PORT",
31+
"LOWCODER_ADMIN_SMTP_USERNAME",
32+
"LOWCODER_ADMIN_SMTP_PASSWORD",
33+
"LOWCODER_SUPERADMIN_PASSWORD",
34+
"LOWCODER_SUPERADMIN_USERNAME");
35+
36+
@Autowired
37+
public ServerSettingServiceImpl(ServerSettingRepository repository) {
38+
this.repository = repository;
39+
}
40+
41+
@Override
42+
public Flux<ServerSetting> findAll() {
43+
return repository.findAll();
44+
}
45+
46+
@PostConstruct
47+
public void saveEnvironmentVariables() {
48+
Map<String, String> envVariables = System.getenv();
49+
Flux.fromIterable(envVariables.keySet())
50+
.map(key -> {
51+
String value = envVariables.getOrDefault(key, "");
52+
if(EXCLUDED_KEYS.contains(key)) {
53+
value = "stored on the server";
54+
}
55+
return ServerSetting.builder()
56+
.key(key)
57+
.value(value)
58+
.build();
59+
})
60+
.flatMap(repository::save)
61+
.subscribe();
62+
}
63+
}

server/api-service/lowcoder-infra/src/main/java/org/lowcoder/infra/constant/NewUrl.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ private NewUrl() {
1010
public static final String DATASOURCE_URL = PREFIX + "/datasources";
1111
public static final String USER_URL = PREFIX + "/users";
1212
public static final String CONFIG_URL = PREFIX + "/configs";
13+
public static final String SERVER_SETTING_URL = PREFIX + "/serverSettings";
1314
public static final String GROUP_URL = PREFIX + "/groups";
1415
public static final String ASSET_URL = PREFIX + "/assets";
1516

server/api-service/lowcoder-infra/src/main/java/org/lowcoder/infra/constant/Url.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ public final class Url {
77
public static final String DATASOURCE_URL = BASE_URL + VERSION + "/datasources";
88
public static final String USER_URL = BASE_URL + VERSION + "/users";
99
public static final String CONFIG_URL = BASE_URL + VERSION + "/configs";
10+
public static final String SERVER_SETTING_URL = BASE_URL + VERSION + "/serverSettings";
1011
public static final String GROUP_URL = BASE_URL + VERSION + "/groups";
1112
public static final String ASSET_URL = BASE_URL + VERSION + "/assets";
1213

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package org.lowcoder.api.config;
2+
3+
import lombok.RequiredArgsConstructor;
4+
import org.lowcoder.api.framework.view.ResponseView;
5+
import org.lowcoder.domain.serversetting.model.ServerSetting;
6+
import org.lowcoder.domain.serversetting.service.ServerSettingRepository;
7+
import org.lowcoder.domain.serversetting.service.ServerSettingService;
8+
import org.springframework.web.bind.annotation.RestController;
9+
import reactor.core.publisher.Flux;
10+
11+
@RequiredArgsConstructor
12+
@RestController
13+
public class ServerSettingController implements ServerSettingEndpoints
14+
{
15+
private final ServerSettingService serverSettingService;
16+
@Override
17+
public Flux<ServerSetting> getServerSettings() {
18+
return serverSettingService.findAll();
19+
}
20+
21+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package org.lowcoder.api.config;
2+
3+
import io.swagger.v3.oas.annotations.Operation;
4+
import org.lowcoder.api.framework.view.ResponseView;
5+
import org.lowcoder.domain.serversetting.model.ServerSetting;
6+
import org.lowcoder.infra.constant.NewUrl;
7+
import org.lowcoder.infra.constant.Url;
8+
import org.springframework.web.bind.annotation.GetMapping;
9+
import org.springframework.web.bind.annotation.RequestMapping;
10+
import org.springframework.web.bind.annotation.RestController;
11+
import reactor.core.publisher.Flux;
12+
13+
@RestController
14+
@RequestMapping(value = {Url.SERVER_SETTING_URL, NewUrl.SERVER_SETTING_URL})
15+
public interface ServerSettingEndpoints
16+
{
17+
String TAG_SERVER_SETTING_MANAGEMENT = "Server Setting APIs";
18+
19+
@Operation(
20+
tags = TAG_SERVER_SETTING_MANAGEMENT,
21+
operationId = "serverSettings",
22+
summary = "Get Lowcoder server settings",
23+
description = "Retrieve the list of server settings for Lowcoder."
24+
)
25+
@GetMapping
26+
Flux<ServerSetting> getServerSettings();
27+
}

0 commit comments

Comments
 (0)