1 |
|
-module(service_admin_extra_upload). |
2 |
|
|
3 |
|
-include("ejabberd_commands.hrl"). |
4 |
|
|
5 |
|
-export([commands/0, get_urls/5]). |
6 |
|
|
7 |
|
-ignore_xref([commands/0, get_urls/5]). |
8 |
|
|
9 |
|
-spec commands() -> [ejabberd_commands:cmd()]. |
10 |
146 |
commands() -> [ |
11 |
|
#ejabberd_commands{ |
12 |
|
name = http_upload, |
13 |
|
tags = [http, upload], |
14 |
|
desc = "Generate upload/download URLs for the file", |
15 |
|
longdesc = "Returns upload/download URLs generated by mod_http_upload. Example:\n" |
16 |
|
" mongooseimctl http_upload localhost tmp.txt 5 '' 60", |
17 |
|
module = ?MODULE, |
18 |
|
function = get_urls, |
19 |
|
args = [{domain, binary}, {file_name, binary}, {size, integer}, |
20 |
|
{content_type, binary}, {timeout, integer}], |
21 |
|
result = {res, restuple} |
22 |
|
} |
23 |
|
]. |
24 |
|
|
25 |
|
-spec get_urls(Domain :: jid:lserver(), Filename :: binary(), Size :: pos_integer(), |
26 |
|
ContentType :: binary() | undefined, Timeout :: pos_integer()) -> |
27 |
|
{ok, string()} | {error, string()}. |
28 |
|
get_urls(_Domain, _Filename, Size, _ContentType, _Timeout) when Size =< 0-> |
29 |
2 |
{error, "size must be positive integer"}; |
30 |
|
get_urls(_Domain, _Filename, _Size, _ContentType, Timeout) when Timeout =< 0-> |
31 |
2 |
{error, "timeout must be positive integer"}; |
32 |
|
get_urls(Domain, Filename, Size, <<"">>, Timeout) -> |
33 |
2 |
get_urls(Domain, Filename, Size, undefined, Timeout); |
34 |
|
get_urls(Domain, Filename, Size, ContentType, Timeout) -> |
35 |
5 |
{ok, HostType} = mongoose_domain_api:get_domain_host_type(Domain), |
36 |
5 |
case gen_mod:is_loaded(HostType, mod_http_upload) of |
37 |
|
true -> |
38 |
4 |
{PutURL, GetURL, Header} = |
39 |
|
mod_http_upload:get_urls(HostType, Filename, Size, ContentType, Timeout), |
40 |
4 |
{ok, generate_output_message(PutURL, GetURL, Header)}; |
41 |
|
false -> |
42 |
1 |
{error, "mod_http_upload is not loaded for this host"} |
43 |
|
end. |
44 |
|
|
45 |
|
-spec generate_output_message(PutURL :: binary(), GetURL :: binary(), |
46 |
|
Headers :: #{binary() => binary()}) -> string(). |
47 |
|
generate_output_message(PutURL, GetURL, Header) -> |
48 |
4 |
PutURLOutput = url_output("PutURL:", PutURL), |
49 |
4 |
GetURLOutput = url_output("GetURL:", GetURL), |
50 |
4 |
HeaderOutput = header_output(Header), |
51 |
4 |
lists:flatten([PutURLOutput, GetURLOutput, HeaderOutput]). |
52 |
|
|
53 |
|
url_output(Name, Url) -> |
54 |
8 |
io_lib:format("~s ~s~n", [Name, Url]). |
55 |
|
|
56 |
4 |
header_output(Header) when Header =:= #{} -> []; |
57 |
|
header_output(Header) -> |
58 |
:-( |
io_lib:format("Header: ~p~n", [maps:to_list(Header)]). |