From 8e9954c9094ddf9996f021995e39f6a2439fc5e7 Mon Sep 17 00:00:00 2001 From: Darin Kelkhoff Date: Wed, 12 Mar 2025 20:19:07 -0500 Subject: [PATCH] add a ProcessBasedRouter to the sample site, and SimpleRouteAuthenticator --- .../sampleapp/SampleJavalinServer.java | 12 +++- .../DynamicSiteProcessMetaDataProducer.java | 57 +++++++++++++++++++ .../dynamicsite/DynamicSiteProcessStep.java | 50 ++++++++++++++++ .../src/main/resources/static-site/hello.txt | 1 + .../src/main/resources/static-site/index.html | 22 +++++++ 5 files changed, 140 insertions(+), 2 deletions(-) create mode 100644 qqq-sample-project/src/main/java/com/kingsrook/sampleapp/metadata/DynamicSiteProcessMetaDataProducer.java create mode 100644 qqq-sample-project/src/main/java/com/kingsrook/sampleapp/processes/dynamicsite/DynamicSiteProcessStep.java create mode 100644 qqq-sample-project/src/main/resources/static-site/hello.txt create mode 100644 qqq-sample-project/src/main/resources/static-site/index.html 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 da244c99..cbf720a5 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 @@ -22,10 +22,12 @@ package com.kingsrook.sampleapp; -import java.util.List; 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; @@ -56,7 +58,13 @@ public class SampleJavalinServer try { QApplicationJavalinServer javalinServer = new QApplicationJavalinServer(new SampleMetaDataProvider()); - javalinServer.withAdditionalRouteProvider(new SimpleFileSystemDirectoryRouter("/static-site", "/Users/dkelkhoff/tmp/static-site")); + + 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/DynamicSiteProcessMetaDataProducer.java b/qqq-sample-project/src/main/java/com/kingsrook/sampleapp/metadata/DynamicSiteProcessMetaDataProducer.java new file mode 100644 index 00000000..0a1ccd22 --- /dev/null +++ b/qqq-sample-project/src/main/java/com/kingsrook/sampleapp/metadata/DynamicSiteProcessMetaDataProducer.java @@ -0,0 +1,57 @@ +/* + * 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.core.model.metadata.processes.QBackendStepMetaData; +import com.kingsrook.qqq.backend.core.model.metadata.processes.QProcessMetaData; +import com.kingsrook.sampleapp.processes.dynamicsite.DynamicSiteProcessStep; + + +/******************************************************************************* + ** Meta Data Producer for DynamicSiteProcess + *******************************************************************************/ +public class DynamicSiteProcessMetaDataProducer extends MetaDataProducer +{ + public static final String NAME = "DynamicSiteProcess"; + + + + /******************************************************************************* + ** + *******************************************************************************/ + @Override + public QProcessMetaData produce(QInstance qInstance) throws QException + { + return (new QProcessMetaData() + .withName(NAME) + .withStep(new QBackendStepMetaData() + .withName("DynamicSiteProcessStep") + .withCode(new QCodeReference(DynamicSiteProcessStep.class))) + ); + } + +} 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 new file mode 100644 index 00000000..286e8087 --- /dev/null +++ b/qqq-sample-project/src/main/java/com/kingsrook/sampleapp/processes/dynamicsite/DynamicSiteProcessStep.java @@ -0,0 +1,50 @@ +/* + * 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.processes.dynamicsite; + + +import com.kingsrook.qqq.backend.core.actions.processes.BackendStep; +import com.kingsrook.qqq.backend.core.exceptions.QException; +import com.kingsrook.qqq.backend.core.model.actions.processes.RunBackendStepInput; +import com.kingsrook.qqq.backend.core.model.actions.processes.RunBackendStepOutput; +import com.kingsrook.qqq.middleware.javalin.routeproviders.ProcessBasedRouterPayload; + + +/******************************************************************************* + ** + *******************************************************************************/ +public class DynamicSiteProcessStep implements BackendStep +{ + /*************************************************************************** + ** + ***************************************************************************/ + @Override + public void run(RunBackendStepInput runBackendStepInput, RunBackendStepOutput runBackendStepOutput) throws QException + { + ProcessBasedRouterPayload processPayload = runBackendStepInput.getProcessPayload(ProcessBasedRouterPayload.class); + + String path = processPayload.getPath(); + processPayload.setResponseString("You requested: " + path); + runBackendStepOutput.setProcessPayload(processPayload); + } + +} diff --git a/qqq-sample-project/src/main/resources/static-site/hello.txt b/qqq-sample-project/src/main/resources/static-site/hello.txt new file mode 100644 index 00000000..e5b8f9ce --- /dev/null +++ b/qqq-sample-project/src/main/resources/static-site/hello.txt @@ -0,0 +1 @@ +World! \ No newline at end of file diff --git a/qqq-sample-project/src/main/resources/static-site/index.html b/qqq-sample-project/src/main/resources/static-site/index.html new file mode 100644 index 00000000..611391a3 --- /dev/null +++ b/qqq-sample-project/src/main/resources/static-site/index.html @@ -0,0 +1,22 @@ + + +hello world \ No newline at end of file