aboutsummaryrefslogtreecommitdiff
path: root/src/ejabberd_http.erl
diff options
context:
space:
mode:
authorHolger Weiss <holger@zedat.fu-berlin.de>2017-03-27 23:19:11 +0200
committerHolger Weiss <holger@zedat.fu-berlin.de>2017-03-27 23:19:11 +0200
commit41de5e78d0f792586487e33a8b1e2a0cf405e0be (patch)
treee84aa5ea5fb1ff35a8c5d9e062f6b0f7ef2786d9 /src/ejabberd_http.erl
parentFix PEP issues (#1636) (diff)
ejabberd_http: Add "custom_headers" option
If the new listener option "custom_headers" is specified, include those headers with the HTTP(S) response. Closes #517.
Diffstat (limited to 'src/ejabberd_http.erl')
-rw-r--r--src/ejabberd_http.erl25
1 files changed, 19 insertions, 6 deletions
diff --git a/src/ejabberd_http.erl b/src/ejabberd_http.erl
index 4b1242568..4c5dd8ebe 100644
--- a/src/ejabberd_http.erl
+++ b/src/ejabberd_http.erl
@@ -68,6 +68,7 @@
end_of_request = false,
options = [],
default_host,
+ custom_headers,
trail = <<>>,
addr_re
}).
@@ -167,10 +168,15 @@ init({SockMod, Socket}, Opts) ->
DefaultHost = gen_mod:get_opt(default_host, Opts, fun(A) -> A end, undefined),
{ok, RE} = re:compile(<<"^(?:\\[(.*?)\\]|(.*?))(?::(\\d+))?$">>),
+ CustomHeaders = gen_mod:get_opt(custom_headers, Opts,
+ fun(L) when is_list(L) -> L end,
+ []),
+
?INFO_MSG("started: ~p", [{SockMod1, Socket1}]),
State = #state{sockmod = SockMod1,
socket = Socket1,
default_host = DefaultHost,
+ custom_headers = CustomHeaders,
options = Opts,
request_handlers = RequestHandlers,
addr_re = RE},
@@ -309,6 +315,7 @@ process_header(State, Data) ->
trail = State3#state.trail,
options = State#state.options,
default_host = State#state.default_host,
+ custom_headers = State#state.custom_headers,
request_handlers = State#state.request_handlers,
addr_re = State#state.addr_re};
_ ->
@@ -316,6 +323,7 @@ process_header(State, Data) ->
trail = State3#state.trail,
options = State#state.options,
default_host = State#state.default_host,
+ custom_headers = State#state.custom_headers,
request_handlers = State#state.request_handlers,
addr_re = State#state.addr_re}
end;
@@ -323,6 +331,7 @@ process_header(State, Data) ->
#state{end_of_request = true,
options = State#state.options,
default_host = State#state.default_host,
+ custom_headers = State#state.custom_headers,
request_handlers = State#state.request_handlers,
addr_re = State#state.addr_re}
end.
@@ -446,6 +455,7 @@ process_request(#state{request_method = Method,
request_tp = TP,
request_headers = RequestHeaders,
request_handlers = RequestHandlers,
+ custom_headers = CustomHeaders,
trail = Trail} = State) ->
case extract_path_query(State) of
{State2, false} ->
@@ -478,18 +488,21 @@ process_request(#state{request_method = Method,
ip = IP},
Res = case process(RequestHandlers, Request, Socket, SockMod, Trail) of
El when is_record(El, xmlel) ->
- make_xhtml_output(State, 200, [], El);
+ make_xhtml_output(State, 200, CustomHeaders, El);
{Status, Headers, El}
when is_record(El, xmlel) ->
- make_xhtml_output(State, Status, Headers, El);
+ make_xhtml_output(State, Status,
+ Headers ++ CustomHeaders, El);
Output when is_binary(Output) or is_list(Output) ->
- make_text_output(State, 200, [], 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, Output);
+ make_text_output(State, Status,
+ Headers ++ CustomHeaders, Output);
{Status, Reason, Headers, Output}
when is_binary(Output) or is_list(Output) ->
- make_text_output(State, Status, Reason, Headers, Output);
+ make_text_output(State, Status, Reason,
+ Headers ++ CustomHeaders, Output);
_ ->
none
end,
@@ -497,7 +510,7 @@ process_request(#state{request_method = Method,
end.
make_bad_request(State) ->
- make_xhtml_output(State, 400, [],
+ make_xhtml_output(State, 400, State#state.custom_headers,
ejabberd_web:make_xhtml([#xmlel{name = <<"h1">>,
attrs = [],
children =