1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
|
{-# LANGUAGE OverloadedStrings #-}
module Network.Wai.Middleware.MethodOverride
( methodOverride
) where
import Network.Wai
import Control.Monad (join)
-- | Allows overriding of the HTTP request method via the _method query string
-- parameter.
--
-- This middleware only applies when the initial request method is POST. This
-- allow submitting of normal HTML forms, without worries of semantics
-- mismatches in the HTTP spec.
methodOverride :: Middleware
methodOverride app req =
app req'
where
req' =
case (requestMethod req, join $ lookup "_method" $ queryString req) of
("POST", Just m) -> req { requestMethod = m }
_ -> req
|