on master help sign in
wai-app-static: avoid checking for index files appended to urls already pointing to files
commit816574e462a701ff1341bad76ca0d40d6f54a5a6 authorSönke Hahn <soenkehahn@gmail.com> dateFri 6 Nov 2015, 01:51 (11 years ago) parent5ba68e5
1 file changed+24−10
wai-app-static/Network/Wai/Application/Static.hs+24−10
wai-app-static/Network/Wai/Application/Static.hs+24−10
@@ -103,17 +103,31 @@ checkPieces :: StaticSettings
103103checkPieces _ pieces _ | any (T.null . fromPiece) $ safeInit pieces =
104104 return $ Redirect (filterButLast (not . T.null . fromPiece) pieces) Nothing
105105
106−checkPieces ss@StaticSettings {..} pieces req =
107− lookupPieces (map (\ index -> pieces ++ [index]) ssIndices ++ [pieces])
106+checkPieces ss@StaticSettings {..} pieces req = do
107+ res <- lookupResult
108+ case res of
109+ LRNotFound -> return NotFound
110+ LRFile file -> serveFile ss req file
111+ LRFolder folder -> serveFolder ss pieces req folder
108112 where
109− lookupPieces :: [Pieces] -> IO StaticResponse
110− lookupPieces (x : xs) = do
111− res <- ssLookupFile x
112− case res of
113− LRNotFound -> lookupPieces xs
114− LRFile file -> serveFile ss req file
115− LRFolder folder -> serveFolder ss x req folder
116− lookupPieces [] = return NotFound
113+ lookupResult :: IO LookupResult
114+ lookupResult = do
115+ nonIndexResult <- ssLookupFile pieces
116+ case nonIndexResult of
117+ LRFile{} -> return nonIndexResult
118+ _ -> do
119+ indexResult <- lookupIndices (map (\ index -> pieces ++ [index]) ssIndices)
120+ return $ case indexResult of
121+ LRNotFound -> nonIndexResult
122+ _ -> indexResult
123+
124+ lookupIndices :: [Pieces] -> IO LookupResult
125+ lookupIndices (x : xs) = do
126+ res <- ssLookupFile x
127+ case res of
128+ LRNotFound -> lookupIndices xs
129+ _ -> return res
130+ lookupIndices [] = return LRNotFound
117131
118132serveFile :: StaticSettings -> W.Request -> File -> IO StaticResponse
119133serveFile StaticSettings {..} req file