7Vars = List (String, String)
9data CGIInfo = CGISt Vars -- GET
16get_GET : CGIInfo -> Vars
17get_GET (CGISt g _ _ _ _ _) = g
19get_POST : CGIInfo -> Vars
20get_POST (CGISt _ p _ _ _ _) = p
22get_Cookies : CGIInfo -> Vars
23get_Cookies (CGISt _ _ c _ _ _) = c
25get_UAgent : CGIInfo -> String
26get_UAgent (CGISt _ _ _ a _ _) = a
28get_Headers : CGIInfo -> String
29get_Headers (CGISt _ _ _ _ h _) = h
31get_Output : CGIInfo -> String
32get_Output (CGISt _ _ _ _ _ o) = o
34add_Headers : String -> CGIInfo -> CGIInfo
35add_Headers str (CGISt g p c a h o) = CGISt g p c a (h ++ str) o
37add_Output : String -> CGIInfo -> CGIInfo
38add_Output str (CGISt g p c a h o) = CGISt g p c a h (o ++ str)
41data CGI : Set -> Set where
42 MkCGI : (CGIInfo -> IO (a, CGIInfo)) -> CGI a
44getAction : CGI a -> CGIInfo -> IO (a, CGIInfo)
45getAction (MkCGI act) = act
47instance Monad CGI where {
48 (>>=) (MkCGI f) k = MkCGI (\s => do v <- f s
49 getAction (k (fst v)) (snd v))
51 return v = MkCGI (\s => return (v, s))
54setInfo : CGIInfo -> CGI ()
55setInfo i = MkCGI (\s => return ((), i))
58getInfo = MkCGI (\s => return (s, s))
62lift op = MkCGI (\st => do { x <- op
66output : String -> CGI ()
67output s = do i <- getInfo
68 setInfo (add_Output s i)
72queryVars = do i <- getInfo
77postVars = do i <- getInfo
82cookieVars = do i <- getInfo
83 return (get_Cookies i)
86queryVar : String -> CGI (Maybe String)
87queryVar x = do vs <- queryVars
91getOutput = do i <- getInfo
94getHeaders : CGI String
95getHeaders = do i <- getInfo
96 return (get_Headers i)
100flushHeaders = do o <- getHeaders
105flush = do o <- getOutput
108getVars : List Char -> String -> List (String, String)
109getVars seps query = mapMaybe readVar (split (\x => elem x seps) query)
111 readVar : String -> Maybe (String, String)
112 readVar xs with (split (\x => x == '=') xs)
113 | [k, v] = Just (trim k, trim v)
116getContent : Int -> IO String
117getContent x = getC x "" where
118 getC : Int -> String -> IO String
119 getC 0 acc = return $ rev acc
120 getC n acc = do x <- getChar
121 getC (n-1) (strCons x acc)
124runCGI : CGI a -> IO a
126 clen_in <- getEnv "CONTENT_LENGTH"
127 let clen = prim__strToInt clen_in
128 content <- getContent clen
129 query <- getEnv "QUERY_STRING"
130 cookie <- getEnv "HTTP_COOKIE"
131 agent <- getEnv "HTTP_USER_AGENT"
133 let get_vars = getVars ['&',';'] query
134 let post_vars = getVars ['&'] content
135 let cookies = getVars [';'] cookie
137 p <- getAction prog (CGISt get_vars post_vars cookies agent
138 "Content-type: text/html\n"
140 putStrLn (get_Headers (snd p))
141 putStr (get_Output (snd p))
keysesc to close
- j k
- move down, up
- enter
- open
- esc
- back, or up a level
- 1 2 3 4
- readme, files, commits, refs
- /
- filter
- y
- copy the clone command
- c
- compare the chosen commit with another (or shift-click both)
- ?
- show or hide this list