Skip to content

Commit 60da491

Browse files
committed
Redirect instead of proxying
1 parent c58698d commit 60da491

File tree

1 file changed

+5
-54
lines changed

1 file changed

+5
-54
lines changed

platform-tooling-support-tests/src/test/java/platform/tooling/support/tests/MavenRepoProxy.java

Lines changed: 5 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -10,32 +10,20 @@
1010

1111
package platform.tooling.support.tests;
1212

13-
import static java.net.http.HttpRequest.BodyPublishers.noBody;
14-
import static org.junit.jupiter.api.Assertions.assertAll;
15-
import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
16-
1713
import java.io.IOException;
18-
import java.io.InputStream;
1914
import java.net.InetAddress;
2015
import java.net.InetSocketAddress;
2116
import java.net.URI;
22-
import java.net.http.HttpClient;
23-
import java.net.http.HttpRequest;
24-
import java.net.http.HttpResponse;
2517
import java.util.List;
2618

27-
import com.sun.net.httpserver.HttpExchange;
2819
import com.sun.net.httpserver.HttpServer;
2920

3021
public class MavenRepoProxy implements AutoCloseable {
3122

3223
// Forbid downloading JUnit artifacts since we want to use the local ones
3324
private static final List<String> FORBIDDEN_PATHS = List.of("/org/junit");
3425

35-
private static final List<String> RESTRICTED_HEADER_NAMES = List.of("Connection", "Host");
36-
3726
private final HttpServer httpServer;
38-
private final HttpClient httpClient;
3927

4028
@SuppressWarnings("unused")
4129
public MavenRepoProxy() throws IOException {
@@ -48,7 +36,6 @@ public MavenRepoProxy(int port) throws IOException {
4836
}
4937

5038
private MavenRepoProxy(String proxiedUrl, int port) throws IOException {
51-
httpClient = HttpClient.newBuilder().followRedirects(HttpClient.Redirect.ALWAYS).build();
5239
httpServer = HttpServer.create(new InetSocketAddress(InetAddress.getLoopbackAddress(), port), 0);
5340
httpServer.createContext("/", exchange -> {
5441
try (exchange) {
@@ -57,17 +44,12 @@ private MavenRepoProxy(String proxiedUrl, int port) throws IOException {
5744
case "GET":
5845
if (FORBIDDEN_PATHS.stream().anyMatch(
5946
it -> exchange.getRequestURI().getPath().startsWith(it))) {
60-
exchange.sendResponseHeaders(404, 0);
47+
exchange.sendResponseHeaders(404, -1);
6148
break;
6249
}
63-
var request = mapRequest(proxiedUrl, exchange);
64-
try {
65-
var response = httpClient.send(request, HttpResponse.BodyHandlers.ofInputStream());
66-
mapResponse(response, exchange);
67-
}
68-
catch (InterruptedException e) {
69-
Thread.currentThread().interrupt();
70-
}
50+
var redirectUrl = proxiedUrl + exchange.getRequestURI().getPath();
51+
exchange.getResponseHeaders().add("Location", redirectUrl);
52+
exchange.sendResponseHeaders(302, -1);
7153
break;
7254
default:
7355
exchange.sendResponseHeaders(405, -1);
@@ -85,40 +67,9 @@ URI getBaseUri() {
8567
return URI.create("http://" + address.getAddress().getHostName() + ":" + address.getPort());
8668
}
8769

88-
private static void mapResponse(HttpResponse<InputStream> response, HttpExchange exchange) throws IOException {
89-
exchange.sendResponseHeaders(response.statusCode(),
90-
response.headers().firstValueAsLong("Content-Length").orElse(0));
91-
response.headers().map().forEach((key, values) -> exchange.getResponseHeaders().put(key, values));
92-
try (InputStream body = response.body()) {
93-
body.transferTo(exchange.getResponseBody());
94-
}
95-
}
96-
97-
private static HttpRequest mapRequest(String proxiedUrl, HttpExchange exchange) {
98-
var request = HttpRequest.newBuilder().method(exchange.getRequestMethod(), noBody()) //
99-
.uri(URI.create(proxiedUrl + exchange.getRequestURI().getPath()));
100-
exchange.getRequestHeaders().entrySet().stream() //
101-
.filter(entry -> RESTRICTED_HEADER_NAMES.stream().noneMatch(it -> it.equalsIgnoreCase(entry.getKey()))) //
102-
.forEach(entry -> entry.getValue() //
103-
.forEach(value -> request.header(entry.getKey(), value)));
104-
return request.build();
105-
}
106-
10770
@Override
10871
public void close() {
109-
assertAll( //
110-
() -> assertDoesNotThrow(() -> httpServer.stop(0)), //
111-
() -> assertDoesNotThrow(httpClient::close) //
112-
);
72+
httpServer.stop(0);
11373
}
11474

115-
@SuppressWarnings("unused")
116-
public static void main(String[] args) throws Exception {
117-
try (var proxy = new MavenRepoProxy(12345)) {
118-
System.out.println("Started proxy: " + proxy.getBaseUri());
119-
while (!Thread.interrupted()) {
120-
Thread.onSpinWait();
121-
}
122-
}
123-
}
12475
}

0 commit comments

Comments
 (0)