wai-extra 0.3.2.1 → 0.3.3
raw patch · 2 files changed
+38/−2 lines, 2 filesdep +web-routesdep ~base
Dependencies added: web-routes
Dependency ranges changed: base
Files
- Network/Wai/Middleware/Rewrite.hs +34/−0
- wai-extra.cabal +4/−2
+ Network/Wai/Middleware/Rewrite.hs view
@@ -0,0 +1,34 @@+{-# LANGUAGE OverloadedStrings #-}+module Network.Wai.Middleware.Rewrite+ ( rewrite, autoHtmlRewrite+ ) where++import Network.Wai+import qualified Data.ByteString.Char8 as B+import System.Directory (doesFileExist)+import Control.Monad.IO.Class (liftIO)+import Web.Routes.Base (decodePathInfo)++-- | rewrite based on your own conversion rules+-- Example usage: rewrite (autoHtmlRewrite "static")+rewrite :: (B.ByteString -> IO B.ByteString) -> Middleware+rewrite convert app req = do+ newPathInfo <- liftIO $ convert $ pathInfo req+ app req { pathInfo = newPathInfo }++-- | example rewriter+-- implements 2 rules for static html re-writes+-- 1) for a directory foo/, check for foo/index.html+-- 2) for a non-directory bar, check for bar.html+-- if the file exists, do the rewrite+autoHtmlRewrite :: String -> B.ByteString -> IO B.ByteString+autoHtmlRewrite staticDir pInfo = do+ fe <- doesFileExist $ staticDir ++ "/" ++ reWritePath+ return $ if fe then B.pack reWritePath else pInfo+ where+ reWritePath = concat $ map ((:) '/') reWritePieces+ pieces = decodePathInfo $ B.unpack $ pInfo+ reWritePieces =+ if (null pieces) || (null $ last pieces)+ then pieces ++ ["index.html"]+ else (init pieces) ++ [(last pieces) ++ ".html"]
wai-extra.cabal view
@@ -1,5 +1,5 @@ Name: wai-extra-Version: 0.3.2.1+Version: 0.3.3 Synopsis: Provides some basic WAI handlers and middleware. Description: The goal here is to provide common features without many dependencies. License: BSD3@@ -24,7 +24,8 @@ blaze-builder-enumerator >= 0.2 && < 0.3, transformers >= 0.2 && < 0.3, enumerator >= 0.4 && < 0.5,- blaze-builder >= 0.2.1.3 && < 0.3+ blaze-builder >= 0.2.1.3 && < 0.3,+ web-routes >= 0.23 Exposed-modules: Network.Wai.Handler.CGI Network.Wai.Middleware.AcceptOverride Network.Wai.Middleware.Autohead@@ -33,6 +34,7 @@ Network.Wai.Middleware.Gzip Network.Wai.Middleware.Jsonp Network.Wai.Middleware.MethodOverride+ Network.Wai.Middleware.Rewrite Network.Wai.Middleware.Vhost Network.Wai.Zlib Network.Wai.Parse