web/response, work in progress: provide set-cookie action handler (and default action)

This commit is contained in:
Helmut Merz 2024-08-30 16:22:33 +02:00
parent 487279bc1b
commit d934928a28

View file

@ -13,13 +13,22 @@
(in-package :scopes/web/response) (in-package :scopes/web/response)
;;;; server interaction - receive response message from action processing chain ;;;; server interaction - receive response message from action processing chain
;;; predefined action handlers / default actions
(defun store-msg (ia msg) (defun store-msg (ia msg)
(push msg (messages ia))) (push msg (messages ia)))
(defun set-cookie (ia msg)
(let ((headers (headers (response ia))))
(setf headers
(cons :set-cookie (cons (render-cookie (message:data msg)) headers)))
headers))
(defvar *interaction-default-actions* (defvar *interaction-default-actions*
;(list (core::define-action nil #'store-msg))) (core:define-actions '(nil store-msg)
(core:define-actions (list nil #'store-msg))) '((:web :set-cookie) set-cookie)))
;;; interaction class and methods
(defclass interaction (core:base-context) (defclass interaction (core:base-context)
((core:default-actions :initform *interaction-default-actions*) ((core:default-actions :initform *interaction-default-actions*)
@ -29,19 +38,8 @@
(defmethod print-object ((ia interaction) s) (defmethod print-object ((ia interaction) s)
(shape:print-fields ia s 'messages)) (shape:print-fields ia s 'messages))
(defun add-cookies (iact) (defun render-cookie (cdata)
(let ((headers (resp (response iact)))) "DEMO=1234567_value; Path=/") ;"; Domain=testing.cyberscopes.org")
(dolist (cdata (cookie-data iact))
(setf headers
(cons :set-cookie (cons (render-cookie iact cdata) headers))))
headers))
(defun render-cookie (iact cdata)
"DEMO=1234567; Path=/; Domain=testing.cyberscopes.org")
(defun cookie-data (ia)
(let ((c nil))
c))
;;;; response definitions ;;;; response definitions
@ -93,7 +91,7 @@
(defun render (resp iact) (defun render (resp iact)
; pre-process special message heads, e.g. (:system :error ...) ; pre-process special message heads, e.g. (:system :error ...)
; => set status code, provide additional data elements ; => set status code, provide additional data elements
; set additional headers ; set additional headers (<- will be done by interaction)
(let ((headers (make-headers resp)) (let ((headers (make-headers resp))
(rcode 200)) (rcode 200))
#'(lambda (responder) #'(lambda (responder)