From 288563d37393faa108ca6e2722c049677f2d372c Mon Sep 17 00:00:00 2001 From: Helmut Merz Date: Mon, 24 Jun 2024 09:28:04 +0200 Subject: [PATCH] web/client: convert data to alist for dexador (url-encoded post-data) --- test/test-web.lisp | 2 +- web/client.lisp | 11 +++++++++-- web/server.lisp | 8 ++++++-- 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/test/test-web.lisp b/test/test-web.lisp index 8a3fba7..794a754 100644 --- a/test/test-web.lisp +++ b/test/test-web.lisp @@ -39,5 +39,5 @@ (has-prefix (client:get-page client msg) "Hello Fileserver!"))) (deftest test-message (client) - (let ((msg (message:simple-message '(:test :data)))) + (let ((msg (message:simple-message '(:test :data) '(:info "test data")))) (== (client:send-message client msg) "Hello World!"))) diff --git a/web/client.lisp b/web/client.lisp index ed902dc..ccd2ef0 100644 --- a/web/client.lisp +++ b/web/client.lisp @@ -4,7 +4,8 @@ (:use :common-lisp) (:local-nicknames (:config :scopes/config) (:core :scopes/core) - (:message :scopes/core/message)) + (:message :scopes/core/message) + (:alx :alexandria)) (:export #:config #:base-url #:api-path #:doc-path #:get-page #:send-message)) @@ -27,8 +28,14 @@ (defun send-message (ctx msg) (let* ((cfg (core:config ctx)) (url (str:concat (base-url cfg) (api-path cfg) (msgpath msg)))) - (dex:get url))) + (dex:post url :content (data-as-alist (message:data msg))))) (defun msgpath (msg) (let ((lst (loop for p in (message:head-as-list msg) when p collect p))) (str:join "/" (mapcar #'string-downcase lst)))) + +(defun data-as-alist (data) + (if (symbolp (car data)) ; seems to be a property list + (mapcar #'(lambda (p) (cons (string-downcase (car p)) (cdr p))) + (alx:plist-alist data)) + data)) diff --git a/web/server.lisp b/web/server.lisp index 1962a4c..edad529 100644 --- a/web/server.lisp +++ b/web/server.lisp @@ -42,8 +42,12 @@ (lack/component:call file-app env))) (defun message-handler (ctx env) - (print env) - '(200 (:content-type "text/plain") ("Hello World!"))) + ;(print env) + ;(print (read-line (getf env :raw-body))) + (let ((head (getf env :message-head)) + (data (read-line (getf env :raw-body)))) + (format t "~&message head ~s, data ~s~%" head data) + '(200 (:content-type "text/plain") ("Hello World!")))) (defun select-app (ctx env) (let ((path (cdr (str:split "/" (getf env :path-info)))))