hack2-contrib-2013.6.15: src/Hack2/Contrib/Middleware/Static.hs
{-# LANGUAGE OverloadedStrings #-}
-- | Stolen from rack:
-- The Rack::Static middleware intercepts requests for static files
-- (javascript files, images, stylesheets, etc) based on the url prefixes
-- passed in the options, and serves them using a Rack::File object. This
-- allows a Rack stack to serve both static and dynamic content.
module Hack2.Contrib.Middleware.Static (static) where
import Data.Maybe
import Hack2
import Hack2.Contrib.Middleware.File (file)
import Hack2.Contrib.Utils
import Data.List (find, isPrefixOf)
import Air.Light
import Prelude hiding ((.), (^), (>), (+))
import qualified Data.ByteString.Char8 as B
import Data.ByteString.Char8 (ByteString)
import Air.Extra (u2b)
static :: Maybe ByteString -> [ByteString] -> Middleware
static root urls app = \env -> do
let my_urls = if urls.null then ["/favicon.ico"] else urls
let path = env.path_info .as_string (unescape_uri > u2b)
let can_serve = my_urls.find ( `B.isPrefixOf` path ) .isJust
if can_serve
then do
-- putStrLn "can serve"
file root app env
else do
-- putStrLn "not valid prefix"
app env