From 06664d0b574c42127dc94de163c7e092ec8e6ecb Mon Sep 17 00:00:00 2001 From: guqing Date: Mon, 23 Sep 2024 15:55:16 +0800 Subject: [PATCH] feat: add API to fetch system configs by group --- .../core/endpoint/SystemConfigEndpoint.java | 61 +++++++++++++++++++ .../extensions/role-template-menu.yaml | 4 ++ 2 files changed, 65 insertions(+) create mode 100644 application/src/main/java/run/halo/app/core/endpoint/SystemConfigEndpoint.java diff --git a/application/src/main/java/run/halo/app/core/endpoint/SystemConfigEndpoint.java b/application/src/main/java/run/halo/app/core/endpoint/SystemConfigEndpoint.java new file mode 100644 index 0000000000..57734e3367 --- /dev/null +++ b/application/src/main/java/run/halo/app/core/endpoint/SystemConfigEndpoint.java @@ -0,0 +1,61 @@ +package run.halo.app.core.endpoint; + +import static org.springdoc.core.fn.builders.apiresponse.Builder.responseBuilder; +import static org.springdoc.core.fn.builders.content.Builder.contentBuilder; +import static org.springdoc.core.fn.builders.parameter.Builder.parameterBuilder; + +import com.fasterxml.jackson.databind.node.JsonNodeFactory; +import com.fasterxml.jackson.databind.node.ObjectNode; +import io.swagger.v3.oas.annotations.enums.ParameterIn; +import lombok.RequiredArgsConstructor; +import org.springdoc.webflux.core.fn.SpringdocRouteBuilder; +import org.springframework.http.MediaType; +import org.springframework.stereotype.Component; +import org.springframework.web.reactive.function.server.RouterFunction; +import org.springframework.web.reactive.function.server.ServerRequest; +import org.springframework.web.reactive.function.server.ServerResponse; +import reactor.core.publisher.Mono; +import run.halo.app.core.extension.endpoint.CustomEndpoint; +import run.halo.app.extension.GroupVersion; +import run.halo.app.infra.SystemConfigurableEnvironmentFetcher; + +@Component +@RequiredArgsConstructor +public class SystemConfigEndpoint implements CustomEndpoint { + private final SystemConfigurableEnvironmentFetcher configurableEnvironmentFetcher; + + @Override + public RouterFunction endpoint() { + final var tag = "SystemConfigV1alpha1Console"; + return SpringdocRouteBuilder.route() + .GET("/systemconfigs/{group}", this::getConfigByGroup, + builder -> builder.operationId("getSystemConfigByGroup") + .description("Get system config by group") + .tag(tag) + .response(responseBuilder() + .content(contentBuilder() + .mediaType(MediaType.APPLICATION_JSON_VALUE) + ) + .implementation(ObjectNode.class)) + .parameter(parameterBuilder() + .in(ParameterIn.PATH) + .name("group") + .required(true) + .description("Group of the system config") + ) + ) + .build(); + } + + private Mono getConfigByGroup(ServerRequest request) { + final var group = request.pathVariable("group"); + return configurableEnvironmentFetcher.fetch(group, ObjectNode.class) + .switchIfEmpty(Mono.fromSupplier(JsonNodeFactory.instance::objectNode)) + .flatMap(json -> ServerResponse.ok().bodyValue(json)); + } + + @Override + public GroupVersion groupVersion() { + return new GroupVersion("console.api.halo.run", "v1alpha1"); + } +} diff --git a/application/src/main/resources/extensions/role-template-menu.yaml b/application/src/main/resources/extensions/role-template-menu.yaml index 24a4d71df2..6a39c6d803 100644 --- a/application/src/main/resources/extensions/role-template-menu.yaml +++ b/application/src/main/resources/extensions/role-template-menu.yaml @@ -14,6 +14,10 @@ rules: - apiGroups: [ "" ] resources: [ "menus", "menuitems" ] verbs: [ "*" ] + - apiGroups: [ "console.api.halo.run" ] + resources: [ "systemconfigs" ] + resourceNames: [ "menu" ] + verbs: [ "get" ] --- apiVersion: v1alpha1 kind: "Role"