cl-chat-web/live-chat-cgi.lisp
2024-10-11 16:45:22 -04:00

33 lines
1.2 KiB
Common Lisp

(in-package #:live-chat-cgi)
(defun print-http-header ()
"Print standard HTTP headers for CGI."
(format t "Content-Type: text/html~%~%"))
(defun cgi-handler ()
"Handle CGI requests and dispatch them to the appropriate logic."
(let ((request-method (string-downcase (or (getenv "REQUEST_METHOD") ""))))
(print-http-header)
(cond
((string= request-method "get")
(let ((path (getenv "PATH_INFO")))
(cond
((string= path "/chat-messages")
(render-chat-messages))
((string= path "/")
(render-chat-ui))
(t
(format t "Not Found")))))
((string= request-method "post")
;; Read the POST data
(let ((input (read-line *standard-input*)))
(when (and input (not (string= input "")))
(let ((params (split-sequence:split-sequence #\& input)))
(dolist (param params)
(let* ((pair (split-sequence:split-sequence #\= param))
(key (first pair))
(value (second pair)))
(when (string= key "message")
(handle-post-message value))))))
(render-chat-messages))))))