@@ -40,6 +40,7 @@ module Network.Wai.Application.Static
40 , defaultMkRedirect
40 , defaultMkRedirect
41 , File (..)
41 , File (..)
42 , toEmbedded
42 , toEmbedded
43+ , StaticDirListing (..)
45import qualified Network.Wai as W
46import qualified Network.Wai as W
@@ -294,13 +295,13 @@ checkPieces fileLookup indices pieces cache req
295type Listing = (Pieces -> Folder -> IO L.ByteString)
296type Listing = (Pieces -> Folder -> IO L.ByteString)
297−data StaticDirListing = ListingForbidden | StaticDirListing {
298+data StaticDirListing = StaticDirListing {
298− ssListing :: Listing
299+ ssListing :: Maybe Listing
299 , ssIndices :: [T.Text]
300 , ssIndices :: [T.Text]
302defaultDirListing :: StaticDirListing
303defaultDirListing :: StaticDirListing
303−defaultDirListing = StaticDirListing defaultListing []
304+defaultDirListing = StaticDirListing (Just defaultListing) []
305-- IO is for development mode
306-- IO is for development mode
@@ -358,7 +359,7 @@ defaultPublicSettings :: CacheSettings -> StaticSettings
358defaultPublicSettings etags = StaticSettings { ssFolder = fileSystemLookup "public"
359defaultPublicSettings etags = StaticSettings { ssFolder = fileSystemLookup "public"
359 , ssMkRedirect = defaultMkRedirect
360 , ssMkRedirect = defaultMkRedirect
360 , ssGetMimeType = return . defaultMimeTypeByExt . T.unpack . fileName
361 , ssGetMimeType = return . defaultMimeTypeByExt . T.unpack . fileName
361− , ssDirListing = ListingForbidden
362+ , ssDirListing = StaticDirListing Nothing []
362 , ssCacheSettings = etags
363 , ssCacheSettings = etags
@@ -482,7 +483,6 @@ staticAppPieces ss@StaticSettings{} pieces req = liftIO $ do
482 let cache = ssCacheSettings ss
483 let cache = ssCacheSettings ss
483 let indices = case ssDirListing ss of
484 let indices = case ssDirListing ss of
484 StaticDirListing _ is -> is
485 StaticDirListing _ is -> is
485− ListingForbidden -> []
486 cp <- checkPieces (ssFolder ss) indices pieces cache req
486 cp <- checkPieces (ssFolder ss) indices pieces cache req
487 case cp of
487 case cp of
488 FileResponse file -> do
488 FileResponse file -> do
@@ -499,12 +499,12 @@ staticAppPieces ss@StaticSettings{} pieces req = liftIO $ do
499 ] "Not Modified"
499 ] "Not Modified"
500 DirectoryResponse fp ->
500 DirectoryResponse fp ->
501 case ssDirListing ss of
501 case ssDirListing ss of
502− StaticDirListing f _ -> do
502+ StaticDirListing (Just f) _ -> do
503 lbs <- f pieces fp
503 lbs <- f pieces fp
504 return $ W.responseLBS H.status200
504 return $ W.responseLBS H.status200
505 [ ("Content-Type", "text/html; charset=utf-8")
505 [ ("Content-Type", "text/html; charset=utf-8")
507− ListingForbidden -> return $ W.responseLBS H.status403
507+ StaticDirListing Nothing _ -> return $ W.responseLBS H.status403
508 [ ("Content-Type", "text/plain")
508 [ ("Content-Type", "text/plain")
509 ] "Directory listings disabled"
509 ] "Directory listings disabled"
510 SendContent mt lbs -> do
510 SendContent mt lbs -> do