wai-app-static 0.0.1.4 → 0.1.0
raw patch · 2 files changed
+26/−18 lines, 2 filesdep +blaze-builderdep +http-typesdep −web-routesdep ~waiPVP ok
version bump matches the API change (PVP)
Dependencies added: blaze-builder, http-types
Dependencies removed: web-routes
Dependency ranges changed: wai
API changes (from Hackage documentation)
- Network.Wai.Application.Static: staticAppPieces :: StaticSettings -> [String] -> Application
+ Network.Wai.Application.Static: staticAppPieces :: StaticSettings -> [Text] -> Application
Files
- Network/Wai/Application/Static.hs +21/−14
- wai-app-static.cabal +5/−4
Network/Wai/Application/Static.hs view
@@ -31,6 +31,7 @@ ) where import qualified Network.Wai as W+import qualified Network.HTTP.Types as H import Data.Map (Map) import qualified Data.Map as Map import Data.ByteString (ByteString)@@ -38,7 +39,6 @@ import qualified Data.ByteString.Char8 as S8 import qualified Data.ByteString.Lazy as L import Data.ByteString.Lazy.Char8 ()-import Web.Routes.Base (decodePathInfo, encodePathInfo) import System.PosixCompat.Files (fileSize, getFileStatus, modificationTime) import System.Posix.Types (FileOffset, EpochTime) import Control.Monad.IO.Class (liftIO)@@ -49,6 +49,9 @@ import qualified Text.Blaze.Renderer.Utf8 as HU import qualified Text.Blaze.Html5.Attributes as A +import Blaze.ByteString.Builder (toByteString, copyByteString)+import Data.Monoid (mappend)+ import Data.Time import Data.Time.Clock.POSIX import System.Locale (defaultTimeLocale)@@ -244,48 +247,52 @@ staticApp :: StaticSettings -> W.Application staticApp set req = do- let pieces = decodePathInfo $ S8.unpack $ W.pathInfo req+ let pieces = W.pathInfo req staticAppPieces set pieces req -staticAppPieces :: StaticSettings -> [String] -> W.Application+staticAppPieces :: StaticSettings -> [T.Text] -> W.Application staticAppPieces _ _ req | W.requestMethod req /= "GET" = return $ W.responseLBS- W.status405+ H.status405 [("Content-Type", "text/plain")] "Only GET is supported"-staticAppPieces (StaticSettings folder indices mlisting getmime) pieces _ = liftIO $ do+staticAppPieces (StaticSettings folder indices mlisting getmime) piecesT _ = liftIO $ do+ let pieces = map T.unpack piecesT -- FIXME stick with Text cp <- checkPieces folder indices pieces case cp of Redirect pieces' -> do- let loc = S8.pack $ (concatMap (const "../") $ drop 1 pieces) ++ encodePathInfo pieces' []- return $ W.responseLBS W.status301+ let loc =+ toByteString $+ foldr mappend (H.encodePathSegments $ map T.pack pieces') -- FIXME use Text+ $ map (const $ copyByteString "../") $ drop 1 pieces+ return $ W.responseLBS H.status301 [ ("Content-Type", "text/plain") , ("Location", loc) ] "Redirect"- Forbidden -> return $ W.responseLBS W.status403+ Forbidden -> return $ W.responseLBS H.status403 [ ("Content-Type", "text/plain") ] "Forbidden"- NotFound -> return $ W.responseLBS W.status404+ NotFound -> return $ W.responseLBS H.status404 [ ("Content-Type", "text/plain") ] "File not found" FileResponse fp -> do mimetype <- getmime fp filesize <- fileSize `fmap` getFileStatus fp- return $ W.ResponseFile W.status200+ return $ W.ResponseFile H.status200 [ ("Content-Type", mimetype) , ("Content-Length", S8.pack $ show filesize)- ] fp+ ] fp Nothing DirectoryResponse fp -> case mlisting of Just listing -> do lbs <- listing pieces fp- return $ W.responseLBS W.status200+ return $ W.responseLBS H.status200 [ ("Content-Type", "text/html; charset=utf-8") ] lbs- Nothing -> return $ W.responseLBS W.status403+ Nothing -> return $ W.responseLBS H.status403 [ ("Content-Type", "text/plain") ] "Directory listings disabled"- SendContent mt lbs -> return $ W.responseLBS W.status200+ SendContent mt lbs -> return $ W.responseLBS H.status200 [ ("Content-Type", mt) ] lbs
wai-app-static.cabal view
@@ -1,5 +1,5 @@ name: wai-app-static-version: 0.0.1.4+version: 0.1.0 license: BSD3 license-file: LICENSE author: Michael Snoyman <michael@snoyman.com>@@ -10,14 +10,14 @@ stability: Stable cabal-version: >= 1.6 build-type: Simple-homepage: http://docs.yesodweb.com/+homepage: http://www.yesodweb.com/ Extra-source-files: folder.png, haskell.png library build-depends: base >= 4 && < 5- , wai >= 0.3 && < 0.4+ , wai >= 0.4 && < 0.5 , bytestring >= 0.9.1.4 && < 0.10- , web-routes >= 0.23 && < 0.24+ , http-types >= 0.6 && < 0.7 , transformers >= 0.2.2 && < 0.3 , unix-compat >= 0.2 && < 0.3 , directory >= 1.0 && < 1.2@@ -27,6 +27,7 @@ , old-locale >= 1.0.0.2 && < 1.1 , file-embed >= 0.0.3.1 && < 0.1 , text >= 0.5 && < 1.0+ , blaze-builder >= 0.2.1.4 && < 0.4 exposed-modules: Network.Wai.Application.Static ghc-options: -Wall