Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit c5f6d5d

Browse files
committed
wip: plugin endpoint authentication
1 parent 083110c commit c5f6d5d

File tree

3 files changed

+20
-8
lines changed

3 files changed

+20
-8
lines changed

server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/framework/configuration/CustomWebFluxConfigurationSupport.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,5 +13,4 @@ protected RouterFunctionMapping createRouterFunctionMapping()
1313
{
1414
return new ReloadableRouterFunctionMapping();
1515
}
16-
1716
}

server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/framework/plugin/endpoint/PluginEndpointHandlerImpl.java

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import org.lowcoder.plugin.api.data.EndpointRequest;
2222
import org.lowcoder.plugin.api.data.EndpointResponse;
2323
import org.lowcoder.sdk.exception.BaseException;
24+
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
2425
import org.springframework.context.ApplicationContext;
2526
import org.springframework.context.support.GenericApplicationContext;
2627
import org.springframework.core.ResolvableType;
@@ -30,7 +31,6 @@
3031
import org.springframework.web.reactive.function.server.RouterFunction;
3132
import org.springframework.web.reactive.function.server.ServerResponse;
3233
import org.springframework.web.reactive.function.server.ServerResponse.BodyBuilder;
33-
import org.springframework.web.reactive.function.server.support.RouterFunctionMapping;
3434

3535
import lombok.RequiredArgsConstructor;
3636
import lombok.extern.slf4j.Slf4j;
@@ -45,7 +45,7 @@ public class PluginEndpointHandlerImpl implements PluginEndpointHandler
4545
private List<RouterFunction<ServerResponse>> routes = new ArrayList<>();
4646

4747
private final ApplicationContext applicationContext;
48-
private final RouterFunctionMapping routerFunctionMapping;
48+
private final DefaultListableBeanFactory beanFactory;
4949

5050
@Override
5151
public void registerEndpoints(String pluginUrlPrefix, List<PluginEndpoint> endpoints)
@@ -54,20 +54,24 @@ public void registerEndpoints(String pluginUrlPrefix, List<PluginEndpoint> endpo
5454

5555
if (CollectionUtils.isNotEmpty(endpoints))
5656
{
57-
57+
List<EndpointExtension> toAuthorize = new ArrayList<>();
5858
for (PluginEndpoint endpoint : endpoints)
5959
{
6060
Method[] handlers = endpoint.getClass().getDeclaredMethods();
6161
if (handlers != null && handlers.length > 0)
6262
{
6363
for (Method handler : handlers)
6464
{
65-
registerEndpointHandler(urlPrefix, endpoint, handler);
65+
toAuthorize.addAll(registerEndpointHandler(urlPrefix, endpoint, handler));
6666
}
6767
}
6868
}
6969

70-
((ReloadableRouterFunctionMapping)routerFunctionMapping).reloadFunctionMappings();
70+
((ReloadableRouterFunctionMapping)beanFactory.getBean("routerFunctionMapping")).reloadFunctionMappings();
71+
if (!toAuthorize.isEmpty())
72+
{
73+
// TODO: ludomikula: finish endpoint authorization
74+
}
7175
}
7276
}
7377

@@ -77,8 +81,10 @@ public List<RouterFunction<ServerResponse>> registeredEndpoints()
7781
return routes;
7882
}
7983

80-
private void registerEndpointHandler(String urlPrefix, PluginEndpoint endpoint, Method handler)
84+
private List<EndpointExtension> registerEndpointHandler(String urlPrefix, PluginEndpoint endpoint, Method handler)
8185
{
86+
List<EndpointExtension> toAuthorize = new ArrayList<>();
87+
8288
if (handler.isAnnotationPresent(EndpointExtension.class))
8389
{
8490
if (checkHandlerMethod(handler))
@@ -103,13 +109,20 @@ private void registerEndpointHandler(String urlPrefix, PluginEndpoint endpoint,
103109
routes.add(routerFunction);
104110
registerRouterFunctionMapping(endpointName, routerFunction);
105111

112+
if (endpointMeta.authenticated())
113+
{
114+
toAuthorize.add(endpointMeta);
115+
}
116+
106117
log.info("Registered endpoint: {} -> {}: {}", endpoint.getClass().getSimpleName(), endpointMeta.method(), urlPrefix + endpointMeta.uri());
107118
}
108119
else
109120
{
110121
log.error("Cannot register plugin endpoint: {} -> {}! Handler method must be defined as: public Mono<ServerResponse> {}(ServerRequest request)", endpoint.getClass().getSimpleName(), handler.getName(), handler.getName());
111122
}
112123
}
124+
125+
return toAuthorize;
113126
}
114127

115128
private void registerRouterFunctionMapping(String endpointName, RouterFunction<ServerResponse> routerFunction)

server/api-service/lowcoder-server/src/main/resources/selfhost/ce/application.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ spring:
1616
codec:
1717
max-in-memory-size: 20MB
1818
webflux:
19-
context-path: /
19+
base-path: /
2020

2121
server:
2222
compression:

0 commit comments

Comments
 (0)