diff --git a/java/lc-mecha-http-server/src/main/java/lc/mecha/http/server/PrefixedHandler.java b/java/lc-mecha-http-server/src/main/java/lc/mecha/http/server/PrefixedHandler.java
index 63bd5f59eab0bf33ec29742501374adcda56a247..9691cc164154336344e5bae8c2f390f05675e416 100644
--- a/java/lc-mecha-http-server/src/main/java/lc/mecha/http/server/PrefixedHandler.java
+++ b/java/lc-mecha-http-server/src/main/java/lc/mecha/http/server/PrefixedHandler.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2004-2017, by Alex Leigh.
+ * Copyright (c) 2004-2023, by Alex Leigh.
* All rights reserved.
*
* THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE
@@ -19,7 +19,8 @@ import java.util.Set;
/**
* This handler implements a WebHandler
that will only execute
- * if the requested path starts with the associated prefix path.
+ * if the requested path starts with the associated prefix path. More than one path can be associated
+ * with the handler.
*
* Note: It is not particularly well performing to use a lot of these; in the case where you need
* more than 20 or 30 in a single WebServer
it may be better to implement
diff --git a/java/lc-mecha-http-server/src/main/java/lc/mecha/http/server/WebPipeline.java b/java/lc-mecha-http-server/src/main/java/lc/mecha/http/server/WebPipeline.java
index 4b91fe9979eb91312b3990820649b5d1100a3d28..7a5ee36f9b7c276294281cb8cc53f6fe39a23dcf 100644
--- a/java/lc-mecha-http-server/src/main/java/lc/mecha/http/server/WebPipeline.java
+++ b/java/lc-mecha-http-server/src/main/java/lc/mecha/http/server/WebPipeline.java
@@ -64,7 +64,7 @@ public final class WebPipeline extends AbstractHandler {
try {
servicePipeline.send(KEY_SERVICE, wr);
} catch (Throwable e) {
- logger.debug("Handler threw", e);
+ logger.warn("Handler threw", e);
try {
httpServletResponse.sendError(500);
} catch (IOException e1) {
diff --git a/java/lc-obj-svc/src/main/java/lc/obj/svc/BucketHandler.java b/java/lc-obj-svc/src/main/java/lc/obj/svc/BucketHandler.java
new file mode 100644
index 0000000000000000000000000000000000000000..80c91d7a92ff32231b6d2fd85c6d5ea13e5544ab
--- /dev/null
+++ b/java/lc-obj-svc/src/main/java/lc/obj/svc/BucketHandler.java
@@ -0,0 +1,31 @@
+package lc.obj.svc;
+
+import lc.esp.engine.AuthenticatedHandler;
+import lc.esp.engine.Directory;
+import lc.mecha.fabric.HandlerStatus;
+import lc.mecha.http.server.WebTransaction;
+import lc.mecha.log.MechaLogger;
+import lc.mecha.log.MechaLoggerFactory;
+
+import java.util.Set;
+
+/**
+ * Implements the handler for root bucket interactions, including creating and deleting buckets.
+ *
+ * @author Alex Leigh
+ * @since mk1
+ */
+public class BucketHandler extends AuthenticatedHandler {
+ private static final MechaLogger logger = MechaLoggerFactory.getLogger(BucketHandler.class);
+
+ public BucketHandler(Set/
is the
+ * expected path.
+ *
+ * @param pathPrefix The string path prefix.
+ */
+ public ObjectHandlerRouter(String pathPrefix) {
+ super(Set.of(pathPrefix));
+ }
+
+ @Override
+ public HandlerStatus handlePrefixedWebRequest(WebTransaction request) throws Throwable {
+ logger.info("Router received request: {}", request);
+
+ String pathInfo = request.getPathInfo();
+ if (pathInfo.equals("")) {
+ logger.info("root handler");
+ } else {
+ // TODO: Send a proper error?
+ request.httpServletResponse.setStatus(404);
+ request.httpServletResponse.getWriter().println("Not Found");
+ }
+
+ return HandlerStatus.BREAK;
+ }
+}
diff --git a/java/lc-obj-svc/src/main/java/lc/obj/svc/ObjectService.java b/java/lc-obj-svc/src/main/java/lc/obj/svc/ObjectService.java
index 3f23a73184f3f58f305d8863e2631bc9365431ad..07d899fbcb68f5f1735d17b0e88a2a1ddb2d86bd 100644
--- a/java/lc-obj-svc/src/main/java/lc/obj/svc/ObjectService.java
+++ b/java/lc-obj-svc/src/main/java/lc/obj/svc/ObjectService.java
@@ -2,9 +2,16 @@ package lc.obj.svc;
import lc.esp.engine.ESPEngine;
+/**
+ * Implementation of the OBJECT API service.
+ *
+ * @author Alex Leigh
+ * @since mk1
+ */
public class ObjectService {
public static void main(String[] args) throws Exception {
ESPEngine engine = new ESPEngine();
+ engine.register(new ObjectHandlerRouter("/"));
engine.runDangerously();
}
}
diff --git a/java/lc-obj/build.gradle b/java/lc-obj/build.gradle
index ff662a854083bb4e1d24830efb47badb9d0e7a00..872bedaf646ddd30dcca8ead28f20b7876868d68 100644
--- a/java/lc-obj/build.gradle
+++ b/java/lc-obj/build.gradle
@@ -12,6 +12,7 @@ repositories {
dependencies {
api project(':lc-esp-engine')
+ api project(':lc-mecha-db-mysql')
testImplementation platform('org.junit:junit-bom:5.9.1')
testImplementation 'org.junit.jupiter:junit-jupiter'
}
diff --git a/java/lc-obj/openapi.yaml b/java/lc-obj/openapi.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..e52e1d53ee94a9dcd177a487c5154f44015f22fb
--- /dev/null
+++ b/java/lc-obj/openapi.yaml
@@ -0,0 +1,35 @@
+openapi: 3.0.3
+info:
+ title: Object Service API mk1
+ description: Object Service API mk1
+ version: 1.0.0
+servers:
+ - url: https://leigh-co.com/api/obj/v1
+ - url: http://localhost:8080/api/obj/v1
+components:
+ securitySchemes:
+ BasicAuth:
+ scheme: basic
+ type: http
+paths:
+ /:
+ put:
+ description: Create a new bucket.
+ security:
+ - BasicAuth: [ ]
+ responses:
+ '200':
+ description: OK
+ content:
+ application/json:
+ examples:
+ Success:
+ value: '{"router":["gw0.gdn.leigh-co.com","gw3.gdn.leigh-co.com"]}'
+ NOP:
+ value: '{"router":[]}'
+ '500':
+ description: Operation failed. An internal service error has occured.
+ '404':
+ description: Authorization failed.
+ '422':
+ description: A bucket by that name already exists.
\ No newline at end of file
diff --git a/java/lc-obj/src/main/java/lc/obj/ObjectStore.java b/java/lc-obj/src/main/java/lc/obj/ObjectStore.java
new file mode 100644
index 0000000000000000000000000000000000000000..959d6df0561e3f1cda35c3ddfc4b1762e195a5fc
--- /dev/null
+++ b/java/lc-obj/src/main/java/lc/obj/ObjectStore.java
@@ -0,0 +1,5 @@
+package lc.obj;
+
+public class ObjectStore {
+
+}