on master help sign in
Repopulating the request body from the lazy list created.
6e0a49dLyndon Maydwell
wai-extra/Network/Wai/Middleware/MethodOverridePost.hs+3−2
@@ -7,6 +7,7 @@ import Data.Monoid (mconcat)
7import Data.Conduit.Lazy (lazyConsume)
7import Data.Conduit.Lazy (lazyConsume)
8import Network.HTTP.Types (parseQuery)
8import Network.HTTP.Types (parseQuery)
9import Control.Monad.Trans.Resource (ResourceT)
9import Control.Monad.Trans.Resource (ResourceT)
10+import Data.Conduit.List (sourceList)
10
11
11methodOverridePost :: Middleware
12methodOverridePost :: Middleware
12methodOverridePost app req = case lookup "Content-Type" (requestHeaders req) of
13methodOverridePost app req = case lookup "Content-Type" (requestHeaders req) of
@@ -16,5 +17,5 @@ methodOverridePost app req = case lookup "Content-Type" (requestHeaders req) of
16setPost :: Request -> ResourceT IO Request
17setPost :: Request -> ResourceT IO Request
17setPost req = do
18setPost req = do
18 body <- lazyConsume (requestBody req)
19 body <- lazyConsume (requestBody req)
19− case parseQuery (mconcat body) of (("_method", Just newmethod):_) -> return $ req {requestMethod = newmethod}
20+ case parseQuery (mconcat body) of (("_method", Just newmethod):_) -> return $ req {requestBody = sourceList body, requestMethod = newmethod}
20− _ -> return req
21+ _ -> return $ req {requestBody = sourceList body}