Skip to content

Commit 98b0e1b

Browse files
committed
use ApiDescriptor for prefixes
1 parent 583c959 commit 98b0e1b

File tree

7 files changed

+33
-7
lines changed

7 files changed

+33
-7
lines changed

server/impl/src/main/java/com/walmartlabs/concord/server/boot/HttpServer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
* =====
2121
*/
2222

23-
import com.walmartlabs.concord.server.boot.resteasy.ApiDescriptor;
23+
import com.walmartlabs.concord.server.sdk.rest.ApiDescriptor;
2424
import com.walmartlabs.concord.server.cfg.ServerConfiguration;
2525
import org.eclipse.jetty.ee8.nested.SessionHandler;
2626
import org.eclipse.jetty.ee8.servlet.FilterHolder;

server/impl/src/main/java/com/walmartlabs/concord/server/boot/resteasy/ConcordApiDescriptor.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020
* =====
2121
*/
2222

23+
import com.walmartlabs.concord.server.sdk.rest.ApiDescriptor;
24+
2325
public class ConcordApiDescriptor implements ApiDescriptor {
2426

2527
@Override

server/impl/src/main/java/com/walmartlabs/concord/server/boot/resteasy/ResteasyModule.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222

2323
import com.google.inject.Binder;
2424
import com.google.inject.Module;
25+
import com.walmartlabs.concord.server.sdk.rest.ApiDescriptor;
2526
import com.walmartlabs.concord.server.sdk.rest.Component;
2627

2728
import javax.servlet.ServletContextListener;

server/plugins/webapp/pom.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,11 @@
1616
<packaging>jar</packaging>
1717

1818
<dependencies>
19+
<dependency>
20+
<groupId>com.walmartlabs.concord.server</groupId>
21+
<artifactId>concord-server-sdk</artifactId>
22+
<scope>provided</scope>
23+
</dependency>
1924
<dependency>
2025
<groupId>javax.inject</groupId>
2126
<artifactId>javax.inject</artifactId>

server/plugins/webapp/src/main/java/ca/ibodrov/concord/webapp/WebappFilter.java

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@
99
* Licensed under the Apache License, Version 2.0 (the "License");
1010
* you may not use this file except in compliance with the License.
1111
* You may obtain a copy of the License at
12-
*
12+
*
1313
* http://www.apache.org/licenses/LICENSE-2.0
14-
*
14+
*
1515
* Unless required by applicable law or agreed to in writing, software
1616
* distributed under the License is distributed on an "AS IS" BASIS,
1717
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -24,8 +24,10 @@
2424
import com.google.common.cache.CacheLoader;
2525
import com.google.common.cache.LoadingCache;
2626
import com.google.common.collect.ImmutableMap;
27+
import com.walmartlabs.concord.server.sdk.rest.ApiDescriptor;
2728

2829
import javax.annotation.Priority;
30+
import javax.inject.Inject;
2931
import javax.servlet.FilterChain;
3032
import javax.servlet.ServletException;
3133
import javax.servlet.annotation.WebFilter;
@@ -41,6 +43,8 @@
4143
import java.util.stream.Stream;
4244

4345
import static java.util.Comparator.comparing;
46+
import static java.util.Comparator.reverseOrder;
47+
import static java.util.Objects.requireNonNull;
4448
import static javax.ws.rs.core.Response.Status.INTERNAL_SERVER_ERROR;
4549

4650
/**
@@ -51,17 +55,29 @@
5155
public class WebappFilter extends HttpFilter {
5256

5357
private final WebappCollection webapps;
58+
private final List<String> apiPrefixes;
5459

55-
public WebappFilter() {
60+
@Inject
61+
public WebappFilter(Set<ApiDescriptor> apiDescriptors) {
5662
this.webapps = loadWebapps();
63+
this.apiPrefixes = requireNonNull(apiDescriptors).stream()
64+
.flatMap(descriptor -> Arrays.stream(descriptor.paths()))
65+
.map(prefix -> {
66+
if (prefix.endsWith("/*")) {
67+
return prefix.substring(0, prefix.length() - 1);
68+
}
69+
return prefix;
70+
})
71+
.sorted(reverseOrder())
72+
.toList();
5773
}
5874

5975
@Override
6076
protected void doFilter(HttpServletRequest req, HttpServletResponse resp, FilterChain chain)
6177
throws ServletException, IOException {
6278

6379
var uri = req.getRequestURI();
64-
if (uri.startsWith("/api")) {
80+
if (apiPrefixes.stream().anyMatch(uri::startsWith)) {
6581
chain.doFilter(req, resp);
6682
return;
6783
}

server/plugins/webapp/src/main/java/ca/ibodrov/concord/webapp/WebappPluginModule.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222

2323
import com.google.inject.Binder;
2424
import com.google.inject.Module;
25+
import com.walmartlabs.concord.server.sdk.rest.ApiDescriptor;
2526

2627
import javax.inject.Named;
2728
import javax.servlet.Filter;
@@ -33,6 +34,7 @@ public class WebappPluginModule implements Module {
3334

3435
@Override
3536
public void configure(Binder binder) {
37+
newSetBinder(binder, ApiDescriptor.class);
3638
newSetBinder(binder, Filter.class).addBinding().to(WebappFilter.class);
3739
}
3840
}

server/impl/src/main/java/com/walmartlabs/concord/server/boot/resteasy/ApiDescriptor.java renamed to server/sdk/src/main/java/com/walmartlabs/concord/server/sdk/rest/ApiDescriptor.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.walmartlabs.concord.server.boot.resteasy;
1+
package com.walmartlabs.concord.server.sdk.rest;
22

33
/*-
44
* *****
@@ -21,7 +21,7 @@
2121
*/
2222

2323
/**
24-
* Declares an API.
24+
* Declares a list of prefixes that should be served as JAX-RS resources.
2525
*/
2626
public interface ApiDescriptor {
2727

0 commit comments

Comments
 (0)