maximumContentLength is a Maybe

This commit is contained in:
Michael Snoyman 2013-04-18 10:19:50 +03:00
parent 64ef26104d
commit a013eb2295
5 changed files with 12 additions and 10 deletions

View File

@ -194,9 +194,11 @@ class RenderRoute site => Yesod site where
-- | Maximum allowed length of the request body, in bytes. -- | Maximum allowed length of the request body, in bytes.
-- --
-- If @Nothing@, no maximum is applied.
--
-- Default: 2 megabytes. -- Default: 2 megabytes.
maximumContentLength :: site -> Maybe (Route site) -> Word64 maximumContentLength :: site -> Maybe (Route site) -> Maybe Word64
maximumContentLength _ _ = 2 * 1024 * 1024 -- 2 megabytes maximumContentLength _ _ = Just $ 2 * 1024 * 1024 -- 2 megabytes
-- | Creates a @Logger@ to use for log messages. -- | Creates a @Logger@ to use for log messages.
-- --

View File

@ -73,9 +73,9 @@ parseWaiRequest :: RandomGen g
=> W.Request => W.Request
-> SessionMap -> SessionMap
-> Bool -> Bool
-> Word64 -- ^ max body size -> Maybe Word64 -- ^ max body size
-> (Either YesodRequest (g -> YesodRequest)) -> (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, -- 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 -- we split our results: if we need a random generator, return a Right
-- value, otherwise return a Left and avoid the relatively costly generator -- value, otherwise return a Left and avoid the relatively costly generator
@ -87,7 +87,7 @@ parseWaiRequest env session useToken maxBodySize =
mkRequest token' = YesodRequest mkRequest token' = YesodRequest
{ reqGetParams = gets { reqGetParams = gets
, reqCookies = cookies , reqCookies = cookies
, reqWaiRequest = limitRequestBody maxBodySize env , reqWaiRequest = maybe id limitRequestBody mmaxBodySize env
, reqLangs = langs'' , reqLangs = langs''
, reqToken = token' , reqToken = token'
, reqSession = if useToken , reqSession = if useToken

View File

@ -213,12 +213,12 @@ yesodRunner :: (ToTypedContent res, Yesod site)
-> Maybe (Route site) -> Maybe (Route site)
-> Application -> Application
yesodRunner handler' YesodRunnerEnv {..} route req 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 | otherwise = do
let dontSaveSession _ = return [] let dontSaveSession _ = return []
(session, saveSession) <- liftIO $ do (session, saveSession) <- liftIO $ do
maybe (return (Map.empty, dontSaveSession)) (\sb -> sbLoadSession sb req) yreSessionBackend 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 <- yreq <-
case mkYesodReq of case mkYesodReq of
Left yreq -> return yreq Left yreq -> return yreq
@ -243,7 +243,7 @@ yesodRunner handler' YesodRunnerEnv {..} route req
yar <- runHandler rhe handler yreq yar <- runHandler rhe handler yreq
liftIO $ yarToResponse yar saveSession yreq liftIO $ yarToResponse yar saveSession yreq
where where
maxLen = maximumContentLength yreSite route mmaxLen = maximumContentLength yreSite route
handler = yesodMiddleware handler' handler = yesodMiddleware handler'
yesodRender :: Yesod y yesodRender :: Yesod y

View File

@ -37,7 +37,7 @@ parseWaiRequest' :: Request
-> Word64 -> Word64
-> YesodRequest -> YesodRequest
parseWaiRequest' a b c d = parseWaiRequest' a b c d =
case parseWaiRequest a b c d of case parseWaiRequest a b c (Just d) of
Left yreq -> yreq Left yreq -> yreq
Right needGen -> needGen g Right needGen -> needGen g

View File

@ -29,7 +29,7 @@ mkYesod "Y" [parseRoutes|
|] |]
instance Yesod Y where instance Yesod Y where
maximumContentLength _ _ = 10 maximumContentLength _ _ = Just 10
postPostR, postConsumeR, postPartialConsumeR, postUnusedR :: Handler RepPlain postPostR, postConsumeR, postPartialConsumeR, postUnusedR :: Handler RepPlain