diff options
author | Paweł Chmielowski <pchmielowski@process-one.net> | 2020-02-21 12:19:02 +0100 |
---|---|---|
committer | Paweł Chmielowski <pchmielowski@process-one.net> | 2020-02-21 12:19:37 +0100 |
commit | 357e7e117dc32b1de7a30cd8aa411d7220d230fd (patch) | |
tree | 1f210b6d3973c1f78cb79ea5008dbe5e7980f2c8 /src/ejabberd_http.erl | |
parent | Merge 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.erl | 14 |
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; |