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 java.util.List;
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;
* @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("/" + 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()
- .addAllUrlPatterns(List.of(
- "/" + BASE_URI_PATTERN + "/" + DATA_SUBSCRIPTION + "/*",
- "/" + 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()
.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() {
- if (registration != null) {
- registration.close();
- }
+ discoveryReg.close();
+ restconfReg.close();
}
}