WashNGo-2.12: WASH/CGI/CGITypes.hs
-- © 2001, 2002 Peter Thiemann
-- |Types of outputable data.
module WASH.CGI.CGITypes where
import WASH.CGI.HTMLWrapper (WithHTML)
newtype URL = URL { unURL :: String }
data FileReference =
FileReference { fileReferenceName :: FilePath
-- ^ valid local filename where this file can be accessed
, fileReferenceContentType :: String
, fileReferenceExternalName :: String
}
deriving (Show, Read)
-- |Assumes that file contains correctly formatted HTTP Response starting with
-- Content-Type. Used internally to implement frames.
data ResponseFileReference =
ResponseFileReference FilePath
data Status = Status { statusCode :: Int -- ^ status code
, statusReason :: String -- ^ reason phrase
, statusContent :: Maybe (WithHTML () IO ()) -- ^ more explanation
}
newtype Location = Location URL -- ^ redirection
data FreeForm =
FreeForm { ffName :: String -- ^ internal name
, ffContentType :: String -- ^ MIME type
, ffRawContents :: String -- ^ contents as octet stream
}
data CGIOption
= NoPort -- ^ do not include port number in generated URLs
| AutoPort -- ^ include automatically generated port number in generated URLs (default)
| Port Int -- ^ use this port number in generated URLs
| NoHttps -- ^ do not attempt to detect Https
| AutoHttps -- ^ autodetect Https by checking for port number 443 and env var HTTPS (default)
| FullURL -- ^ generate full URL including scheme, host, and port
| PartialURL -- ^ generate absolute path URL, only (default)
| SessionMode { unSessionMode :: SessionMode }
deriving (Eq, Show)
type CGIOptions = [CGIOption]
data SessionMode
= LogOnly -- ^ generate log in hidden field, full server replay (default)
| StateIDOnly -- ^ generate state id, server threads without replay (only with WSP)
| LogAndState -- ^ log and state id, server threads with replay as fallback (only with WSP)
deriving (Eq, Show, Read, Bounded, Enum)
sessionNeedsLog :: SessionMode -> Bool
sessionNeedsLog LogOnly = True
sessionNeedsLog StateIDOnly = False
sessionNeedsLog LogAndState = True
sessionNeedsState :: SessionMode -> Bool
sessionNeedsState LogOnly = False
sessionNeedsState StateIDOnly = True
sessionNeedsState LogAndState = True