webhooks: parse JSON request bodies

This commit is contained in:
Emery Hemingway 2023-12-26 01:12:30 +02:00
parent 92dbdbe438
commit 0d789361d6
2 changed files with 14 additions and 9 deletions

View File

@ -3,9 +3,9 @@
## An actor for relaying Webhooks.
import std/[asyncdispatch, asynchttpserver, net, sets, strutils, tables, uri]
import std/[asyncdispatch, asynchttpserver, json, net, sets, strutils, tables, uri]
import preserves
import preserves, preserves/jsonhooks
import syndicate, syndicate/[bags, relays]
import syndicate/protocols/[http, transportAddress]
@ -31,12 +31,17 @@ proc toRecord(req: Request; seqnum: BiggestInt; path: seq[string]): HttpRequest
for key, val in decodeQuery(req.url.query):
result.query[Symbol key] =
@[QueryValue(orKind: QueryValueKind.string, string: val)]
if req.body == "":
result.body = RequestBody(orKind: RequestBodyKind.absent)
else:
result.body = RequestBody(
orKind: RequestBodyKind.present,
present: cast[seq[byte]](req.body))
let contentType = req.headers.getOrDefault("content-type")
if req.body.len > 0:
result.body = RequestBody(orKind: RequestBodyKind.present)
case contentType.toString
of "application/json":
var js = parseJson req.body
result.body.present = js.toPreserve
of "application/octet-stream":
result.body.present = cast[seq[byte]](req.body).toPreserve
else:
result.body.present = req.body.toPreserve
proc bootWebhookActor*(turn: var Turn; root: Cap): Actor =
spawn("webhooks", turn) do (turn: var Turn):

View File

@ -1,6 +1,6 @@
# Package
version = "20231214"
version = "20231226"
author = "Emery Hemingway"
description = "Utilites for Syndicated Actors and Synit"
license = "unlicense"