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) -> |
11 |
9 |
case get_urls(Domain, Filename, Size, ContentType, Timeout) of |
12 |
|
{ok, #{<<"PutUrl">> := PutURL, <<"GetUrl">> := GetURL, <<"Header">> := Header}} -> |
13 |
4 |
{ok, generate_output_message(PutURL, GetURL, Header)}; |
14 |
|
{_, Message} -> |
15 |
5 |
{error, Message} |
16 |
|
end. |
17 |
|
|
18 |
|
-spec get_urls(Domain :: jid:lserver(), Filename :: binary(), Size :: pos_integer(), |
19 |
|
ContentType :: binary() | undefined, Timeout :: pos_integer()) -> |
20 |
|
{ok | size_error | timeout_error | module_not_loaded_error | domain_not_found | |
21 |
|
file_too_large_error, string()} | {ok, #{binary() => binary() | string()}}. |
22 |
|
get_urls(_Domain, _Filename, Size, _ContentType, _Timeout) when Size =< 0 -> |
23 |
4 |
{size_error, "size must be positive integer"}; |
24 |
|
get_urls(_Domain, _Filename, _Size, _ContentType, Timeout) when Timeout =< 0 -> |
25 |
4 |
{timeout_error, "timeout must be positive integer"}; |
26 |
|
get_urls(Domain, Filename, Size, <<>>, Timeout) -> |
27 |
2 |
get_urls(Domain, Filename, Size, undefined, Timeout); |
28 |
|
get_urls(Domain, Filename, Size, ContentType, Timeout) -> |
29 |
12 |
case mongoose_domain_api:get_domain_host_type(Domain) of |
30 |
|
{ok, HostType} -> |
31 |
11 |
check_module_and_get_urls(HostType, Filename, Size, ContentType, Timeout); |
32 |
|
_ -> |
33 |
1 |
{domain_not_found, "domain does not exist"} |
34 |
|
end. |
35 |
|
|
36 |
|
check_module_and_get_urls(HostType, Filename, Size, ContentType, Timeout) -> |
37 |
11 |
case gen_mod:is_loaded(HostType, mod_http_upload) of |
38 |
|
true -> |
39 |
8 |
case mod_http_upload:get_urls(HostType, Filename, Size, ContentType, Timeout) of |
40 |
|
{PutURL, GetURL, Header} -> |
41 |
6 |
{ok, #{<<"PutUrl">> => PutURL, <<"GetUrl">> => GetURL, |
42 |
|
<<"Header">> => header_output(Header)}}; |
43 |
|
file_too_large_error -> |
44 |
2 |
{file_too_large_error, |
45 |
|
"Declared file size exceeds the host's maximum file size."} |
46 |
|
end; |
47 |
|
false -> |
48 |
3 |
{module_not_loaded_error, "mod_http_upload is not loaded for this host"} |
49 |
|
end. |
50 |
|
|
51 |
|
-spec generate_output_message(PutURL :: binary(), GetURL :: binary(), |
52 |
|
Header :: string()) -> string(). |
53 |
|
generate_output_message(PutURL, GetURL, Header) -> |
54 |
4 |
PutURLOutput = url_output("PutURL:", PutURL), |
55 |
4 |
GetURLOutput = url_output("GetURL:", GetURL), |
56 |
4 |
lists:flatten([PutURLOutput, GetURLOutput, Header]). |
57 |
|
|
58 |
|
url_output(Name, Url) -> |
59 |
8 |
io_lib:format("~s ~s~n", [Name, Url]). |
60 |
|
|
61 |
6 |
header_output(Header) when Header =:= #{} -> []; |
62 |
|
header_output(Header) -> |
63 |
:-( |
io_lib:format("Header: ~p~n", [maps:to_list(Header)]). |