Add WebContext names
[netconf.git] / restconf / restconf-nb / src / main / java / org / opendaylight / restconf / nb / rfc8040 / web / WebInitializer.java
index 2e0ae63acbddd2259978c7389b137f8bdca96d0f..723cec388732a17b985d51036b8c4539698792f1 100644 (file)
@@ -10,6 +10,7 @@ package org.opendaylight.restconf.nb.rfc8040.web;
 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;
@@ -36,7 +37,8 @@ import org.opendaylight.yangtools.concepts.Registration;
  */
 @Singleton
 public final class WebInitializer implements AutoCloseable {
-    private final Registration registration;
+    private final Registration discoveryReg;
+    private final Registration restconfReg;
 
     @Inject
     public WebInitializer(final WebServer webServer, final WebContextSecurer webContextSecurer,
@@ -44,30 +46,26 @@ public final class WebInitializer implements AutoCloseable {
             final DataStreamApplication webAppNotif,
             final CustomFilterAdapterConfiguration customFilterAdapterConfig,
             final WebSocketInitializer webSocketServlet) throws ServletException {
-        final var webContextBuilder = WebContext.builder()
-            .contextPath("/")
+        final var restconfBuilder = WebContext.builder()
+            .name("RFC8040 RESTCONF")
+            .contextPath("/" + BASE_URI_PATTERN)
             .supportsSessions(false)
             .addServlet(ServletDetails.builder()
-                .addUrlPattern("/" + BASE_URI_PATTERN + "/*")
+                .addUrlPattern("/*")
                 .servlet(servletSupport.createHttpServletBuilder(webApp).build())
                 .asyncSupported(true)
                 .build())
             .addServlet(ServletDetails.builder()
-                .addUrlPattern("/" + BASE_URI_PATTERN + "/notif/*")
+                .addUrlPattern("/" + NOTIF + "/*")
                 .servlet(servletSupport.createHttpServletBuilder(webAppNotif).build())
                 .name("notificationServlet")
                 .asyncSupported(true)
                 .build())
             .addServlet(ServletDetails.builder()
-                .addUrlPattern("/" + BASE_URI_PATTERN + "/" + DATA_SUBSCRIPTION + "/*")
-                .addUrlPattern("/" + BASE_URI_PATTERN + "/" + NOTIFICATION_STREAM + "/*")
+                .addUrlPattern("/" + DATA_SUBSCRIPTION + "/*")
+                .addUrlPattern("/" + NOTIFICATION_STREAM + "/*")
                 .servlet(webSocketServlet)
                 .build())
-            .addServlet(ServletDetails.builder()
-                .addUrlPattern("/.well-known/*")
-                .servlet(servletSupport.createHttpServletBuilder(new RootFoundApplication(BASE_URI_PATTERN)).build())
-                .name("Rootfound")
-                .build())
 
             // Allows user to add javax.servlet.Filter(s) in front of REST services
             .addFilter(FilterDetails.builder()
@@ -76,14 +74,29 @@ public final class WebInitializer implements AutoCloseable {
                 .asyncSupported(true)
                 .build());
 
-        webContextSecurer.requireAuthentication(webContextBuilder, true, "/" + 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() {
-        registration.close();
+        discoveryReg.close();
+        restconfReg.close();
     }
 }