aboutsummaryrefslogtreecommitdiff
path: root/weeb/main.scm
diff options
context:
space:
mode:
authorJakob L. Kreuze2026-07-11 12:50:07 -0400
committerJakob L. Kreuze2026-07-11 15:12:48 -0400
commit31c871da155e2c7ef5e1d825b40702d6ba1c9545 (patch)
tree44e8a8eb2b9d57071c175c4ff963a16b504f6e54 /weeb/main.scm
parent852eb83cd9e78a8428d4a1175ed162b0e92e4681 (diff)
Primordial router
Diffstat (limited to 'weeb/main.scm')
-rw-r--r--weeb/main.scm27
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)

© 2015 - 2026 Jakob L. Kreuze