@@ -40,6 +40,7 @@ module Network.Wai.Application.Static
4040 , defaultMkRedirect
4141 , File (..)
4242 , toEmbedded
43+ , StaticDirListing (..)
4344 ) where
4445
4546import qualified Network.Wai as W
@@ -294,13 +295,13 @@ checkPieces fileLookup indices pieces cache req
294295
295296type Listing = (Pieces -> Folder -> IO L.ByteString)
296297
297−data StaticDirListing = ListingForbidden | StaticDirListing {
298− ssListing :: Listing
298+data StaticDirListing = StaticDirListing {
299+ ssListing :: Maybe Listing
299300 , ssIndices :: [T.Text]
300301}
301302
302303defaultDirListing :: StaticDirListing
303−defaultDirListing = StaticDirListing defaultListing []
304+defaultDirListing = StaticDirListing (Just defaultListing) []
304305
305306-- IO is for development mode
306307
@@ -358,7 +359,7 @@ defaultPublicSettings :: CacheSettings -> StaticSettings
358359defaultPublicSettings etags = StaticSettings { ssFolder = fileSystemLookup "public"
359360 , ssMkRedirect = defaultMkRedirect
360361 , ssGetMimeType = return . defaultMimeTypeByExt . T.unpack . fileName
361− , ssDirListing = ListingForbidden
362+ , ssDirListing = StaticDirListing Nothing []
362363 , ssCacheSettings = etags
363364}
364365
@@ -482,7 +483,6 @@ staticAppPieces ss@StaticSettings{} pieces req = liftIO $ do
482483 let cache = ssCacheSettings ss
483484 let indices = case ssDirListing ss of
484485 StaticDirListing _ is -> is
485− ListingForbidden -> []
486486 cp <- checkPieces (ssFolder ss) indices pieces cache req
487487 case cp of
488488 FileResponse file -> do
@@ -499,12 +499,12 @@ staticAppPieces ss@StaticSettings{} pieces req = liftIO $ do
499499 ] "Not Modified"
500500 DirectoryResponse fp ->
501501 case ssDirListing ss of
502− StaticDirListing f _ -> do
502+ StaticDirListing (Just f) _ -> do
503503 lbs <- f pieces fp
504504 return $ W.responseLBS H.status200
505505 [ ("Content-Type", "text/html; charset=utf-8")
506506 ] lbs
507− ListingForbidden -> return $ W.responseLBS H.status403
507+ StaticDirListing Nothing _ -> return $ W.responseLBS H.status403
508508 [ ("Content-Type", "text/plain")
509509 ] "Directory listings disabled"
510510 SendContent mt lbs -> do