Skip to content

Commit 1e1a7f0

Browse files
Setup and initialize HTTPS server correctly when TLS config gets updated (#4377)
Co-authored-by: Christoph Stäbler <cstabler@redhat.com>
1 parent 895aa56 commit 1e1a7f0

File tree

1 file changed

+26
-10
lines changed

1 file changed

+26
-10
lines changed

data-plane/receiver/src/main/java/dev/knative/eventing/kafka/broker/receiver/impl/ReceiverVerticle.java

Lines changed: 26 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -86,9 +86,9 @@ public class ReceiverVerticle extends AbstractVerticle implements Handler<HttpSe
8686

8787
private final IngressRequestHandler ingressRequestHandler;
8888
private final ReceiverEnv env;
89-
private int oidcDiscoveryCallbackId;
9089

9190
private AuthHandler authHandler;
91+
private final Handler<HttpServerRequest> handler;
9292
private HttpServer httpServer;
9393
private HttpServer httpsServer;
9494
private MessageConsumer<Object> messageConsumer;
@@ -124,6 +124,9 @@ public ReceiverVerticle(
124124

125125
this.authVerifier = new AuthVerifierImpl(oidcDiscoveryConfigListener);
126126
this.authHandler = new AuthHandler(this.authVerifier);
127+
128+
this.handler = new ProbeHandler(
129+
env.getLivenessProbePath(), env.getReadinessProbePath(), new MethodNotAllowedHandler(this));
127130
}
128131

129132
public HttpServerOptions getHttpsServerOptions() {
@@ -155,9 +158,6 @@ public void start(final Promise<Void> startPromise) {
155158

156159
authVerifier.start(vertx);
157160

158-
final var handler = new ProbeHandler(
159-
env.getLivenessProbePath(), env.getReadinessProbePath(), new MethodNotAllowedHandler(this));
160-
161161
if (this.httpsServer != null) {
162162
CompositeFuture.all(
163163
this.httpServer
@@ -252,15 +252,31 @@ public void updateServerConfig() {
252252
.setCertValue(Buffer.buffer(java.nio.file.Files.readString(this.tlsCrtFile.toPath())))
253253
.setKeyValue(Buffer.buffer(java.nio.file.Files.readString(this.tlsKeyFile.toPath())));
254254

255-
httpsServer
256-
.updateSSLOptions(new SSLOptions().setKeyCertOptions(keyCertOptions))
257-
.onSuccess(v -> logger.info("Succeeded to update TLS key pair"))
258-
.onFailure(
259-
e -> logger.error("Failed to update TLS key pair while executing updateSSLOptions", e));
260-
255+
if (httpsServer == null) {
256+
// receiver was started without an initialized HTTPS server --> initialize and start it now
257+
httpsServerOptions.setSsl(true).setPemKeyCertOptions(keyCertOptions);
258+
httpsServer = vertx.createHttpServer(httpsServerOptions);
259+
260+
this.httpsServer
261+
.requestHandler(handler)
262+
.exceptionHandler(e -> logger.error("Socket error in HTTPS server", e))
263+
.listen(this.httpsServerOptions.getPort(), this.httpsServerOptions.getHost());
264+
} else {
265+
httpsServer
266+
.updateSSLOptions(new SSLOptions().setKeyCertOptions(keyCertOptions))
267+
.onSuccess(v -> logger.info("Succeeded to update TLS key pair"))
268+
.onFailure(e ->
269+
logger.error("Failed to update TLS key pair while executing updateSSLOptions", e));
270+
}
261271
} catch (IOException e) {
262272
logger.error("Failed to read file {}", tlsCrtFile.toPath(), e);
263273
}
274+
} else {
275+
if (httpsServer != null) {
276+
// We had a running HTTPS server before and TLS files were removed now --> shutdown HTTPS server again
277+
httpsServer.close();
278+
httpsServer = null;
279+
}
264280
}
265281
}
266282
}

0 commit comments

Comments
 (0)