aboutsummaryrefslogtreecommitdiff
path: root/src/ejabberd_http.erl
diff options
context:
space:
mode:
authorPaweł Chmielowski <pchmielowski@process-one.net>2020-02-21 12:19:02 +0100
committerPaweł Chmielowski <pchmielowski@process-one.net>2020-02-21 12:19:37 +0100
commit357e7e117dc32b1de7a30cd8aa411d7220d230fd (patch)
tree1f210b6d3973c1f78cb79ea5008dbe5e7980f2c8 /src/ejabberd_http.erl
parentMerge pull request #3127 from area-42/allow_emojis_with_mssql (diff)
Make http heades passed in custom_headers override builtin headers
Previously we just appended them, so sometimes we just had duplicates This fixes issue #3056
Diffstat (limited to 'src/ejabberd_http.erl')
-rw-r--r--src/ejabberd_http.erl14
1 files changed, 10 insertions, 4 deletions
diff --git a/src/ejabberd_http.erl b/src/ejabberd_http.erl
index 89c5352fc..fdc9321ef 100644
--- a/src/ejabberd_http.erl
+++ b/src/ejabberd_http.erl
@@ -31,7 +31,8 @@
%% External exports
-export([start/3, start_link/3,
accept/1, receive_headers/1, recv_file/2,
- listen_opt_type/1, listen_options/0]).
+ listen_opt_type/1, listen_options/0,
+ apply_custom_headers/2]).
-export([init/3]).
@@ -491,19 +492,19 @@ process_request(#state{request_method = Method,
{Status, Headers, El}
when is_record(El, xmlel) ->
make_xhtml_output(State, Status,
- Headers ++ CustomHeaders, El);
+ apply_custom_headers(Headers, CustomHeaders), El);
Output when is_binary(Output) or is_list(Output) ->
make_text_output(State, 200, CustomHeaders, Output);
{Status, Headers, Output}
when is_binary(Output) or is_list(Output) ->
make_text_output(State, Status,
- Headers ++ CustomHeaders, Output);
+ apply_custom_headers(Headers, CustomHeaders), Output);
{Status, Headers, {file, FileName}} ->
make_file_output(State, Status, Headers, FileName);
{Status, Reason, Headers, Output}
when is_binary(Output) or is_list(Output) ->
make_text_output(State, Status, Reason,
- Headers ++ CustomHeaders, Output);
+ apply_custom_headers(Headers, CustomHeaders), Output);
_ ->
none
end,
@@ -855,6 +856,11 @@ parse_urlencoded(<<>>, Last, Cur, _State) ->
[{Last, Cur}];
parse_urlencoded(undefined, _, _, _) -> [].
+apply_custom_headers(Headers, CustomHeaders) ->
+ M = maps:merge(maps:from_list(Headers),
+ maps:from_list(CustomHeaders)),
+ maps:to_list(M).
+
% The following code is mostly taken from yaws_ssl.erl
toupper(C) when C >= $a andalso C =< $z -> C - 32;