Skip to content

Commit

Permalink
wip, trouble with rpc
Browse files Browse the repository at this point in the history
  • Loading branch information
salvatore-coppola committed Dec 20, 2024
1 parent e199de2 commit dbdff5b
Show file tree
Hide file tree
Showing 5 changed files with 76 additions and 80 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ Require-Capability: osgi.ee;filter:="(&(osgi.ee=JavaSE)(version=1.8))"
Service-Component: OSGI-INF/*.xml
Import-Package: jakarta.servlet;version="5.0.0",
jakarta.servlet.http;version="5.0.0",
javax.servlet;version="4.0.0",
org.eclipse.jetty.ee10.servlet;version="12.0.14",
org.eclipse.jetty.http;version="12.0.14",
org.eclipse.jetty.server;version="12.0.14",
Expand All @@ -27,6 +26,4 @@ Import-Package: jakarta.servlet;version="5.0.0",
org.osgi.framework;version="1.8.0",
org.osgi.service.component;version="1.3.0",
org.osgi.service.event;version="1.4.0",
org.osgi.service.http.whiteboard.annotations;version="1.1.0",
org.osgi.service.jakartars.whiteboard.annotations;version="2.0.0",
org.slf4j;version="1.7.21"
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@

import java.io.File;
import java.io.IOException;
import java.io.Writer;
import java.security.KeyStore;
import java.security.cert.PKIXRevocationChecker;
import java.util.EnumSet;
Expand All @@ -26,7 +25,6 @@
import java.util.Set;
import java.util.zip.Deflater;

import org.eclipse.jetty.ee10.servlet.ErrorHandler;
import org.eclipse.jetty.ee10.servlet.ServletContextHandler;
import org.eclipse.jetty.ee10.servlet.ServletHolder;
import org.eclipse.jetty.ee10.servlet.SessionHandler;
Expand All @@ -44,7 +42,6 @@
import org.eclipse.jetty.server.ServerConnector;
import org.eclipse.jetty.server.SslConnectionFactory;
import org.eclipse.jetty.server.handler.ErrorHandler.ErrorRequest;
import org.eclipse.jetty.server.handler.gzip.GzipHandler;
import org.eclipse.jetty.session.DefaultSessionIdManager;
import org.eclipse.jetty.session.HouseKeeper;
import org.eclipse.jetty.util.compression.CompressionPool;
Expand All @@ -60,7 +57,6 @@

import jakarta.servlet.SessionCookieConfig;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;

public class JettyServerHolder {

Expand All @@ -78,7 +74,8 @@ public JettyServerHolder(final HttpServiceOptions options, final Optional<Keysto

// TODO make it configurable from options
this.server = new Server(new QueuedThreadPool(200, 8));
this.server.setErrorHandler(new KuraErrorHandler());
// TODO restore after debugging
// this.server.setErrorHandler(new KuraErrorHandler());

for (int port : this.options.getHttpPorts()) {
ServerConnector httpConnector = createHttpConnector(port);
Expand Down Expand Up @@ -143,20 +140,22 @@ private ServletContextHandler createServletContextHandler() {
// handler.setMaxInactiveInterval(-1); // TODO evaluate configurability
servletContextHandler.setSessionHandler(handler);

final GzipHandler gzipHandler = new GzipHandler();
gzipHandler.setDeflaterPool(this.deflaterPool);

servletContextHandler.insertHandler(gzipHandler);

servletContextHandler.setErrorHandler(new ErrorHandler() {

@Override
protected void writeErrorPage(HttpServletRequest request, Writer writer, int code, String message,
boolean showStacks) throws IOException {
// do nothing
}

});
// TODO restore after debugging
// final GzipHandler gzipHandler = new GzipHandler();
// gzipHandler.setDeflaterPool(this.deflaterPool);
//
// servletContextHandler.insertHandler(gzipHandler);

// TODO restore after debugging
// servletContextHandler.setErrorHandler(new ErrorHandler() {
//
// @Override
// protected void writeErrorPage(HttpServletRequest request, Writer writer, int code, String message,
// boolean showStacks) throws IOException {
// // do nothing
// }
//
// });

final SessionCookieConfig cookieConfig = servletContextHandler.getSessionHandler().getSessionCookieConfig();

Expand Down Expand Up @@ -264,7 +263,8 @@ private ServerConnector createHttpsConnector(final KeystoreService keystoreServi
sslContextFactory.setNeedClientAuth(enableClientAuth);

final HttpConfiguration httpsConfig = new HttpConfiguration();
httpsConfig.addCustomizer(new SecureRequestCustomizer());

httpsConfig.addCustomizer(new SecureRequestCustomizer(false)); // TODO to check
httpsConfig.addCustomizer(new BlockHttpMethods(EnumSet.of(HttpMethod.TRACE)));

final ServerConnector connector = new ServerConnector(server,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -89,22 +89,22 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import jakarta.servlet.Servlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpSession;

public class Console implements SelfConfiguringComponent {

private static final String SESSION_CONTEX_NAME = "sessionContex";
private static final String SESSION_CONTEXT_NAME = "sessionContext";

private static final String RESOURCE_CONTEX_NAME = "resourceContex";
private static final String RESOURCE_CONTEXT_NAME = "resourceContext";

private static final String SESSION = "/session";

private static final String EVENT_PATH = "/event";

public static final String ADMIN_ROOT = "/admin";

private static final String LOGIN_MODULE_PATH = ADMIN_ROOT + "/login";
private static final String DENALI_MODULE_PATH = ADMIN_ROOT + "/denali";

Expand Down Expand Up @@ -136,7 +136,7 @@ public class Console implements SelfConfiguringComponent {

private final Set<ServiceRegistration<ServletContextHelper>> contexts = new CopyOnWriteArraySet<>();
private final Set<ServiceRegistration<ResourcesService>> resources = new CopyOnWriteArraySet<>();
private final Set<ServiceRegistration<HttpServlet>> servlets = new CopyOnWriteArraySet<>();
private final Set<ServiceRegistration<Servlet>> servlets = new CopyOnWriteArraySet<>();

private BundleContext bundleContext;

Expand Down Expand Up @@ -460,88 +460,89 @@ private synchronized void initHTTPService() throws NamespaceException {
ServletContextHelper resourceContextHelper = new HttpServletContextHelper(new BaseSecurityHandler());
ServletContextHelper sessionContextHelper = new HttpServletContextHelper(createSessionHandlerChain());

registerContextHelper(RESOURCE_CONTEX_NAME, "/", resourceContextHelper);
registerContextHelper(SESSION_CONTEX_NAME, "/", sessionContextHelper);
registerContextHelper(RESOURCE_CONTEXT_NAME, "/", resourceContextHelper, 5);
registerContextHelper(SESSION_CONTEXT_NAME, "/", sessionContextHelper, 10);

registerResources(ADMIN_ROOT, "www", new AdminResources(), RESOURCE_CONTEX_NAME);
registerResources(AUTH_PATH, "www/auth.html", new AuthorizationResources(), SESSION_CONTEX_NAME);
registerResources(CONSOLE_PATH, "www/denali.html", new ConsoleResources(), SESSION_CONTEX_NAME);
registerResources(ADMIN_ROOT + "/*", "www", new AdminResources(), RESOURCE_CONTEXT_NAME);
registerResources(AUTH_PATH, "www/auth.html", new AuthorizationResources(), SESSION_CONTEXT_NAME);
registerResources(CONSOLE_PATH, "www/denali.html", new ConsoleResources(), SESSION_CONTEXT_NAME);

registerServlet("gwtLoginInfoService", LOGIN_MODULE_PATH + "/loginInfo", new GwtLoginInfoServiceImpl(),
RESOURCE_CONTEX_NAME);
registerServlet("redirectServlet", "/", new RedirectServlet("/"::equals, this.appRoot), RESOURCE_CONTEX_NAME);
RESOURCE_CONTEXT_NAME);
registerServlet("redirectServlet", "/", new RedirectServlet("/"::equals, this.appRoot), RESOURCE_CONTEXT_NAME);

registerServlet("notFoundAuthResourceServlet", AUTH_RESOURCE_PATH, new SendStatusServlet(404),
RESOURCE_CONTEX_NAME);
RESOURCE_CONTEXT_NAME);
registerServlet("notFoundConsoleResourceServlet", CONSOLE_RESOURCE_PATH, new SendStatusServlet(404),
RESOURCE_CONTEX_NAME);
RESOURCE_CONTEXT_NAME);

registerServlet("gwtPasswordAuthenticationService", PASSWORD_AUTH_PATH,
new GwtPasswordAuthenticationServiceImpl(this.userManager, CONSOLE_PATH), SESSION_CONTEX_NAME);
new GwtPasswordAuthenticationServiceImpl(this.userManager, CONSOLE_PATH), SESSION_CONTEXT_NAME);
registerServlet("sslAuthenticationServlet", CERT_AUTH_PATH,
new SslAuthenticationServlet(CONSOLE_PATH, this.userManager), SESSION_CONTEX_NAME);
new SslAuthenticationServlet(CONSOLE_PATH, this.userManager), SESSION_CONTEXT_NAME);

registerServlet("gwtKeystoreServiceImpl", DENALI_MODULE_PATH + "/keystore", new GwtKeystoreServiceImpl(),
SESSION_CONTEX_NAME);
SESSION_CONTEXT_NAME);
registerServlet("gwtSslManagerServiceImpl", DENALI_MODULE_PATH + "/ssl", new GwtSslManagerServiceImpl(),
SESSION_CONTEX_NAME);
SESSION_CONTEXT_NAME);

registerServlet("denaliSessionService", DENALI_MODULE_PATH + SESSION,
new GwtSessionServiceImpl(this.userManager), SESSION_CONTEX_NAME);
new GwtSessionServiceImpl(this.userManager), SESSION_CONTEXT_NAME);

registerServlet("loginSessionService", LOGIN_MODULE_PATH + SESSION, new GwtSessionServiceImpl(this.userManager),
SESSION_CONTEX_NAME);
SESSION_CONTEXT_NAME);
registerServlet("xsrfLoginServlet", LOGIN_MODULE_PATH + "/xsrf", new GwtSecurityTokenServiceImpl(),
SESSION_CONTEX_NAME);
SESSION_CONTEXT_NAME);
registerServlet("xsrfDenaliServlet", DENALI_MODULE_PATH + "/xsrf", new GwtSecurityTokenServiceImpl(),
SESSION_CONTEX_NAME);
SESSION_CONTEXT_NAME);
registerServlet("statusService", DENALI_MODULE_PATH + "/status", new GwtStatusServiceImpl(),
SESSION_CONTEX_NAME);
SESSION_CONTEXT_NAME);
registerServlet("deviceService", DENALI_MODULE_PATH + "/device", new GwtDeviceServiceImpl(),
SESSION_CONTEX_NAME);
registerServlet("logService", DENALI_MODULE_PATH + "/logservice", new GwtLogServiceImpl(), SESSION_CONTEX_NAME);
SESSION_CONTEXT_NAME);
registerServlet("logService", DENALI_MODULE_PATH + "/logservice", new GwtLogServiceImpl(),
SESSION_CONTEXT_NAME);
registerServlet("networkService", DENALI_MODULE_PATH + "/network", new GwtNetworkServiceImpl(),
SESSION_CONTEX_NAME);
SESSION_CONTEXT_NAME);
registerServlet("componentService", DENALI_MODULE_PATH + "/component", new GwtComponentServiceImpl(),
SESSION_CONTEX_NAME);
SESSION_CONTEXT_NAME);
registerServlet("packageService", DENALI_MODULE_PATH + "/package",
new GwtPackageServiceImpl(this.sslManagerService::get), SESSION_CONTEX_NAME);
new GwtPackageServiceImpl(this.sslManagerService::get), SESSION_CONTEXT_NAME);
registerServlet("snapshotServiceImpl", DENALI_MODULE_PATH + "/snapshot", new GwtSnapshotServiceImpl(),
SESSION_CONTEX_NAME);
SESSION_CONTEXT_NAME);
registerServlet("certificateService", DENALI_MODULE_PATH + "/certificate", new GwtCertificatesServiceImpl(),
SESSION_CONTEX_NAME);
SESSION_CONTEXT_NAME);
registerServlet("securityService", DENALI_MODULE_PATH + "/security", new GwtSecurityServiceImpl(),
SESSION_CONTEX_NAME);
SESSION_CONTEXT_NAME);
registerServlet("usersService", DENALI_MODULE_PATH + "/users", new GwtUserServiceImpl(this.userManager),
SESSION_CONTEX_NAME);
registerServlet("fileServlet", DENALI_MODULE_PATH + "/file", new FileServlet(), SESSION_CONTEX_NAME);
SESSION_CONTEXT_NAME);
registerServlet("fileServlet", DENALI_MODULE_PATH + "/file", new FileServlet(), SESSION_CONTEXT_NAME);
registerServlet("deviceSnapshotsServlet", DENALI_MODULE_PATH + "/device_snapshots",
new DeviceSnapshotsServlet(), SESSION_CONTEX_NAME);
new DeviceSnapshotsServlet(), SESSION_CONTEXT_NAME);
registerServlet("channelServlet", DENALI_MODULE_PATH + "/assetsUpDownload", new ChannelServlet(),
SESSION_CONTEX_NAME);
registerServlet("logServlet", DENALI_MODULE_PATH + "/log", new LogServlet(), SESSION_CONTEX_NAME);
registerServlet("skinServlet", DENALI_MODULE_PATH + "/skin", new SkinServlet(), RESOURCE_CONTEX_NAME);
SESSION_CONTEXT_NAME);
registerServlet("logServlet", DENALI_MODULE_PATH + "/log", new LogServlet(), SESSION_CONTEXT_NAME);
registerServlet("skinServlet", DENALI_MODULE_PATH + "/skin", new SkinServlet(), RESOURCE_CONTEXT_NAME);
registerServlet("cloudServices", DENALI_MODULE_PATH + "/cloudservices", new GwtCloudConnectionServiceImpl(),
SESSION_CONTEX_NAME);
SESSION_CONTEXT_NAME);
registerServlet("wireGraphService", DENALI_MODULE_PATH + "/wires", new GwtWireGraphServiceImpl(),
SESSION_CONTEX_NAME);
SESSION_CONTEXT_NAME);
registerServlet("wiresSnapshotServlet", DENALI_MODULE_PATH + "/wiresSnapshot", new WiresSnapshotServlet(),
SESSION_CONTEX_NAME);
SESSION_CONTEXT_NAME);
registerServlet("driverAndAssetService", DENALI_MODULE_PATH + "/assetservices",
new GwtDriverAndAssetServiceImpl(), SESSION_CONTEX_NAME);
registerServlet("wiresBlinkService", ADMIN_ROOT + "/sse", this.wiresBlinkService, SESSION_CONTEX_NAME);
registerServlet("eventService", DENALI_MODULE_PATH + EVENT_PATH, this.eventService, SESSION_CONTEX_NAME);
new GwtDriverAndAssetServiceImpl(), SESSION_CONTEXT_NAME);
registerServlet("wiresBlinkService", ADMIN_ROOT + "/sse", this.wiresBlinkService, SESSION_CONTEXT_NAME);
registerServlet("eventService", DENALI_MODULE_PATH + EVENT_PATH, this.eventService, SESSION_CONTEXT_NAME);

this.eventService.start();
}

private void registerContextHelper(String contextName, String contextPath, ServletContextHelper contextHelper) {
Map<String, String> props = new HashMap<>();

props.put(Constants.SERVICE_ID, contextName);
private void registerContextHelper(String contextName, String contextPath, ServletContextHelper contextHelper,
int ranking) {
Map<String, Object> props = new HashMap<>();

props.put(HttpWhiteboardConstants.HTTP_WHITEBOARD_CONTEXT_NAME, contextName);
props.put(HttpWhiteboardConstants.HTTP_WHITEBOARD_CONTEXT_PATH, contextPath);
props.put(Constants.SERVICE_RANKING, ranking);

ServiceRegistration<ServletContextHelper> contextService = this.bundleContext
.registerService(ServletContextHelper.class, contextHelper, new Hashtable<>(props));
Expand All @@ -551,13 +552,12 @@ private void registerContextHelper(String contextName, String contextPath, Servl

private void registerResources(String pattern, String prefix, ResourcesService resourcesService,
String contextHelperName) {
Map<String, String> props = new HashMap<>();

props.put(Constants.SERVICE_ID, resourcesService.getClass().getSimpleName());
Map<String, Object> props = new HashMap<>();

props.put(HttpWhiteboardConstants.HTTP_WHITEBOARD_RESOURCE_PATTERN, pattern);
props.put(HttpWhiteboardConstants.HTTP_WHITEBOARD_RESOURCE_PREFIX, prefix);
props.put(HttpWhiteboardConstants.HTTP_WHITEBOARD_CONTEXT_SELECT, contextHelperName);
props.put(HttpWhiteboardConstants.HTTP_WHITEBOARD_CONTEXT_SELECT,
"(" + HttpWhiteboardConstants.HTTP_WHITEBOARD_CONTEXT_NAME + "=" + contextHelperName + ")");

ServiceRegistration<ResourcesService> resourcesS = this.bundleContext.registerService(ResourcesService.class,
resourcesService, new Hashtable<>(props));
Expand All @@ -570,14 +570,12 @@ private void registerServlet(String servletName, String servletPattern, HttpServ

Map<String, String> props = new HashMap<>();

props.put(Constants.SERVICE_SCOPE, Constants.SCOPE_PROTOTYPE);
props.put(Constants.SERVICE_ID, servletName);

props.put(HttpWhiteboardConstants.HTTP_WHITEBOARD_SERVLET_NAME, servletName);
props.put(HttpWhiteboardConstants.HTTP_WHITEBOARD_SERVLET_PATTERN, servletPattern);
props.put(HttpWhiteboardConstants.HTTP_WHITEBOARD_CONTEXT_SELECT, contextHelperName);
props.put(HttpWhiteboardConstants.HTTP_WHITEBOARD_CONTEXT_SELECT,
"(" + HttpWhiteboardConstants.HTTP_WHITEBOARD_CONTEXT_NAME + "=" + contextHelperName + ")");

ServiceRegistration<HttpServlet> servletService = this.bundleContext.registerService(HttpServlet.class, servlet,
ServiceRegistration<Servlet> servletService = this.bundleContext.registerService(Servlet.class, servlet,
new Hashtable<>(props));

this.servlets.add(servletService);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@

import java.io.IOException;

import org.osgi.framework.FrameworkUtil;
import org.osgi.service.servlet.context.ServletContextHelper;

import jakarta.servlet.http.HttpServletRequest;
Expand All @@ -25,7 +26,7 @@ public class HttpServletContextHelper extends ServletContextHelper {
private SecurityHandler securityHandler;

public HttpServletContextHelper(SecurityHandler securityHandler) {
super();
super(FrameworkUtil.getBundle(HttpServletContextHelper.class));
this.securityHandler = securityHandler;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ org.apache.felix.gogo.command.version=1.1.2

org.apache.felix.http.servlet-api.version=3.0.0
org.apache.felix.http.jetty12.version=1.0.2
org.apache.felix.http.bridge.version=5.1.6
org.apache.felix.http.bridge.version=5.1.8
org.apache.felix.http.proxy.version=4.0.0
org.apache.felix.http.wrappers.version=1.1.2
org.apache.felix.http.sslfilter.version=2.0.2
Expand Down

0 comments on commit dbdff5b

Please sign in to comment.