diff options
Diffstat (limited to 'module/web')
-rw-r--r-- | module/web/http/make-routes.scm | 1 | ||||
-rw-r--r-- | module/web/query.scm | 13 | ||||
-rw-r--r-- | module/web/uri-query.scm | 4 |
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 |