mirror of
https://github.com/processone/ejabberd.git
synced 2024-12-24 17:29:28 +01:00
mod_http_upload*: Remove empty lines after specs
Remove blank lines following function specifications in mod_http_upload and mod_http_upload_quota for consistency with other modules.
This commit is contained in:
parent
b2855d63a7
commit
48c5ab59f1
@ -125,7 +125,6 @@
|
||||
%% gen_mod/supervisor callbacks.
|
||||
%%--------------------------------------------------------------------
|
||||
-spec start(binary(), gen_mod:opts()) -> {ok, pid()}.
|
||||
|
||||
start(ServerHost, Opts) ->
|
||||
case gen_mod:get_opt(rm_on_unregister, Opts) of
|
||||
true ->
|
||||
@ -138,7 +137,6 @@ start(ServerHost, Opts) ->
|
||||
gen_mod:start_child(?MODULE, ServerHost, Opts, Proc).
|
||||
|
||||
-spec stop(binary()) -> ok | {error, any()}.
|
||||
|
||||
stop(ServerHost) ->
|
||||
case gen_mod:get_module_opt(ServerHost, ?MODULE, rm_on_unregister) of
|
||||
true ->
|
||||
@ -151,7 +149,6 @@ stop(ServerHost) ->
|
||||
gen_mod:stop_child(Proc).
|
||||
|
||||
-spec mod_opt_type(atom()) -> fun((term()) -> term()) | [atom()].
|
||||
|
||||
mod_opt_type(host) ->
|
||||
fun iolist_to_binary/1;
|
||||
mod_opt_type(hosts) ->
|
||||
@ -218,7 +215,6 @@ mod_opt_type(thumbnail) ->
|
||||
end.
|
||||
|
||||
-spec mod_options(binary()) -> [{atom(), any()}].
|
||||
|
||||
mod_options(_Host) ->
|
||||
[{host, <<"upload.@HOST@">>},
|
||||
{hosts, []},
|
||||
@ -238,16 +234,13 @@ mod_options(_Host) ->
|
||||
{thumbnail, true}].
|
||||
|
||||
-spec depends(binary(), gen_mod:opts()) -> [{module(), hard | soft}].
|
||||
|
||||
depends(_Host, _Opts) ->
|
||||
[].
|
||||
|
||||
%%--------------------------------------------------------------------
|
||||
%% gen_server callbacks.
|
||||
%%--------------------------------------------------------------------
|
||||
|
||||
-spec init(list()) -> {ok, state()}.
|
||||
|
||||
init([ServerHost, Opts]) ->
|
||||
process_flag(trap_exit, true),
|
||||
Hosts = gen_mod:get_opt_hosts(ServerHost, Opts),
|
||||
@ -295,7 +288,6 @@ init([ServerHost, Opts]) ->
|
||||
pos_integer() | undefined,
|
||||
pos_integer() | undefined}, state()} |
|
||||
{reply, {error, atom()}, state()} | {noreply, state()}.
|
||||
|
||||
handle_call({use_slot, Slot, Size}, _From,
|
||||
#state{file_mode = FileMode,
|
||||
dir_mode = DirMode,
|
||||
@ -325,13 +317,11 @@ handle_call(Request, From, State) ->
|
||||
{noreply, State}.
|
||||
|
||||
-spec handle_cast(_, state()) -> {noreply, state()}.
|
||||
|
||||
handle_cast(Request, State) ->
|
||||
?ERROR_MSG("Got unexpected request: ~p", [Request]),
|
||||
{noreply, State}.
|
||||
|
||||
-spec handle_info(timeout | _, state()) -> {noreply, state()}.
|
||||
|
||||
handle_info({route, #iq{lang = Lang} = Packet}, State) ->
|
||||
try xmpp:decode_els(Packet) of
|
||||
IQ ->
|
||||
@ -363,13 +353,11 @@ handle_info(Info, State) ->
|
||||
{noreply, State}.
|
||||
|
||||
-spec terminate(normal | shutdown | {shutdown, _} | _, state()) -> ok.
|
||||
|
||||
terminate(Reason, #state{server_host = ServerHost, hosts = Hosts}) ->
|
||||
?DEBUG("Stopping HTTP upload process for ~s: ~p", [ServerHost, Reason]),
|
||||
lists:foreach(fun ejabberd_router:unregister_route/1, Hosts).
|
||||
|
||||
-spec code_change({down, _} | _, state(), _) -> {ok, state()}.
|
||||
|
||||
code_change(_OldVsn, #state{server_host = ServerHost} = State, _Extra) ->
|
||||
?DEBUG("Updating HTTP upload process for ~s", [ServerHost]),
|
||||
{ok, State}.
|
||||
@ -377,10 +365,8 @@ code_change(_OldVsn, #state{server_host = ServerHost} = State, _Extra) ->
|
||||
%%--------------------------------------------------------------------
|
||||
%% ejabberd_http callback.
|
||||
%%--------------------------------------------------------------------
|
||||
|
||||
-spec process([binary()], #request{})
|
||||
-> {pos_integer(), [{binary(), binary()}], binary()}.
|
||||
|
||||
process(LocalPath, #request{method = Method, host = Host, ip = IP})
|
||||
when length(LocalPath) < 3,
|
||||
Method == 'PUT' orelse
|
||||
@ -485,9 +471,7 @@ process(_LocalPath, #request{method = Method, host = Host, ip = IP}) ->
|
||||
%%--------------------------------------------------------------------
|
||||
%% Exported utility functions.
|
||||
%%--------------------------------------------------------------------
|
||||
|
||||
-spec get_proc_name(binary(), atom()) -> atom().
|
||||
|
||||
get_proc_name(ServerHost, ModuleName) ->
|
||||
PutURL = gen_mod:get_module_opt(ServerHost, ?MODULE, put_url),
|
||||
{ok, {_Scheme, _UserInfo, Host, _Port, Path, _Query}} =
|
||||
@ -496,13 +480,11 @@ get_proc_name(ServerHost, ModuleName) ->
|
||||
gen_mod:get_module_proc(ProcPrefix, ModuleName).
|
||||
|
||||
-spec expand_home(binary()) -> binary().
|
||||
|
||||
expand_home(Input) ->
|
||||
{ok, [[Home]]} = init:get_argument(home),
|
||||
misc:expand_keyword(<<"@HOME@">>, Input, Home).
|
||||
|
||||
-spec expand_host(binary(), binary()) -> binary().
|
||||
|
||||
expand_host(Input, Host) ->
|
||||
misc:expand_keyword(<<"@HOST@">>, Input, Host).
|
||||
|
||||
@ -513,7 +495,6 @@ expand_host(Input, Host) ->
|
||||
%% XMPP request handling.
|
||||
|
||||
-spec process_iq(iq(), state()) -> {iq(), state()} | iq() | not_request.
|
||||
|
||||
process_iq(#iq{type = get, lang = Lang, sub_els = [#disco_info{}]} = IQ,
|
||||
#state{server_host = ServerHost, name = Name}) ->
|
||||
AddInfo = ejabberd_hooks:run_fold(disco_info, ServerHost, [],
|
||||
@ -541,7 +522,6 @@ process_iq(#iq{}, _State) ->
|
||||
|
||||
-spec process_slot_request(iq(), binary(), pos_integer(), binary(), binary(),
|
||||
state()) -> {iq(), state()} | iq().
|
||||
|
||||
process_slot_request(#iq{lang = Lang, from = From} = IQ,
|
||||
File, Size, CType, XMLNS,
|
||||
#state{server_host = ServerHost,
|
||||
@ -572,7 +552,6 @@ process_slot_request(#iq{lang = Lang, from = From} = IQ,
|
||||
|
||||
-spec create_slot(state(), jid(), binary(), pos_integer(), binary(), binary())
|
||||
-> {ok, slot()} | {ok, binary(), binary()} | {error, xmlel()}.
|
||||
|
||||
create_slot(#state{service_url = undefined, max_size = MaxSize},
|
||||
JID, File, Size, _ContentType, Lang) when MaxSize /= infinity,
|
||||
Size > MaxSize ->
|
||||
@ -649,25 +628,21 @@ create_slot(#state{service_url = ServiceURL},
|
||||
end.
|
||||
|
||||
-spec add_slot(slot(), pos_integer(), timer:tref(), state()) -> state().
|
||||
|
||||
add_slot(Slot, Size, Timer, #state{slots = Slots} = State) ->
|
||||
NewSlots = maps:put(Slot, {Size, Timer}, Slots),
|
||||
State#state{slots = NewSlots}.
|
||||
|
||||
-spec get_slot(slot(), state()) -> {ok, {pos_integer(), timer:tref()}} | error.
|
||||
|
||||
get_slot(Slot, #state{slots = Slots}) ->
|
||||
maps:find(Slot, Slots).
|
||||
|
||||
-spec del_slot(slot(), state()) -> state().
|
||||
|
||||
del_slot(Slot, #state{slots = Slots} = State) ->
|
||||
NewSlots = maps:remove(Slot, Slots),
|
||||
State#state{slots = NewSlots}.
|
||||
|
||||
-spec mk_slot(slot(), state(), binary()) -> upload_slot();
|
||||
(binary(), binary(), binary()) -> upload_slot().
|
||||
|
||||
mk_slot(Slot, #state{put_url = PutPrefix, get_url = GetPrefix}, XMLNS) ->
|
||||
PutURL = str:join([PutPrefix | Slot], <<$/>>),
|
||||
GetURL = str:join([GetPrefix | Slot], <<$/>>),
|
||||
@ -682,30 +657,25 @@ mk_slot(PutURL, GetURL, XMLNS) ->
|
||||
xmlns = XMLNS}.
|
||||
|
||||
-spec make_user_string(jid(), sha1 | node) -> binary().
|
||||
|
||||
make_user_string(#jid{luser = U, lserver = S}, sha1) ->
|
||||
str:sha(<<U/binary, $@, S/binary>>);
|
||||
make_user_string(#jid{luser = U}, node) ->
|
||||
replace_special_chars(U).
|
||||
|
||||
-spec make_file_string(binary()) -> binary().
|
||||
|
||||
make_file_string(File) ->
|
||||
replace_special_chars(File).
|
||||
|
||||
-spec replace_special_chars(binary()) -> binary().
|
||||
|
||||
replace_special_chars(S) ->
|
||||
re:replace(S, <<"[^\\p{Xan}_.-]">>, <<$_>>,
|
||||
[unicode, global, {return, binary}]).
|
||||
|
||||
-spec yield_content_type(binary()) -> binary().
|
||||
|
||||
yield_content_type(<<"">>) -> ?DEFAULT_CONTENT_TYPE;
|
||||
yield_content_type(Type) -> Type.
|
||||
|
||||
-spec iq_disco_info(binary(), binary(), binary(), [xdata()]) -> disco_info().
|
||||
|
||||
iq_disco_info(Host, Lang, Name, AddInfo) ->
|
||||
Form = case gen_mod:get_module_opt(Host, ?MODULE, max_size) of
|
||||
infinity ->
|
||||
@ -738,7 +708,6 @@ iq_disco_info(Host, Lang, Name, AddInfo) ->
|
||||
%% HTTP request handling.
|
||||
|
||||
-spec parse_http_request(#request{}) -> {atom(), slot()}.
|
||||
|
||||
parse_http_request(#request{host = Host, path = Path}) ->
|
||||
PrefixLength = length(Path) - 3,
|
||||
{ProcURL, Slot} = if PrefixLength > 0 ->
|
||||
@ -755,7 +724,6 @@ parse_http_request(#request{host = Host, path = Path}) ->
|
||||
integer() | undefined,
|
||||
binary(), slot(), boolean())
|
||||
-> ok | {ok, [{binary(), binary()}], binary()} | {error, term()}.
|
||||
|
||||
store_file(Path, Data, FileMode, DirMode, GetPrefix, Slot, Thumbnail) ->
|
||||
case do_store_file(Path, Data, FileMode, DirMode) of
|
||||
ok when Thumbnail ->
|
||||
@ -788,7 +756,6 @@ store_file(Path, Data, FileMode, DirMode, GetPrefix, Slot, Thumbnail) ->
|
||||
integer() | undefined,
|
||||
integer() | undefined)
|
||||
-> ok | {error, term()}.
|
||||
|
||||
do_store_file(Path, Data, FileMode, DirMode) ->
|
||||
try
|
||||
ok = filelib:ensure_dir(Path),
|
||||
@ -817,7 +784,6 @@ do_store_file(Path, Data, FileMode, DirMode) ->
|
||||
end.
|
||||
|
||||
-spec guess_content_type(binary()) -> binary().
|
||||
|
||||
guess_content_type(FileName) ->
|
||||
mod_http_fileserver:content_type(FileName,
|
||||
?DEFAULT_CONTENT_TYPE,
|
||||
@ -825,20 +791,17 @@ guess_content_type(FileName) ->
|
||||
|
||||
-spec http_response(100..599)
|
||||
-> {pos_integer(), [{binary(), binary()}], binary()}.
|
||||
|
||||
http_response(Code) ->
|
||||
http_response(Code, []).
|
||||
|
||||
-spec http_response(100..599, [{binary(), binary()}])
|
||||
-> {pos_integer(), [{binary(), binary()}], binary()}.
|
||||
|
||||
http_response(Code, ExtraHeaders) ->
|
||||
Message = <<(code_to_message(Code))/binary, $\n>>,
|
||||
http_response(Code, ExtraHeaders, Message).
|
||||
|
||||
-spec http_response(100..599, [{binary(), binary()}], binary())
|
||||
-> {pos_integer(), [{binary(), binary()}], binary()}.
|
||||
|
||||
http_response(Code, ExtraHeaders, Body) ->
|
||||
Headers = case proplists:is_defined(<<"Content-Type">>, ExtraHeaders) of
|
||||
true ->
|
||||
@ -849,7 +812,6 @@ http_response(Code, ExtraHeaders, Body) ->
|
||||
{Code, Headers, Body}.
|
||||
|
||||
-spec code_to_message(100..599) -> binary().
|
||||
|
||||
code_to_message(201) -> <<"Upload successful.">>;
|
||||
code_to_message(403) -> <<"Forbidden.">>;
|
||||
code_to_message(404) -> <<"Not found.">>;
|
||||
@ -861,9 +823,7 @@ code_to_message(_Code) -> <<"">>.
|
||||
%%--------------------------------------------------------------------
|
||||
%% Image manipulation stuff.
|
||||
%%--------------------------------------------------------------------
|
||||
|
||||
-spec identify(binary(), binary()) -> {ok, media_info()} | pass.
|
||||
|
||||
identify(Path, Data) ->
|
||||
case eimp:identify(Data) of
|
||||
{ok, Info} ->
|
||||
@ -878,7 +838,6 @@ identify(Path, Data) ->
|
||||
end.
|
||||
|
||||
-spec convert(binary(), binary(), media_info()) -> {ok, binary(), media_info()} | pass.
|
||||
|
||||
convert(Path, Data, #media_info{type = T, width = W, height = H} = Info) ->
|
||||
if W * H >= 25000000 ->
|
||||
?DEBUG("The image ~s is more than 25 Mpix", [Path]),
|
||||
@ -913,7 +872,6 @@ convert(Path, Data, #media_info{type = T, width = W, height = H} = Info) ->
|
||||
end.
|
||||
|
||||
-spec thumb_el(media_info(), binary()) -> xmlel().
|
||||
|
||||
thumb_el(#media_info{type = T, height = H, width = W}, URI) ->
|
||||
MimeType = <<"image/", (atom_to_binary(T, latin1))/binary>>,
|
||||
Thumb = #thumbnail{'media-type' = MimeType, uri = URI,
|
||||
@ -923,9 +881,7 @@ thumb_el(#media_info{type = T, height = H, width = W}, URI) ->
|
||||
%%--------------------------------------------------------------------
|
||||
%% Remove user.
|
||||
%%--------------------------------------------------------------------
|
||||
|
||||
-spec remove_user(binary(), binary()) -> ok.
|
||||
|
||||
remove_user(User, Server) ->
|
||||
ServerHost = jid:nameprep(Server),
|
||||
DocRoot = gen_mod:get_module_opt(ServerHost, ?MODULE, docroot),
|
||||
@ -945,7 +901,6 @@ remove_user(User, Server) ->
|
||||
ok.
|
||||
|
||||
-spec del_tree(file:filename_all()) -> ok | {error, term()}.
|
||||
|
||||
del_tree(Dir) when is_binary(Dir) ->
|
||||
del_tree(binary_to_list(Dir));
|
||||
del_tree(Dir) ->
|
||||
|
@ -70,19 +70,16 @@
|
||||
%% gen_mod/supervisor callbacks.
|
||||
%%--------------------------------------------------------------------
|
||||
-spec start(binary(), gen_mod:opts()) -> {ok, pid()}.
|
||||
|
||||
start(ServerHost, Opts) ->
|
||||
Proc = mod_http_upload:get_proc_name(ServerHost, ?MODULE),
|
||||
gen_mod:start_child(?MODULE, ServerHost, Opts, Proc).
|
||||
|
||||
-spec stop(binary()) -> ok | {error, any()}.
|
||||
|
||||
stop(ServerHost) ->
|
||||
Proc = mod_http_upload:get_proc_name(ServerHost, ?MODULE),
|
||||
gen_mod:stop_child(Proc).
|
||||
|
||||
-spec mod_opt_type(atom()) -> fun((term()) -> term()) | [atom()].
|
||||
|
||||
mod_opt_type(access_soft_quota) ->
|
||||
fun acl:shaper_rules_validator/1;
|
||||
mod_opt_type(access_hard_quota) ->
|
||||
@ -93,23 +90,19 @@ mod_opt_type(max_days) ->
|
||||
end.
|
||||
|
||||
-spec mod_options(binary()) -> [{atom(), any()}].
|
||||
|
||||
mod_options(_) ->
|
||||
[{access_soft_quota, soft_upload_quota},
|
||||
{access_hard_quota, hard_upload_quota},
|
||||
{max_days, infinity}].
|
||||
|
||||
-spec depends(binary(), gen_mod:opts()) -> [{module(), hard | soft}].
|
||||
|
||||
depends(_Host, _Opts) ->
|
||||
[{mod_http_upload, hard}].
|
||||
|
||||
%%--------------------------------------------------------------------
|
||||
%% gen_server callbacks.
|
||||
%%--------------------------------------------------------------------
|
||||
|
||||
-spec init(list()) -> {ok, state()}.
|
||||
|
||||
init([ServerHost, Opts]) ->
|
||||
process_flag(trap_exit, true),
|
||||
AccessSoftQuota = gen_mod:get_opt(access_soft_quota, Opts),
|
||||
@ -134,13 +127,11 @@ init([ServerHost, Opts]) ->
|
||||
timers = Timers}}.
|
||||
|
||||
-spec handle_call(_, {pid(), _}, state()) -> {noreply, state()}.
|
||||
|
||||
handle_call(Request, From, State) ->
|
||||
?ERROR_MSG("Got unexpected request from ~p: ~p", [From, Request]),
|
||||
{noreply, State}.
|
||||
|
||||
-spec handle_cast(_, state()) -> {noreply, state()}.
|
||||
|
||||
handle_cast({handle_slot_request, #jid{user = U, server = S} = JID, Path, Size},
|
||||
#state{server_host = ServerHost,
|
||||
access_soft_quota = AccessSoftQuota,
|
||||
@ -198,7 +189,6 @@ handle_cast(Request, State) ->
|
||||
{noreply, State}.
|
||||
|
||||
-spec handle_info(_, state()) -> {noreply, state()}.
|
||||
|
||||
handle_info(sweep, #state{server_host = ServerHost,
|
||||
docroot = DocRoot,
|
||||
max_days = MaxDays} = State)
|
||||
@ -225,7 +215,6 @@ handle_info(Info, State) ->
|
||||
{noreply, State}.
|
||||
|
||||
-spec terminate(normal | shutdown | {shutdown, _} | _, state()) -> ok.
|
||||
|
||||
terminate(Reason, #state{server_host = ServerHost, timers = Timers}) ->
|
||||
?DEBUG("Stopping upload quota process for ~s: ~p", [ServerHost, Reason]),
|
||||
ejabberd_hooks:delete(http_upload_slot_request, ServerHost, ?MODULE,
|
||||
@ -233,7 +222,6 @@ terminate(Reason, #state{server_host = ServerHost, timers = Timers}) ->
|
||||
lists:foreach(fun timer:cancel/1, Timers).
|
||||
|
||||
-spec code_change({down, _} | _, state(), _) -> {ok, state()}.
|
||||
|
||||
code_change(_OldVsn, #state{server_host = ServerHost} = State, _Extra) ->
|
||||
?DEBUG("Updating upload quota process for ~s", [ServerHost]),
|
||||
{ok, State}.
|
||||
@ -241,10 +229,8 @@ code_change(_OldVsn, #state{server_host = ServerHost} = State, _Extra) ->
|
||||
%%--------------------------------------------------------------------
|
||||
%% ejabberd_hooks callback.
|
||||
%%--------------------------------------------------------------------
|
||||
|
||||
-spec handle_slot_request(allow | deny, jid(), binary(),
|
||||
non_neg_integer(), binary()) -> allow | deny.
|
||||
|
||||
handle_slot_request(allow, #jid{lserver = ServerHost} = JID, Path, Size,
|
||||
_Lang) ->
|
||||
Proc = mod_http_upload:get_proc_name(ServerHost, ?MODULE),
|
||||
@ -255,12 +241,10 @@ handle_slot_request(Acc, _JID, _Path, _Size, _Lang) -> Acc.
|
||||
%%--------------------------------------------------------------------
|
||||
%% Internal functions.
|
||||
%%--------------------------------------------------------------------
|
||||
|
||||
-spec enforce_quota(file:filename_all(), non_neg_integer(),
|
||||
non_neg_integer() | undefined, non_neg_integer(),
|
||||
non_neg_integer())
|
||||
-> non_neg_integer().
|
||||
|
||||
enforce_quota(_UserDir, SlotSize, OldSize, _MinSize, MaxSize)
|
||||
when is_integer(OldSize), OldSize + SlotSize =< MaxSize ->
|
||||
OldSize + SlotSize;
|
||||
@ -286,7 +270,6 @@ enforce_quota(UserDir, SlotSize, _OldSize, MinSize, MaxSize) ->
|
||||
end.
|
||||
|
||||
-spec delete_old_files(file:filename_all(), integer()) -> ok.
|
||||
|
||||
delete_old_files(UserDir, CutOff) ->
|
||||
FileInfo = gather_file_info(UserDir),
|
||||
case [Path || {Path, _Size, Time} <- FileInfo, Time < CutOff] of
|
||||
@ -299,7 +282,6 @@ delete_old_files(UserDir, CutOff) ->
|
||||
|
||||
-spec gather_file_info(file:filename_all())
|
||||
-> [{binary(), non_neg_integer(), non_neg_integer()}].
|
||||
|
||||
gather_file_info(Dir) when is_binary(Dir) ->
|
||||
gather_file_info(binary_to_list(Dir));
|
||||
gather_file_info(Dir) ->
|
||||
@ -334,7 +316,6 @@ gather_file_info(Dir) ->
|
||||
end.
|
||||
|
||||
-spec del_file_and_dir(file:name_all()) -> ok.
|
||||
|
||||
del_file_and_dir(File) ->
|
||||
case file:delete(File) of
|
||||
ok ->
|
||||
@ -351,7 +332,6 @@ del_file_and_dir(File) ->
|
||||
end.
|
||||
|
||||
-spec secs_since_epoch() -> non_neg_integer().
|
||||
|
||||
secs_since_epoch() ->
|
||||
{MegaSecs, Secs, _MicroSecs} = os:timestamp(),
|
||||
MegaSecs * 1000000 + Secs.
|
||||
|
Loading…
Reference in New Issue
Block a user