diff options
author | Jo-Philipp Wich <jo@mein.io> | 2018-04-24 20:29:59 +0200 |
---|---|---|
committer | Jo-Philipp Wich <jo@mein.io> | 2018-04-26 08:26:19 +0200 |
commit | 7d13ec601051bc78f8eb384dcd640c4a167b2556 (patch) | |
tree | 89e095d1f78cb8d627a85fb2e27aeb72e06bd4b7 /modules/luci-base/luasrc/http.lua | |
parent | e56d9f4686af84af62895f2732a35c7d33bb7476 (diff) |
luci-base: handle bodies of non-POST requests as well
Decode the HTTP message bodies of any request carrying a Content-Length
header, not just those in POST requests.
This allows handling parameters in other methods, OPTIONS in particular.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Diffstat (limited to 'modules/luci-base/luasrc/http.lua')
-rw-r--r-- | modules/luci-base/luasrc/http.lua | 30 |
1 files changed, 14 insertions, 16 deletions
diff --git a/modules/luci-base/luasrc/http.lua b/modules/luci-base/luasrc/http.lua index be5577ee0..16fb04c54 100644 --- a/modules/luci-base/luasrc/http.lua +++ b/modules/luci-base/luasrc/http.lua @@ -486,26 +486,22 @@ end -- handled then the whole message body will be stored unaltered as "content" -- property within the given message object. function parse_message_body(src, msg, filecb) - local ctype = lhttp.header_attribute(msg.env.CONTENT_TYPE, nil) + if msg.env.CONTENT_LENGTH or msg.env.REQUEST_METHOD == "POST" then + local ctype = lhttp.header_attribute(msg.env.CONTENT_TYPE, nil) - -- Is it multipart/mime ? - if msg.env.REQUEST_METHOD == "POST" and - ctype == "multipart/form-data" - then - return mimedecode_message_body(src, msg, filecb) + -- Is it multipart/mime ? + if ctype == "multipart/form-data" then + return mimedecode_message_body(src, msg, filecb) - -- Is it application/x-www-form-urlencoded ? - elseif msg.env.REQUEST_METHOD == "POST" and - ctype == "application/x-www-form-urlencoded" - then - return urldecode_message_body(src, msg) + -- Is it application/x-www-form-urlencoded ? + elseif ctype == "application/x-www-form-urlencoded" then + return urldecode_message_body(src, msg) + end - -- Unhandled encoding - -- If a file callback is given then feed it chunk by chunk, else - -- store whole buffer in message.content - else - + -- Unhandled encoding + -- If a file callback is given then feed it chunk by chunk, else + -- store whole buffer in message.content local sink -- If we have a file callback then feed it @@ -553,4 +549,6 @@ function parse_message_body(src, msg, filecb) return true end + + return false end |