aboutsummaryrefslogtreecommitdiffstats
path: root/src/cowboy_req.erl
diff options
context:
space:
mode:
authorLoïc Hoguin <[email protected]>2018-09-07 13:56:12 +0200
committerLoïc Hoguin <[email protected]>2018-09-07 13:56:12 +0200
commit4b385749f2aab90b5c7e44e844159c0221a8790d (patch)
tree1139d59b19aa2323cf29290665493a823b7087ed /src/cowboy_req.erl
parentdcc6f9326f70efbab81897aae8f2e23d621c7f3a (diff)
downloadcowboy-4b385749f2aab90b5c7e44e844159c0221a8790d.tar.gz
cowboy-4b385749f2aab90b5c7e44e844159c0221a8790d.tar.bz2
cowboy-4b385749f2aab90b5c7e44e844159c0221a8790d.zip
Add cowboy_req:read_and_match_urlencoded_body/2,3
Diffstat (limited to 'src/cowboy_req.erl')
-rw-r--r--src/cowboy_req.erl20
1 files changed, 19 insertions, 1 deletions
diff --git a/src/cowboy_req.erl b/src/cowboy_req.erl
index ee21e98..ee40304 100644
--- a/src/cowboy_req.erl
+++ b/src/cowboy_req.erl
@@ -54,7 +54,8 @@
-export([read_body/2]).
-export([read_urlencoded_body/1]).
-export([read_urlencoded_body/2]).
-%% @todo read_and_match_urlencoded_body?
+-export([read_and_match_urlencoded_body/2]).
+-export([read_and_match_urlencoded_body/3]).
%% Multipart.
-export([read_part/1]).
@@ -513,6 +514,23 @@ read_urlencoded_body(Req0, Opts) ->
end
end.
+-spec read_and_match_urlencoded_body(cowboy:fields(), Req)
+ -> {ok, map(), Req} when Req::req().
+read_and_match_urlencoded_body(Fields, Req) ->
+ read_and_match_urlencoded_body(Fields, Req, #{length => 64000, period => 5000}).
+
+-spec read_and_match_urlencoded_body(cowboy:fields(), Req, read_body_opts())
+ -> {ok, map(), Req} when Req::req().
+read_and_match_urlencoded_body(Fields, Req0, Opts) ->
+ {ok, Qs, Req} = read_urlencoded_body(Req0, Opts),
+ case filter(Fields, kvlist_to_map(Fields, Qs)) of
+ {ok, Map} ->
+ {ok, Map, Req};
+ {error, Errors} ->
+ exit({request_error, {read_and_match_urlencoded_body, Errors},
+ 'Urlencoded request body validation constraints failed for the reasons provided.'})
+ end.
+
%% Multipart.
-spec read_part(Req)