Experiment with Listener Creation
This commit is contained in:
19
server/agent.nim
Normal file
19
server/agent.nim
Normal file
@@ -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 "<h1>Agent Tasks</h1>"
|
||||||
|
|
||||||
|
# /agent/{uuid}/results
|
||||||
|
proc agentResults*(ctx: Context) {.async.} =
|
||||||
|
resp "<h1>Agent Results</h1>"
|
||||||
52
server/client.nim
Normal file
52
server/client.nim
Normal file
@@ -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.<br>Listening on <a href=http://{listenerSettings.address}:{listenerSettings.port}>{listenerSettings.address}:{listenerSettings.port}</a>"
|
||||||
|
|
||||||
|
# /client/listener/{uuid}/delete
|
||||||
|
proc listenerDelete*(ctx: Context) {.async.} =
|
||||||
|
resp "<h2>Listener Deleted</h2>"
|
||||||
|
|
||||||
|
# /client/agent
|
||||||
|
proc agentList*(ctx: Context) {.async.} =
|
||||||
|
resp "<h1>Agent List</h1>"
|
||||||
|
|
||||||
|
# /client/agent/build
|
||||||
|
proc agentCreate*(ctx: Context) {.async.} =
|
||||||
|
resp "<h1>Agent Create</h1>"
|
||||||
3
server/config.nims
Normal file
3
server/config.nims
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
# Define command line switches in this file
|
||||||
|
--define:usestd
|
||||||
|
--threads:on
|
||||||
9
server/index.nim
Normal file
9
server/index.nim
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
import prologue
|
||||||
|
|
||||||
|
# /
|
||||||
|
proc root*(ctx: Context) {.async.} =
|
||||||
|
resp "<h1>Hello, World!</h1>"
|
||||||
|
|
||||||
|
# /auth
|
||||||
|
proc auth*(ctx: Context) {.async.} =
|
||||||
|
resp "<h1>Hello, Auth!</h1>"
|
||||||
0
server/listener.nim
Normal file
0
server/listener.nim
Normal file
20
server/server.nim
Normal file
20
server/server.nim
Normal file
@@ -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()
|
||||||
28
server/urls.nim
Normal file
28
server/urls.nim
Normal file
@@ -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])
|
||||||
|
]
|
||||||
Reference in New Issue
Block a user