./ct_report/coverage/mod_http_upload_api.COVER.html

1 -module(mod_http_upload_api).
2
3 -export([get_urls/5, get_urls_mongooseimctl/5]).
4
5 -ignore_xref([get_urls_mongooseimctl/5]).
6
7 -spec get_urls_mongooseimctl(Domain :: jid:lserver(), Filename :: binary(), Size :: pos_integer(),
8 ContentType :: binary() | undefined, Timeout :: pos_integer()) ->
9 {ok | error, string()}.
10 get_urls_mongooseimctl(_Domain, _Filename, Size, _ContentType, _Timeout) when Size =< 0 ->
11
:-(
{error, "size must be positive integer"};
12 get_urls_mongooseimctl(_Domain, _Filename, _Size, _ContentType, Timeout) when Timeout =< 0 ->
13
:-(
{error, "timeout must be positive integer"};
14 get_urls_mongooseimctl(Domain, Filename, Size, ContentType, Timeout) ->
15
:-(
case get_urls(Domain, Filename, Size, ContentType, Timeout) of
16 {ok, #{<<"putUrl">> := PutURL, <<"getUrl">> := GetURL, <<"headers">> := Headers}} ->
17
:-(
{ok, generate_output_message(PutURL, GetURL, Headers)};
18 {_, Message} ->
19
:-(
{error, Message}
20 end.
21
22 -spec get_urls(Domain :: jid:lserver(), Filename :: nonempty_binary(), Size :: pos_integer(),
23 ContentType :: binary() | null | undefined, Timeout :: pos_integer()) ->
24 {ok, #{binary() => term()}}
25 | {size_error | timeout_error | module_not_loaded_error | domain_not_found |
26 file_too_large_error, string()}.
27 get_urls(Domain, Filename, Size, ContentType, Timeout) ->
28 21 ContentType1 = content_type(ContentType),
29 21 case mongoose_domain_api:get_domain_host_type(Domain) of
30 {ok, HostType} ->
31 19 check_module_and_get_urls(HostType, Filename, Size, ContentType1, Timeout);
32 _ ->
33 2 {domain_not_found, "domain does not exist"}
34 end.
35
36 4 content_type(null) -> undefined;
37 4 content_type(<<>>) -> undefined;
38 13 content_type(Binary) -> Binary.
39
40 check_module_and_get_urls(HostType, Filename, Size, ContentType, Timeout) ->
41 19 case gen_mod:is_loaded(HostType, mod_http_upload) of
42 true ->
43 19 case mod_http_upload:get_urls(HostType, Filename, Size, ContentType, Timeout) of
44 {PutURL, GetURL, Headers} ->
45 15 Headers1 = lists:map(fun({Name, Value}) -> {ok, #{<<"name">> => Name, <<"value">> => Value}} end,
46 maps:to_list(Headers)),
47 15 {ok, #{<<"putUrl">> => PutURL, <<"getUrl">> => GetURL,
48 <<"headers">> => Headers1}};
49 file_too_large_error ->
50 4 {file_too_large_error,
51 "Declared file size exceeds the host's maximum file size."}
52 end;
53 false ->
54
:-(
{module_not_loaded_error, "mod_http_upload is not loaded for this host"}
55 end.
56
57 -spec generate_output_message(PutURL :: binary(),
58 GetURL :: binary(),
59 Headers :: [{ok, map()}]) -> string().
60 generate_output_message(PutURL, GetURL, Headers) ->
61
:-(
PutURLOutput = url_output("PutURL:", PutURL),
62
:-(
GetURLOutput = url_output("GetURL:", GetURL),
63
:-(
HeadersOutput = headers_output(Headers),
64
:-(
lists:flatten([PutURLOutput, GetURLOutput, HeadersOutput]).
65
66 url_output(Name, Url) ->
67
:-(
io_lib:format("~s ~s~n", [Name, Url]).
68
69 headers_output(Headers) ->
70
:-(
List = [{Name, Value} || {ok, #{<<"name">> := Name, <<"value">> := Value}} <- Headers],
71
:-(
io_lib:format("Header: ~p~n", [List]).
Line Hits Source