Safe Haskell | None |
---|---|
Language | Haskell98 |
functions for serving static files from the disk
- data Browsing
- serveDirectory :: (WebMonad Response m, ServerMonad m, FilterMonad Response m, MonadIO m, MonadPlus m) => Browsing -> [FilePath] -> FilePath -> m Response
- serveFile :: (ServerMonad m, FilterMonad Response m, MonadIO m, MonadPlus m) => (FilePath -> m String) -> FilePath -> m Response
- serveFileFrom :: (ServerMonad m, FilterMonad Response m, MonadIO m, MonadPlus m) => FilePath -> (FilePath -> m String) -> FilePath -> m Response
- type MimeMap = Map String String
- mimeTypes :: MimeMap
- asContentType :: Monad m => String -> FilePath -> m String
- guessContentTypeM :: Monad m => MimeMap -> FilePath -> m String
- defaultIxFiles :: [FilePath]
- fileServe :: (WebMonad Response m, ServerMonad m, FilterMonad Response m, MonadIO m, MonadPlus m) => [FilePath] -> FilePath -> m Response
Serving Functions
see serveDirectory
:: (WebMonad Response m, ServerMonad m, FilterMonad Response m, MonadIO m, MonadPlus m) | |
=> Browsing | allow directory browsing |
-> [FilePath] | index file names, in case the requested path is a directory |
-> FilePath | file/directory to serve |
-> m Response |
Serve files and directories from a directory and its subdirectories using sendFile
.
Usage:
serveDirectory EnableBrowsing ["index.html"] "path/to/files/on/disk"
If the requested path does not match a file or directory on the
disk, then serveDirectory
calls mzero
.
If the requested path is a file then the file is served normally.
If the requested path is a directory, then the result depends on what the first two arguments to the function are.
The first argument controls whether directory browsing is enabled.
The second argument is a list of index files (such as index.html).
When a directory is requested, serveDirectory
will first try to
find one of the index files (in the order they are listed). If that
fails, it will show a directory listing if EnableBrowsing
is set,
otherwise it will return forbidden "Directory index forbidden"
.
Here is an explicit list of all the possible outcomes when the argument is a (valid) directory:
DisableBrowsing
, empty index file list
This will always return, forbidden "Directory index forbidden"
DisableBrowsing
, non-empty index file list
- If an index file is found it will be shown.
- Otherwise returns, forbidden "Directory index forbidden"
EnableBrowsing
, empty index file list
Always shows a directory index.
EnableBrowsing
, non-empty index file list
- If an index file is found it will be shown
- Otherwise shows a directory index
see also: defaultIxFiles
, serveFile
:: (ServerMonad m, FilterMonad Response m, MonadIO m, MonadPlus m) | |
=> (FilePath -> m String) | function for determining content-type of file. Typically |
-> FilePath | path to the file to serve |
-> m Response |
Serve a single, specified file. The name of the file being served is specified explicity. It is not derived automatically from the Request
url.
example 1:
Serve as a specific content-type:
serveFile (asContentType "image/jpeg") "/srv/data/image.jpg"
example 2:
Serve guessing the content-type from the extension:
serveFile (guessContentTypeM mimeTypes) "/srv/data/image.jpg"
If the specified path does not exist or is not a file, this function will return mzero
.
WARNING: No security checks are performed.
NOTE: alias for serveFileUsing
filePathSendFile
:: (ServerMonad m, FilterMonad Response m, MonadIO m, MonadPlus m) | |
=> FilePath | directory wherein served files must be contained |
-> (FilePath -> m String) | function for determining content-type of file. Typically |
-> FilePath | path to the file to serve |
-> m Response |
Like serveFile
, but uses combineSafe
to prevent directory
traversal attacks when the path to the file is supplied by the user.
Content-Type / Mime-Type
Ready collection of common mime types. Except for the first two entries, the mappings come from an Ubuntu 8.04 /etc/mime.types file.
returns a specific content type, completely ignoring the FilePath
argument.
Use this with serveFile
if you want to explicitly specify the
content-type.
see also: guessContentTypeM
, serveFile
guessContentTypeM :: Monad m => MimeMap -> FilePath -> m String Source
try to guess the content-type of a file based on its extension
defaults to "application/octet-stream" if no match was found.
Useful as an argument to serveFile
see also: guessContentType
, serveFile
Index Files
defaultIxFiles :: [FilePath] Source
a list of common index files. Specifically: index.html
, index.xml
, index.gif
Typically used as an argument to serveDiretory
.
Deprecated
:: (WebMonad Response m, ServerMonad m, FilterMonad Response m, MonadIO m, MonadPlus m) | |
=> [FilePath] | index file names, in case the requested path is a directory |
-> FilePath | file/directory to serve |
-> m Response |
Deprecated: use serveDirectory instead.
Serve files from a directory and its subdirectories using sendFile
.
Usage:
fileServe ["index.html"] "path/to/files/on/disk"
fileServe
does not support directory browsing. See serveDirectory
DEPRECATED: use serveDirectory
instead.
Note:
The list of index files ["index.html"]
is only used to determine what file to show if the user requests a directory. You *do not* need to explicitly list all the files you want to serve.