From 76daead7303687956cb090fc1ac722f7838c200e Mon Sep 17 00:00:00 2001 From: Chad Barraford Date: Thu, 25 Sep 2014 13:56:41 -0400 Subject: [PATCH] Add config flag to disable reading request body --- lapis/config.lua | 6 +++++- lapis/config.moon | 1 + lapis/nginx.lua | 18 +++++++++++++----- lapis/nginx.moon | 15 ++++++++++----- 4 files changed, 29 insertions(+), 11 deletions(-) diff --git a/lapis/config.lua b/lapis/config.lua index 3158d6c0..039f7ad7 100644 --- a/lapis/config.lua +++ b/lapis/config.lua @@ -1,5 +1,8 @@ local insert -insert = table.insert +do + local _obj_0 = table + insert = _obj_0.insert +end local config_cache, configs, default_config, merge_set, set, scope_meta, config, reset, run_with_scope, get_env, get config_cache = { } configs = { } @@ -9,6 +12,7 @@ default_config = { session_name = "lapis_session", code_cache = "off", num_workers = "1", + allow_read_body = true, logging = { queries = true, requests = true diff --git a/lapis/config.moon b/lapis/config.moon index 50d8193a..6c82c328 100644 --- a/lapis/config.moon +++ b/lapis/config.moon @@ -12,6 +12,7 @@ default_config = { session_name: "lapis_session" code_cache: "off" num_workers: "1" + allow_read_body: true -- set to false if you don't want lapis to ready request body (ideal for proxying) logging: { queries: true diff --git a/lapis/nginx.lua b/lapis/nginx.lua index b20c8a87..5e0ece0a 100644 --- a/lapis/nginx.lua +++ b/lapis/nginx.lua @@ -4,7 +4,11 @@ do escape_pattern, parse_content_disposition, build_url = _obj_0.escape_pattern, _obj_0.parse_content_disposition, _obj_0.build_url end local run_after_dispatch -run_after_dispatch = require("lapis.nginx.context").run_after_dispatch +do + local _obj_0 = require("lapis.nginx.context") + run_after_dispatch = _obj_0.run_after_dispatch +end +local config = require("lapis.config").get() local flatten_params flatten_params = function(t) local _tbl_0 = { } @@ -109,11 +113,15 @@ local ngx_req = { return build_url(t.parsed_url) end, params_post = function(t) - if (t.headers["content-type"] or ""):match(escape_pattern("multipart/form-data")) then - return parse_multipart() or { } + if config.allow_read_body then + if (t.headers["content-type"] or ""):match(escape_pattern("multipart/form-data")) then + return parse_multipart() or { } + else + ngx.req.read_body() + return flatten_params(ngx.req.get_post_args()) + end else - ngx.req.read_body() - return flatten_params(ngx.req.get_post_args()) + return { } end end, params_get = function() diff --git a/lapis/nginx.moon b/lapis/nginx.moon index d4843df9..c411a1ea 100644 --- a/lapis/nginx.moon +++ b/lapis/nginx.moon @@ -1,6 +1,8 @@ import escape_pattern, parse_content_disposition, build_url from require "lapis.util" import run_after_dispatch from require "lapis.nginx.context" +config = require"lapis.config".get! + flatten_params = (t) -> {k, type(v) == "table" and v[#v] or v for k,v in pairs t} @@ -72,12 +74,15 @@ ngx_req = { build_url t.parsed_url params_post: (t) -> - -- parse multipart if required - if (t.headers["content-type"] or "")\match escape_pattern "multipart/form-data" - parse_multipart! or {} + if config.allow_read_body + -- parse multipart if required + if (t.headers["content-type"] or "")\match escape_pattern "multipart/form-data" + parse_multipart! or {} + else + ngx.req.read_body! + flatten_params ngx.req.get_post_args! else - ngx.req.read_body! - flatten_params ngx.req.get_post_args! + {} params_get: -> flatten_params ngx.req.get_uri_args!