wai-middleware-static-0.2.0: WAI middleware that intercepts requests to static files.

Safe HaskellSafe-Infered




Serve static files, subject to a policy that can filter or modify incoming URIs. The flow is:

incoming request URI ==> policies ==> exists? ==> respond

If any of the polices fail (return Nothing), or the file doesn't exist, then the middleware gives up and calls the inner application. If the file is found, the middleware chooses a content type based on the file extension and returns the file contents as the response.



static :: MiddlewareSource

Serve static files out of the application root (current directory). If file is found, it is streamed to the client and no further middleware is run.

staticPolicy :: Policy -> MiddlewareSource

Serve static files subject to a Policy


type Policy = String -> Maybe StringSource

Take an incoming URI and optionally modify or filter it. The result will be treated as a filepath.

(>->) :: Policy -> Policy -> PolicySource

Combine two policies. They are run from left to right.

addBase :: String -> PolicySource

Add a base path to the URI

 staticPolicy (addBase "/home/user/files")

GET "foo/bar" looks for "/home/user/files/foo/bar"

addSlash :: PolicySource

Add an initial slash to to the URI, if not already present.

 staticPolicy addSlash

GET "foo/bar" looks for "/foo/bar"

noDots :: PolicySource

Filter URIs containing ".."

only :: [(String, String)] -> PolicySource

Filter any URIs not in a specific list, mapping to a filepath.

 staticPolicy (only [("foo/bar", "/home/user/files/bar")])

GET "foo/bar" looks for "/home/user/files/bar" GET "baz/bar" doesn't match anything