1 ! Copyright (C) 2009-2012 John Benediktsson
2 ! See http://factorcode.org/license.txt for BSD license
4 USING: arrays assocs combinators environment io kernel
5 math.parser regexp sequences splitting strings unicode.case
12 : (query-string) ( string -- assoc )
13 query>assoc [ nip ] assoc-filter [
14 [ [ CHAR: \s = ] trim ]
15 [ dup string? [ 1array ] when ] bi*
18 : parse-get ( -- assoc )
19 "QUERY_STRING" os-env "" or (query-string) ;
21 : (content-type) ( string -- params media/type )
23 [ H{ } clone ] [ first (query-string) ] if-empty
26 : (multipart) ( -- assoc )
27 "multipart unsupported" throw ;
29 : (urlencoded) ( -- assoc )
30 "CONTENT_LENGTH" os-env "0" or string>number
31 read [ "" ] [ "&" append ] if-empty
32 "QUERY_STRING" os-env [ append ] when* (query-string) ;
34 : parse-post ( -- assoc )
35 "CONTENT_TYPE" os-env "" or (content-type) {
36 { "multipart/form-data" [ (multipart) ] }
37 { "application/x-www-form-urlencoded" [ (urlencoded) ] }
43 : <cgi-form> ( -- assoc )
44 "REQUEST_METHOD" os-env "GET" or >upper {
45 { "GET" [ parse-get ] }
46 { "POST" [ parse-post ] }
47 [ "Unknown request method" throw ]
50 : <cgi-simple-form> ( -- assoc )
51 <cgi-form> [ first ] assoc-map ;