*/
package org.opendaylight.restconf.nb.rfc8040.web;
-import java.util.List;
+import static org.opendaylight.restconf.nb.rfc8040.rests.utils.RestconfStreamsConstants.DATA_SUBSCRIPTION;
+import static org.opendaylight.restconf.nb.rfc8040.rests.utils.RestconfStreamsConstants.NOTIFICATION_STREAM;
+import static org.opendaylight.restconf.nb.rfc8040.utils.RestconfConstants.BASE_URI_PATTERN;
+import static org.opendaylight.restconf.nb.rfc8040.utils.RestconfConstants.NOTIF;
+
import javax.annotation.PreDestroy;
import javax.inject.Inject;
import javax.inject.Singleton;
import org.opendaylight.aaa.web.FilterDetails;
import org.opendaylight.aaa.web.ServletDetails;
import org.opendaylight.aaa.web.WebContext;
-import org.opendaylight.aaa.web.WebContextBuilder;
import org.opendaylight.aaa.web.WebContextSecurer;
import org.opendaylight.aaa.web.WebServer;
import org.opendaylight.aaa.web.servlet.ServletSupport;
import org.opendaylight.restconf.nb.rfc8040.DataStreamApplication;
import org.opendaylight.restconf.nb.rfc8040.RestconfApplication;
import org.opendaylight.restconf.nb.rfc8040.RootFoundApplication;
-import org.opendaylight.restconf.nb.rfc8040.rests.utils.RestconfStreamsConstants;
import org.opendaylight.restconf.nb.rfc8040.streams.WebSocketInitializer;
-import org.opendaylight.restconf.nb.rfc8040.utils.RestconfConstants;
import org.opendaylight.yangtools.concepts.Registration;
/**
* @author Thomas Pantelis
*/
@Singleton
-public class WebInitializer {
- private final Registration registration;
+public final class WebInitializer implements AutoCloseable {
+ private final Registration discoveryReg;
+ private final Registration restconfReg;
@Inject
public WebInitializer(final WebServer webServer, final WebContextSecurer webContextSecurer,
final DataStreamApplication webAppNotif,
final CustomFilterAdapterConfiguration customFilterAdapterConfig,
final WebSocketInitializer webSocketServlet) throws ServletException {
- WebContextBuilder webContextBuilder = WebContext.builder()
- .contextPath("/")
+ final var restconfBuilder = WebContext.builder()
+ .name("RFC8040 RESTCONF")
+ .contextPath("/" + BASE_URI_PATTERN)
.supportsSessions(false)
.addServlet(ServletDetails.builder()
- .addUrlPattern(RestconfConstants.BASE_URI_PATTERN + "/*")
+ .addUrlPattern("/*")
.servlet(servletSupport.createHttpServletBuilder(webApp).build())
.asyncSupported(true)
.build())
.addServlet(ServletDetails.builder()
- .addUrlPattern(RestconfConstants.BASE_URI_PATTERN + "/notif/*")
+ .addUrlPattern("/" + NOTIF + "/*")
.servlet(servletSupport.createHttpServletBuilder(webAppNotif).build())
.name("notificationServlet")
.asyncSupported(true)
.build())
.addServlet(ServletDetails.builder()
- .addAllUrlPatterns(List.of(
- RestconfConstants.BASE_URI_PATTERN + "/" + RestconfStreamsConstants.DATA_SUBSCRIPTION + "/*",
- RestconfConstants.BASE_URI_PATTERN + "/" + RestconfStreamsConstants.NOTIFICATION_STREAM + "/*"))
+ .addUrlPattern("/" + DATA_SUBSCRIPTION + "/*")
+ .addUrlPattern("/" + NOTIFICATION_STREAM + "/*")
.servlet(webSocketServlet)
.build())
- .addServlet(ServletDetails.builder()
- .addUrlPattern(".well-known/*")
- .servlet(servletSupport.createHttpServletBuilder(
- new RootFoundApplication(RestconfConstants.BASE_URI_PATTERN))
- .build())
- .name("Rootfound")
- .build())
// Allows user to add javax.servlet.Filter(s) in front of REST services
.addFilter(FilterDetails.builder()
.asyncSupported(true)
.build());
- webContextSecurer.requireAuthentication(webContextBuilder, true, RestconfConstants.BASE_URI_PATTERN + "/*");
+ webContextSecurer.requireAuthentication(restconfBuilder, true, "/*");
+
+ restconfReg = webServer.registerWebContext(restconfBuilder.build());
+
+ final var discoveryBuilder = WebContext.builder()
+ .name("RFC6415 Web Host Metadata")
+ .contextPath("/.well-known")
+ .supportsSessions(false)
+ .addServlet(ServletDetails.builder()
+ .addUrlPattern("/*")
+ .servlet(servletSupport.createHttpServletBuilder(new RootFoundApplication(BASE_URI_PATTERN)).build())
+ .name("Rootfound")
+ .build());
+
+ webContextSecurer.requireAuthentication(discoveryBuilder, true, "/*");
- registration = webServer.registerWebContext(webContextBuilder.build());
+ discoveryReg = webServer.registerWebContext(discoveryBuilder.build());
}
@PreDestroy
+ @Override
public void close() {
- if (registration != null) {
- registration.close();
- }
+ discoveryReg.close();
+ restconfReg.close();
}
}