diff --git a/Yesod/Handler.hs b/Yesod/Handler.hs index 6c15ad83..398f0f07 100644 --- a/Yesod/Handler.hs +++ b/Yesod/Handler.hs @@ -34,6 +34,7 @@ module Yesod.Handler -- * Special responses , RedirectType (..) , redirect + , redirectString , sendFile , notFound , badMethod @@ -212,9 +213,15 @@ safeEh er = YesodApp $ \_ _ _ -> do liftIO $ hPutStrLn stderr $ "Error handler errored out: " ++ show er return (W.Status500, [], TypePlain, cs "Internal Server Error") +-- | Redirect to the given route. +redirect :: RedirectType -> Routes master -> GHandler sub master a +redirect rt url = do + r <- getUrlRenderMaster + redirectString rt $ r url + -- | Redirect to the given URL. -redirect :: RedirectType -> String -> GHandler sub master a -redirect rt url = Handler $ \_ -> return ([], HCRedirect rt url) +redirectString :: RedirectType -> String -> GHandler sub master a +redirectString rt url = Handler $ \_ -> return ([], HCRedirect rt url) -- | Bypass remaining handler code and output the given file. -- diff --git a/Yesod/Helpers/Auth.hs b/Yesod/Helpers/Auth.hs index 675272e5..286c0403 100644 --- a/Yesod/Helpers/Auth.hs +++ b/Yesod/Helpers/Auth.hs @@ -99,9 +99,9 @@ getOpenIdForward = do let complete = render OpenIdComplete res <- runAttemptT $ OpenId.getForwardUrl oid complete attempt - (\err -> redirect RedirectTemporary + (\err -> redirectString RedirectTemporary -- FIXME $ "/auth/openid/?message=" ++ encodeUrl (show err)) - (redirect RedirectTemporary) + (redirectString RedirectTemporary) res getOpenIdComplete :: GHandler Auth master () @@ -109,7 +109,7 @@ getOpenIdComplete = do rr <- getRequest let gets' = reqGetParams rr res <- runAttemptT $ OpenId.authenticate gets' - let onFailure err = redirect RedirectTemporary + let onFailure err = redirectString RedirectTemporary -- FIXME $ "/auth/openid/?message=" ++ encodeUrl (show err) let onSuccess (OpenId.Identifier ident) = do @@ -236,7 +236,7 @@ redirectSetDest rt dest = do Nothing -> "/" -- should never happen anyway dest' = ur dest addCookie destCookieTimeout destCookieName curr' - redirect rt dest' + redirectString rt dest' -- FIXME use redirect? -- | Read the 'destCookieName' cookie and redirect to this destination. If the -- cookie is missing, then use the default path provided. @@ -248,4 +248,4 @@ redirectToDest rt def = do (x:_) -> do deleteCookie destCookieName return x - redirect rt dest + redirectString rt dest -- FIXME use redirect?