Copyright | (c) Bjorn Bringert 2006 |
---|---|
License | BSD-style |
Maintainer | John Chee <cheecheeo@gmail.com> |
Stability | experimental |
Portability | non-portable |
Safe Haskell | Safe-Inferred |
Language | Haskell98 |
An implementation of the program side of the CGI protocol.
- data CGIRequest = CGIRequest {
- cgiVars :: Map String String
- cgiInputs :: [(String, Input)]
- cgiRequestBody :: ByteString
- data Input = Input {}
- data CGIResult
- type Headers = [(HeaderName, String)]
- newtype HeaderName :: * = HeaderName String
- hRunCGI :: MonadIO m => [(String, String)] -> Handle -> Handle -> (CGIRequest -> m (Headers, CGIResult)) -> m ()
- runCGIEnvFPS :: Monad m => [(String, String)] -> ByteString -> (CGIRequest -> m (Headers, CGIResult)) -> m ByteString
- decodeInput :: [(String, String)] -> ByteString -> ([(String, Input)], ByteString)
- takeInput :: [(String, String)] -> ByteString -> ByteString
- getCGIVars :: MonadIO m => m [(String, String)]
- logCGI :: MonadIO m => String -> m ()
- formEncode :: [(String, String)] -> String
- urlEncode :: String -> String
- formDecode :: String -> [(String, String)]
- urlDecode :: String -> String
- maybeRead :: Read a => String -> Maybe a
- replace :: Eq a => a -> a -> [a] -> [a]
CGI request
data CGIRequest Source
The input to a CGI action.
CGIRequest | |
|
The value of an input parameter, and some metadata.
CGI response
The result of a CGI program.
type Headers = [(HeaderName, String)]
HTTP headers.
newtype HeaderName :: *
A string with case insensitive equality and comparisons.
Running CGI actions
:: MonadIO m | |
=> [(String, String)] | CGI environment variables, e.g. from |
-> Handle | Handle that input will be read from, e.g. |
-> Handle | Handle that output will be written to, e.g. |
-> (CGIRequest -> m (Headers, CGIResult)) | CGI action |
-> m () |
Runs a CGI action in a given environment. Uses Handles for input and output.
:: Monad m | |
=> [(String, String)] | CGI environment variables. |
-> ByteString | Request body. |
-> (CGIRequest -> m (Headers, CGIResult)) | CGI action. |
-> m ByteString | Response (headers and content). |
Runs a CGI action in a given environment. Uses lazy ByteStrings for input and output.
Inputs
:: [(String, String)] | CGI environment variables. |
-> ByteString | Request body. |
-> ([(String, Input)], ByteString) | A list of input variables and values, and the request body if it was not interpreted. |
Gets and decodes the input according to the request method and the content-type.
:: [(String, String)] | CGI environment variables. |
-> ByteString | Request body. |
-> ByteString | CONTENT_LENGTH bytes from the request body, or the empty string if there is no CONTENT_LENGTH. |
Takes the right number of bytes from the input.
Environment variables
getCGIVars :: MonadIO m => m [(String, String)] Source
Gets the values of all CGI variables from the program environment.
Logging
logCGI :: MonadIO m => String -> m () Source
Logs some message using the server's logging facility. FIXME: does this have to be more general to support FastCGI etc? Maybe we should store log messages in the CGIState?
URL encoding
formEncode :: [(String, String)] -> String Source
Formats name-value pairs as application/x-www-form-urlencoded.
urlEncode :: String -> String Source
Converts a single value to the application/x-www-form-urlencoded encoding.
formDecode :: String -> [(String, String)] Source
Gets the name-value pairs from application/x-www-form-urlencoded data.
urlDecode :: String -> String Source
Converts a single value from the application/x-www-form-urlencoded encoding.