diff options
Diffstat (limited to 'weeb/main.scm')
| -rw-r--r-- | weeb/main.scm | 27 |
1 files changed, 21 insertions, 6 deletions
diff --git a/weeb/main.scm b/weeb/main.scm index 2fc6df1..4c7e69f 100644 --- a/weeb/main.scm +++ b/weeb/main.scm @@ -20,16 +20,18 @@ #:use-module (ice-9 match) #:use-module (ice-9 regex) #:use-module (srfi srfi-1) + #:use-module (srfi srfi-11) ;; Temporary, probably #:use-module (weeb fcgi) #:use-module (weeb request) + #:use-module (weeb router) #:use-module (weeb struct) #:export (weeb main)) (define (receive-request) (define string->method (match-lambda - (("GET" 'GET) - ("POST" 'POST)))) + ("GET" 'GET) + ("POST" 'POST))) ;; According to RFC 9110, header names must be treated as case-insensitive. (define headers (filter-map @@ -44,13 +46,26 @@ ,(match:substring match-object 2)) #f))) (environ))) - (let* ((method (getenv "REQUEST_METHOD")) + (let* ((method (string->method (getenv "REQUEST_METHOD"))) (uri (getenv "REQUEST_URI"))) (make-struct <request> method uri '() headers (fcgi-read)))) +(define (show-headers request) + ;; TODO: Return a response object. + (with-accessors (request headers) + (fcgi-display "Content-type: text/html\r\n\r\n") + (fcgi-display (format #f "~a" headers)))) + +(define (show-message request message) + (fcgi-display (format #f "~a" message))) + +(define-router router + ("/headers" (GET) show-headers) + ("/echo/:message:" (GET) show-message)) + (define (run-server) (while (zero? (fcgi-accept)) (let ((request (receive-request))) - (with-accessors (request method uri headers body) - (fcgi-display "Content-type: text/html\r\n\r\n") - (fcgi-display (format #f "~a" headers)))))) + (iter-routes request router)))) + +(run-server) |