@@ -261,8 +261,9 @@ checkPieces :: (Pieces -> IO FileLookup) -- ^ file lookup function
261 -> W.Request
261 -> W.Request
262 -> MaxAge
262 -> MaxAge
263 -> Bool -- ^ use hash?
263 -> Bool -- ^ use hash?
264+ -> Bool -- ^ Redirect to Index?
264 -> IO CheckPieces
265 -> IO CheckPieces
265−checkPieces fileLookup indices pieces req maxAge useHash
266+checkPieces fileLookup indices pieces req maxAge useHash redirectToIndex
266 | any unsafe pieces = return Forbidden
267 | any unsafe pieces = return Forbidden
267 | any nullFilePath $ safeInit pieces =
268 | any nullFilePath $ safeInit pieces =
268 return $ Redirect (filterButLast (not . nullFilePath) pieces) Nothing
269 return $ Redirect (filterButLast (not . nullFilePath) pieces) Nothing
@@ -281,7 +282,11 @@ checkPieces fileLookup indices pieces req maxAge useHash
281 (Just Right{}, False) -> return $ Redirect (init pieces) Nothing
282 (Just Right{}, False) -> return $ Redirect (init pieces) Nothing
282 (Just (Left folder@(Folder _ contents)), _) -> do
283 (Just (Left folder@(Folder _ contents)), _) -> do
283 case checkIndices $ map fileName $ rights contents of
284 case checkIndices $ map fileName $ rights contents of
286+ if redirectToIndex then
284− Just index -> return $ Redirect (setLast pieces index) Nothing
287+ return $ Redirect (setLast pieces index) Nothing
289+ checkPieces fileLookup indices (setLast pieces index) req maxAge useHash redirectToIndex
285 Nothing ->
290 Nothing ->
286 if isFolder
291 if isFolder
287 then return $ DirectoryResponse folder
292 then return $ DirectoryResponse folder
@@ -392,6 +397,7 @@ data StaticSettings = StaticSettings
392 , ssGetMimeType :: File -> IO MimeType
397 , ssGetMimeType :: File -> IO MimeType
393 , ssListing :: Maybe Listing
398 , ssListing :: Maybe Listing
394 , ssIndices :: [T.Text] -- index.html
399 , ssIndices :: [T.Text] -- index.html
400+ , ssRedirectToIndex :: Bool
395 , ssMaxAge :: MaxAge
401 , ssMaxAge :: MaxAge
396 , ssUseHash :: Bool
402 , ssUseHash :: Bool
@@ -420,6 +426,7 @@ defaultWebAppSettings = StaticSettings
420 , ssMaxAge = MaxAgeForever
426 , ssMaxAge = MaxAgeForever
421 , ssListing = Nothing
427 , ssListing = Nothing
422 , ssIndices = []
428 , ssIndices = []
429+ , ssRedirectToIndex = False
423 , ssUseHash = True
430 , ssUseHash = True
@@ -431,6 +438,7 @@ defaultFileServerSettings = StaticSettings
431 , ssMaxAge = MaxAgeSeconds $ 60 * 60
438 , ssMaxAge = MaxAgeSeconds $ 60 * 60
432 , ssListing = Just defaultListing
439 , ssListing = Just defaultListing
433 , ssIndices = ["index.html", "index.htm"]
440 , ssIndices = ["index.html", "index.htm"]
441+ , ssRedirectToIndex = False
434 , ssUseHash = False
442 , ssUseHash = False
@@ -598,7 +606,7 @@ staticAppPieces ss pieces req = liftIO $ do
598 let indices = ssIndices ss
606 let indices = ssIndices ss
599 case checkSpecialDirListing pieces of
607 case checkSpecialDirListing pieces of
600 Just res -> response res
608 Just res -> response res
601− Nothing -> checkPieces (ssFolder ss) (map FilePath indices) pieces req (ssMaxAge ss) (ssUseHash ss) >>= response
609+ Nothing -> checkPieces (ssFolder ss) (map FilePath indices) pieces req (ssMaxAge ss) (ssUseHash ss) (ssRedirectToIndex ss) >>= response
603 response cp = case cp of
611 response cp = case cp of
604 FileResponse file ch -> do
612 FileResponse file ch -> do