packages feed

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 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