From a013eb229564e5ebdbb8acee1333bab10dd63b4c Mon Sep 17 00:00:00 2001 From: Michael Snoyman Date: Thu, 18 Apr 2013 10:19:50 +0300 Subject: [PATCH] maximumContentLength is a Maybe --- yesod-core/Yesod/Core/Class/Yesod.hs | 6 ++++-- yesod-core/Yesod/Core/Internal/Request.hs | 6 +++--- yesod-core/Yesod/Core/Internal/Run.hs | 6 +++--- yesod-core/test/YesodCoreTest/InternalRequest.hs | 2 +- yesod-core/test/YesodCoreTest/RequestBodySize.hs | 2 +- 5 files changed, 12 insertions(+), 10 deletions(-) diff --git a/yesod-core/Yesod/Core/Class/Yesod.hs b/yesod-core/Yesod/Core/Class/Yesod.hs index 40e2b6c6..ee964a23 100644 --- a/yesod-core/Yesod/Core/Class/Yesod.hs +++ b/yesod-core/Yesod/Core/Class/Yesod.hs @@ -194,9 +194,11 @@ class RenderRoute site => Yesod site where -- | Maximum allowed length of the request body, in bytes. -- + -- If @Nothing@, no maximum is applied. + -- -- Default: 2 megabytes. - maximumContentLength :: site -> Maybe (Route site) -> Word64 - maximumContentLength _ _ = 2 * 1024 * 1024 -- 2 megabytes + maximumContentLength :: site -> Maybe (Route site) -> Maybe Word64 + maximumContentLength _ _ = Just $ 2 * 1024 * 1024 -- 2 megabytes -- | Creates a @Logger@ to use for log messages. -- diff --git a/yesod-core/Yesod/Core/Internal/Request.hs b/yesod-core/Yesod/Core/Internal/Request.hs index d067e06f..0c740be8 100644 --- a/yesod-core/Yesod/Core/Internal/Request.hs +++ b/yesod-core/Yesod/Core/Internal/Request.hs @@ -73,9 +73,9 @@ parseWaiRequest :: RandomGen g => W.Request -> SessionMap -> Bool - -> Word64 -- ^ max body size + -> Maybe Word64 -- ^ max body size -> (Either YesodRequest (g -> YesodRequest)) -parseWaiRequest env session useToken maxBodySize = +parseWaiRequest env session useToken mmaxBodySize = -- In most cases, we won't need to generate any random values. Therefore, -- we split our results: if we need a random generator, return a Right -- value, otherwise return a Left and avoid the relatively costly generator @@ -87,7 +87,7 @@ parseWaiRequest env session useToken maxBodySize = mkRequest token' = YesodRequest { reqGetParams = gets , reqCookies = cookies - , reqWaiRequest = limitRequestBody maxBodySize env + , reqWaiRequest = maybe id limitRequestBody mmaxBodySize env , reqLangs = langs'' , reqToken = token' , reqSession = if useToken diff --git a/yesod-core/Yesod/Core/Internal/Run.hs b/yesod-core/Yesod/Core/Internal/Run.hs index 36a12b16..38411b58 100644 --- a/yesod-core/Yesod/Core/Internal/Run.hs +++ b/yesod-core/Yesod/Core/Internal/Run.hs @@ -213,12 +213,12 @@ yesodRunner :: (ToTypedContent res, Yesod site) -> Maybe (Route site) -> Application yesodRunner handler' YesodRunnerEnv {..} route req - | KnownLength len <- requestBodyLength req, maxLen < len = return tooLargeResponse + | Just maxLen <- mmaxLen, KnownLength len <- requestBodyLength req, maxLen < len = return tooLargeResponse | otherwise = do let dontSaveSession _ = return [] (session, saveSession) <- liftIO $ do maybe (return (Map.empty, dontSaveSession)) (\sb -> sbLoadSession sb req) yreSessionBackend - let mkYesodReq = parseWaiRequest req session (isJust yreSessionBackend) maxLen + let mkYesodReq = parseWaiRequest req session (isJust yreSessionBackend) mmaxLen yreq <- case mkYesodReq of Left yreq -> return yreq @@ -243,7 +243,7 @@ yesodRunner handler' YesodRunnerEnv {..} route req yar <- runHandler rhe handler yreq liftIO $ yarToResponse yar saveSession yreq where - maxLen = maximumContentLength yreSite route + mmaxLen = maximumContentLength yreSite route handler = yesodMiddleware handler' yesodRender :: Yesod y diff --git a/yesod-core/test/YesodCoreTest/InternalRequest.hs b/yesod-core/test/YesodCoreTest/InternalRequest.hs index 9d6e13ec..792b484f 100644 --- a/yesod-core/test/YesodCoreTest/InternalRequest.hs +++ b/yesod-core/test/YesodCoreTest/InternalRequest.hs @@ -37,7 +37,7 @@ parseWaiRequest' :: Request -> Word64 -> YesodRequest parseWaiRequest' a b c d = - case parseWaiRequest a b c d of + case parseWaiRequest a b c (Just d) of Left yreq -> yreq Right needGen -> needGen g diff --git a/yesod-core/test/YesodCoreTest/RequestBodySize.hs b/yesod-core/test/YesodCoreTest/RequestBodySize.hs index c5b33d80..514559ac 100644 --- a/yesod-core/test/YesodCoreTest/RequestBodySize.hs +++ b/yesod-core/test/YesodCoreTest/RequestBodySize.hs @@ -29,7 +29,7 @@ mkYesod "Y" [parseRoutes| |] instance Yesod Y where - maximumContentLength _ _ = 10 + maximumContentLength _ _ = Just 10 postPostR, postConsumeR, postPartialConsumeR, postUnusedR :: Handler RepPlain