on master help sign in
Merge remote branch 'greg/master'
commitc031ac995041263138030710b16ca39a762cd82b authorMichael Snoyman <michael@snoyman.com> dateTue 1 Mar 2011, 22:03 (16 years ago) parent2cee2db10ab8bb
2 files changed+37−1
Network/Wai/Middleware/Rewrite.hs+34 wai-extra.cabal+3−1
Network/Wai/Middleware/Rewrite.hsnew file+34
@@ -0,0 +1,34 @@
1+{-# LANGUAGE OverloadedStrings #-}
2+module Network.Wai.Middleware.Rewrite
3+ ( rewrite, autoHtmlRewrite
4+ ) where
5+
6+import Network.Wai
7+import qualified Data.ByteString.Char8 as B
8+import System.Directory (doesFileExist)
9+import Control.Monad.IO.Class (liftIO)
10+import Web.Routes.Base (decodePathInfo)
11+
12+-- | rewrite based on your own conversion rules
13+-- Example usage: rewrite (autoHtmlRewrite "static")
14+rewrite :: (B.ByteString -> IO B.ByteString) -> Middleware
15+rewrite convert app req = do
16+ newPathInfo <- liftIO $ convert $ pathInfo req
17+ app req { pathInfo = newPathInfo }
18+
19+-- | example rewriter
20+-- implements 2 rules for static html re-writes
21+-- 1) for a directory foo/, check for foo/index.html
22+-- 2) for a non-directory bar, check for bar.html
23+-- if the file exists, do the rewrite
24+autoHtmlRewrite :: String -> B.ByteString -> IO B.ByteString
25+autoHtmlRewrite staticDir pInfo = do
26+ fe <- doesFileExist $ staticDir ++ "/" ++ reWritePath
27+ return $ if fe then B.pack reWritePath else pInfo
28+ where
29+ reWritePath = concat $ map ((:) '/') reWritePieces
30+ pieces = decodePathInfo $ B.unpack $ pInfo
31+ reWritePieces =
32+ if (null pieces) || (null $ last pieces)
33+ then pieces ++ ["index.html"]
34+ else (init pieces) ++ [(last pieces) ++ ".html"]
wai-extra.cabal+3−1
@@ -24,7 +24,8 @@ Library
2424 blaze-builder-enumerator >= 0.2 && < 0.3,
2525 transformers >= 0.2 && < 0.3,
2626 enumerator >= 0.4 && < 0.5,
27− blaze-builder >= 0.2.1.3 && < 0.3
27+ blaze-builder >= 0.2.1.3 && < 0.3,
28+ web-routes >= 0.23
2829 Exposed-modules: Network.Wai.Handler.CGI
2930 Network.Wai.Middleware.AcceptOverride
3031 Network.Wai.Middleware.Autohead
@@ -33,6 +34,7 @@ Library
3334 Network.Wai.Middleware.Gzip
3435 Network.Wai.Middleware.Jsonp
3536 Network.Wai.Middleware.MethodOverride
37+ Network.Wai.Middleware.Rewrite
3638 Network.Wai.Middleware.Vhost
3739 Network.Wai.Zlib
3840 Network.Wai.Parse