aboutsummaryrefslogtreecommitdiff
path: root/module/web
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--module/web/http/make-routes.scm1
-rw-r--r--module/web/query.scm13
-rw-r--r--module/web/uri-query.scm4
3 files changed, 13 insertions, 5 deletions
diff --git a/module/web/http/make-routes.scm b/module/web/http/make-routes.scm
index 11f7dfb4..105bba50 100644
--- a/module/web/http/make-routes.scm
+++ b/module/web/http/make-routes.scm
@@ -102,6 +102,7 @@
(append
((@ (web query) parse-query) r:query)
+ ;; TODO what's happening here?
(let ((content-type (assoc-ref r:headers 'content-type)))
((@ (hnh util) when) content-type
(let ((type (car content-type))
diff --git a/module/web/query.scm b/module/web/query.scm
index e5057a24..a70903bc 100644
--- a/module/web/query.scm
+++ b/module/web/query.scm
@@ -8,9 +8,12 @@
(fold (lambda (str list)
;; only split on the first equal.
;; Does HTTP allow multiple equal signs in a data field?
- ;; NOTE that this fails if str lacks an equal sign.
- (define idx (string-index str #\=))
- (define key (uri-decode (substring str 0 idx) encoding: encoding))
- (define val (uri-decode (substring str (1+ idx)) encoding: encoding))
- (cons* (-> key string->symbol symbol->keyword) val list))
+ (let* ((key val
+ (cond ((string-index str #\=)
+ => (lambda (idx)
+ (values (uri-decode (substring str 0 idx) encoding: encoding)
+ (uri-decode (substring str (1+ idx)) encoding: encoding))))
+ (else (let ((v (uri-decode str encoding: encoding)))
+ (values v v))))))
+ (cons* (-> key string->symbol symbol->keyword) val list)))
'() (string-split query-string #\&))))
diff --git a/module/web/uri-query.scm b/module/web/uri-query.scm
index 40d89b11..56f3aef9 100644
--- a/module/web/uri-query.scm
+++ b/module/web/uri-query.scm
@@ -3,6 +3,10 @@
:use-module ((web uri) :select (uri-encode))
)
+;; TODO why this format for values?
+;; TODO why aren't we encoding the keys?
+;; TODO why isn't this in the same module as `parse-query'?
+;; TODO why isn't this on the same format as `parse-query'?
(define-public (encode-query-parameters parameters)
(string-join