From 4b385749f2aab90b5c7e44e844159c0221a8790d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Hoguin?= Date: Fri, 7 Sep 2018 13:56:12 +0200 Subject: Add cowboy_req:read_and_match_urlencoded_body/2,3 --- src/cowboy_req.erl | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) (limited to 'src') 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) -- cgit v1.2.3