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