Use 307 redirect for cleaning paths and non-GET requests #951

This commit is contained in:
Michael Snoyman 2015-03-15 11:45:14 +02:00
parent 70c51d29fc
commit e85be6f118
3 changed files with 13 additions and 3 deletions

View File

@ -1,3 +1,7 @@
## 1.4.8.3
* Use 307 redirect for cleaning paths and non-GET requests [#951](https://github.com/yesodweb/yesod/issues/951)
## 1.4.8.2 ## 1.4.8.2
* Allow blaze-builder 0.4 * Allow blaze-builder 0.4

View File

@ -47,7 +47,7 @@ import Data.Monoid (mappend)
import qualified Data.ByteString as S import qualified Data.ByteString as S
import qualified Data.ByteString.Char8 as S8 import qualified Data.ByteString.Char8 as S8
import qualified Blaze.ByteString.Builder import qualified Blaze.ByteString.Builder
import Network.HTTP.Types (status301) import Network.HTTP.Types (status301, status307)
import Yesod.Routes.Parse import Yesod.Routes.Parse
import Yesod.Core.Types import Yesod.Core.Types
import Yesod.Core.Class.Yesod import Yesod.Core.Class.Yesod
@ -96,11 +96,17 @@ toWaiAppYre yre req =
site = yreSite yre site = yreSite yre
sendRedirect :: Yesod master => master -> [Text] -> W.Application sendRedirect :: Yesod master => master -> [Text] -> W.Application
sendRedirect y segments' env sendResponse = sendRedirect y segments' env sendResponse =
sendResponse $ W.responseLBS status301 sendResponse $ W.responseLBS status
[ ("Content-Type", "text/plain") [ ("Content-Type", "text/plain")
, ("Location", Blaze.ByteString.Builder.toByteString dest') , ("Location", Blaze.ByteString.Builder.toByteString dest')
] "Redirecting" ] "Redirecting"
where where
-- Ensure that non-GET requests get redirected correctly. See:
-- https://github.com/yesodweb/yesod/issues/951
status
| W.requestMethod env == "GET" = status301
| otherwise = status307
dest = joinPath y (resolveApproot y env) segments' [] dest = joinPath y (resolveApproot y env) segments' []
dest' = dest' =
if S.null (W.rawQueryString env) if S.null (W.rawQueryString env)

View File

@ -1,5 +1,5 @@
name: yesod-core name: yesod-core
version: 1.4.8.2 version: 1.4.8.3
license: MIT license: MIT
license-file: LICENSE license-file: LICENSE
author: Michael Snoyman <michael@snoyman.com> author: Michael Snoyman <michael@snoyman.com>