diff --git a/server/agent.nim b/server/agent.nim
new file mode 100644
index 0000000..db5c63f
--- /dev/null
+++ b/server/agent.nim
@@ -0,0 +1,19 @@
+import prologue
+
+# /agent/register
+proc agentRegister*(ctx: Context) {.async.} =
+
+ let body: JsonNode = ctx.request.body().parseJson()
+ echo body
+
+ resp jsonResponse(body, Http200)
+
+
+
+# /agent/{uuid}/tasks
+proc agentTasks*(ctx: Context) {.async.} =
+ resp "
Agent Tasks
"
+
+# /agent/{uuid}/results
+proc agentResults*(ctx: Context) {.async.} =
+ resp "Agent Results
"
diff --git a/server/client.nim b/server/client.nim
new file mode 100644
index 0000000..b0a8e52
--- /dev/null
+++ b/server/client.nim
@@ -0,0 +1,52 @@
+import prologue
+import logging
+import uuids
+import strformat
+import std/asynchttpserver
+
+proc hello*(ctx: Context) {.async.} =
+ resp "Test"
+
+# /client/listener
+proc listenerList*(ctx: Context) {.async.} =
+
+ # JSON Response
+ let response = %*{"message": "Ok"}
+ resp jsonResponse(response)
+
+# /client/listener/create
+proc listenerCreate*(ctx: Context) {.async.} =
+
+ # Handle POST parameters (Port, IP)
+
+ # Create listener with random UUID
+ let
+ name: string = $genUUID()
+ listenerSettings = newSettings(
+ appName = name,
+ debug = false,
+ address = "127.0.0.1",
+ port = Port(443),
+ secretKey = name
+ )
+ var listener = newApp(settings=listenerSettings)
+
+ proc listenerHandler(req: NativeRequest): Future[void] {.gcsafe.} =
+ req.respond(Http200, name)
+
+ discard listener.serveAsync(listenerHandler)
+ logging.info(fmt"Listener {name} created.")
+
+ resp fmt"Listener {name} created.
Listening on {listenerSettings.address}:{listenerSettings.port}"
+
+# /client/listener/{uuid}/delete
+proc listenerDelete*(ctx: Context) {.async.} =
+ resp "Listener Deleted
"
+
+# /client/agent
+proc agentList*(ctx: Context) {.async.} =
+ resp "Agent List
"
+
+# /client/agent/build
+proc agentCreate*(ctx: Context) {.async.} =
+ resp "Agent Create
"
diff --git a/server/config.nims b/server/config.nims
new file mode 100644
index 0000000..e18a816
--- /dev/null
+++ b/server/config.nims
@@ -0,0 +1,3 @@
+# Define command line switches in this file
+--define:usestd
+--threads:on
\ No newline at end of file
diff --git a/server/index.nim b/server/index.nim
new file mode 100644
index 0000000..f750699
--- /dev/null
+++ b/server/index.nim
@@ -0,0 +1,9 @@
+import prologue
+
+# /
+proc root*(ctx: Context) {.async.} =
+ resp "Hello, World!
"
+
+# /auth
+proc auth*(ctx: Context) {.async.} =
+ resp "Hello, Auth!
"
diff --git a/server/listener.nim b/server/listener.nim
new file mode 100644
index 0000000..e69de29
diff --git a/server/server.nim b/server/server.nim
new file mode 100644
index 0000000..4848888
--- /dev/null
+++ b/server/server.nim
@@ -0,0 +1,20 @@
+import prologue
+import asyncdispatch
+
+import ./urls
+
+let
+ env = loadPrologueEnv(".env")
+ settings = newSettings(
+ appName = env.getOrDefault("appName", "Prologue"),
+ debug = env.getOrDefault("debug", true),
+ port = Port(env.getOrDefault("port", 8080)),
+ secretKey = env.getOrDefault("secretKey", "")
+ )
+var app = newApp(settings = settings)
+
+app.addRoute(urls.indexPatterns, "/")
+app.addRoute(urls.clientPatterns, "/client")
+app.addRoute(urls.agentPatterns, "/agent")
+
+waitFor app.runAsync()
\ No newline at end of file
diff --git a/server/urls.nim b/server/urls.nim
new file mode 100644
index 0000000..ee32ff4
--- /dev/null
+++ b/server/urls.nim
@@ -0,0 +1,28 @@
+import prologue
+
+import ./[index, client, agent]
+
+let indexPatterns* = @[
+ pattern("/", index.root, @[HttpGet]),
+ pattern("/auth", index.auth, @[HttpPost])
+]
+
+#[
+ Client Interfaces
+]#
+let clientPatterns* = @[
+ pattern("/listener/", client.listenerList, @[HttpGet]),
+ pattern("/listener/create", client.listenerCreate, @[HttpPost, HttpGet]),
+ pattern("/listener/{uuid}/delete", client.listenerDelete, @[HttpGet]),
+ pattern("/agent/", client.agentList, @[HttpGet]),
+ pattern("/agent/create", client.agentCreate, @[HttpPost])
+]
+
+#[
+ Agent API
+]#
+let agentPatterns* = @[
+ pattern("/register", agent.agentRegister, @[HttpPost]),
+ pattern("/{uuid}/tasks", agent.agentTasks, @[HttpGet, HttpPost]),
+ pattern("/{uuid}/results", agent.agentResults, @[HttpGet, HttpPost])
+]
\ No newline at end of file