diff --git a/qqq-middleware-javalin/src/main/java/com/kingsrook/qqq/backend/javalin/QJavalinMetaData.java b/qqq-middleware-javalin/src/main/java/com/kingsrook/qqq/backend/javalin/QJavalinMetaData.java index 9383b1d6..3c1ea8df 100644 --- a/qqq-middleware-javalin/src/main/java/com/kingsrook/qqq/backend/javalin/QJavalinMetaData.java +++ b/qqq-middleware-javalin/src/main/java/com/kingsrook/qqq/backend/javalin/QJavalinMetaData.java @@ -22,6 +22,7 @@ package com.kingsrook.qqq.backend.javalin; +import java.util.ArrayList; import java.util.List; import java.util.function.Function; import com.kingsrook.qqq.backend.core.model.metadata.QInstance; @@ -312,4 +313,20 @@ public class QJavalinMetaData implements QSupplementalInstanceMetaData return (this); } + + + /******************************************************************************* + ** Fluent setter to add 1 routeProvider + *******************************************************************************/ + public QJavalinMetaData withRouteProvider(JavalinRouteProviderMetaData routeProvider) + { + if(this.routeProviders == null) + { + this.routeProviders = new ArrayList<>(); + } + this.routeProviders.add(routeProvider); + return (this); + } + + } diff --git a/qqq-middleware-javalin/src/main/java/com/kingsrook/qqq/middleware/javalin/routeproviders/authentication/SimpleRouteAuthenticator.java b/qqq-middleware-javalin/src/main/java/com/kingsrook/qqq/middleware/javalin/routeproviders/authentication/SimpleRouteAuthenticator.java index 4cf78271..798945d0 100644 --- a/qqq-middleware-javalin/src/main/java/com/kingsrook/qqq/middleware/javalin/routeproviders/authentication/SimpleRouteAuthenticator.java +++ b/qqq-middleware-javalin/src/main/java/com/kingsrook/qqq/middleware/javalin/routeproviders/authentication/SimpleRouteAuthenticator.java @@ -32,12 +32,13 @@ import com.kingsrook.qqq.backend.core.modules.authentication.QAuthenticationModu import com.kingsrook.qqq.backend.core.modules.authentication.QAuthenticationModuleInterface; import com.kingsrook.qqq.backend.javalin.QJavalinImplementation; import io.javalin.http.Context; +import static com.kingsrook.qqq.backend.core.logging.LogUtils.logPair; /******************************************************************************* ** simple implementation of a route authenticator. Assumes that unauthenticated ** requests should redirect to a login page. Note though, maybe that should be - ** more intelligent, like, only redirect requets for a .html file, but not + ** more intelligent, like, only redirect requests for a .html file, but not ** requests for include files like images or .js/.css? *******************************************************************************/ public class SimpleRouteAuthenticator implements RouteAuthenticatorInterface @@ -53,7 +54,7 @@ public class SimpleRouteAuthenticator implements RouteAuthenticatorInterface try { QSession qSession = QJavalinImplementation.setupSession(context, null); - LOG.debug("Session has been activated", "uuid=" + qSession.getUuid()); + LOG.debug("Session has been activated", logPair("uuid", qSession.getUuid())); return (true); } catch(QAuthenticationException e) diff --git a/qqq-sample-project/src/main/java/com/kingsrook/sampleapp/SampleJavalinServer.java b/qqq-sample-project/src/main/java/com/kingsrook/sampleapp/SampleJavalinServer.java index cbf720a5..2a945fc9 100644 --- a/qqq-sample-project/src/main/java/com/kingsrook/sampleapp/SampleJavalinServer.java +++ b/qqq-sample-project/src/main/java/com/kingsrook/sampleapp/SampleJavalinServer.java @@ -23,11 +23,7 @@ package com.kingsrook.sampleapp; import com.kingsrook.qqq.backend.core.logging.QLogger; -import com.kingsrook.qqq.backend.core.model.metadata.code.QCodeReference; import com.kingsrook.qqq.middleware.javalin.QApplicationJavalinServer; -import com.kingsrook.qqq.middleware.javalin.routeproviders.ProcessBasedRouter; -import com.kingsrook.qqq.middleware.javalin.routeproviders.SimpleFileSystemDirectoryRouter; -import com.kingsrook.qqq.middleware.javalin.routeproviders.authentication.SimpleRouteAuthenticator; import com.kingsrook.sampleapp.metadata.SampleMetaDataProvider; @@ -59,12 +55,6 @@ public class SampleJavalinServer { QApplicationJavalinServer javalinServer = new QApplicationJavalinServer(new SampleMetaDataProvider()); - javalinServer.withAdditionalRouteProvider(new SimpleFileSystemDirectoryRouter("/static-site", "static-site/") - .withRouteAuthenticator(new QCodeReference(SimpleRouteAuthenticator.class))); - - javalinServer.withAdditionalRouteProvider(new ProcessBasedRouter("dynamic-site/", "DynamicSiteProcess") - .withRouteAuthenticator(new QCodeReference(SimpleRouteAuthenticator.class))); - javalinServer.start(); } catch(Exception e) diff --git a/qqq-sample-project/src/main/java/com/kingsrook/sampleapp/metadata/SampleJavalinMetaDataProducer.java b/qqq-sample-project/src/main/java/com/kingsrook/sampleapp/metadata/SampleJavalinMetaDataProducer.java new file mode 100644 index 00000000..f65285b7 --- /dev/null +++ b/qqq-sample-project/src/main/java/com/kingsrook/sampleapp/metadata/SampleJavalinMetaDataProducer.java @@ -0,0 +1,66 @@ +/* + * QQQ - Low-code Application Framework for Engineers. + * Copyright (C) 2021-2025. Kingsrook, LLC + * 651 N Broad St Ste 205 # 6917 | Middletown DE 19709 | United States + * contact@kingsrook.com + * https://github.com/Kingsrook/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package com.kingsrook.sampleapp.metadata; + + +import com.kingsrook.qqq.backend.core.exceptions.QException; +import com.kingsrook.qqq.backend.core.model.metadata.MetaDataProducer; +import com.kingsrook.qqq.backend.core.model.metadata.QInstance; +import com.kingsrook.qqq.backend.core.model.metadata.code.QCodeReference; +import com.kingsrook.qqq.backend.javalin.QJavalinMetaData; +import com.kingsrook.qqq.middleware.javalin.metadata.JavalinRouteProviderMetaData; +import com.kingsrook.qqq.middleware.javalin.routeproviders.authentication.SimpleRouteAuthenticator; + + +/******************************************************************************* + ** Meta Data Producer for SampleJavalin + *******************************************************************************/ +public class SampleJavalinMetaDataProducer extends MetaDataProducer +{ + + /******************************************************************************* + ** todo wip - test sub-directories of each other + ** todo wip - another redirect to get rid of the code & state from url + ** todo wip - allow mat-dash to be served at a different path + ** todo wip - get mat-dash committed + *******************************************************************************/ + @Override + public QJavalinMetaData produce(QInstance qInstance) throws QException + { + return (new QJavalinMetaData() + .withRouteProvider(new JavalinRouteProviderMetaData() + .withHostedPath("/public") + .withFileSystemPath("site/public")) + + .withRouteProvider(new JavalinRouteProviderMetaData() + .withRouteAuthenticator(new QCodeReference(SimpleRouteAuthenticator.class)) + .withHostedPath("/private") + .withFileSystemPath("site/private")) + + .withRouteProvider(new JavalinRouteProviderMetaData() + .withRouteAuthenticator(new QCodeReference(SimpleRouteAuthenticator.class)) + .withHostedPath("/dynamic-site/") + .withProcessName(DynamicSiteProcessMetaDataProducer.NAME)) + ); + } + +} diff --git a/qqq-sample-project/src/main/java/com/kingsrook/sampleapp/processes/dynamicsite/DynamicSiteProcessStep.java b/qqq-sample-project/src/main/java/com/kingsrook/sampleapp/processes/dynamicsite/DynamicSiteProcessStep.java index 286e8087..bef228e1 100644 --- a/qqq-sample-project/src/main/java/com/kingsrook/sampleapp/processes/dynamicsite/DynamicSiteProcessStep.java +++ b/qqq-sample-project/src/main/java/com/kingsrook/sampleapp/processes/dynamicsite/DynamicSiteProcessStep.java @@ -43,7 +43,7 @@ public class DynamicSiteProcessStep implements BackendStep ProcessBasedRouterPayload processPayload = runBackendStepInput.getProcessPayload(ProcessBasedRouterPayload.class); String path = processPayload.getPath(); - processPayload.setResponseString("You requested: " + path); + processPayload.setResponseString("You requested: " + path + "(at path-param: " + processPayload.getPathParams().get("pagePath") + ")"); runBackendStepOutput.setProcessPayload(processPayload); } diff --git a/qqq-sample-project/src/main/resources/site/private/index.html b/qqq-sample-project/src/main/resources/site/private/index.html new file mode 100644 index 00000000..104100b8 --- /dev/null +++ b/qqq-sample-project/src/main/resources/site/private/index.html @@ -0,0 +1,30 @@ + + + + +

Welcome to the private site

+ + + + diff --git a/qqq-sample-project/src/main/resources/site/public/index.html b/qqq-sample-project/src/main/resources/site/public/index.html new file mode 100644 index 00000000..768b2c21 --- /dev/null +++ b/qqq-sample-project/src/main/resources/site/public/index.html @@ -0,0 +1,30 @@ + + + + +

Welcome to the public site

+ + + +