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.
--
-- 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.
--

View File

@ -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

View File

@ -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

View File

@ -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

View File

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