mirror of
https://github.com/processone/ejabberd.git
synced 2024-06-14 22:00:16 +02:00
Add option to mod_offline to make it not bounce mucsub/groupchat messages
This commit is contained in:
parent
0715e62a41
commit
89db022da4
23
src/misc.erl
23
src/misc.erl
|
@ -38,7 +38,8 @@
|
||||||
compile_exprs/2, join_atoms/2, try_read_file/1, get_descr/2,
|
compile_exprs/2, join_atoms/2, try_read_file/1, get_descr/2,
|
||||||
css_dir/0, img_dir/0, js_dir/0, msgs_dir/0, sql_dir/0, lua_dir/0,
|
css_dir/0, img_dir/0, js_dir/0, msgs_dir/0, sql_dir/0, lua_dir/0,
|
||||||
read_css/1, read_img/1, read_js/1, read_lua/1, try_url/1,
|
read_css/1, read_img/1, read_js/1, read_lua/1, try_url/1,
|
||||||
intersection/2, format_val/1, cancel_timer/1, unique_timestamp/0]).
|
intersection/2, format_val/1, cancel_timer/1, unique_timestamp/0,
|
||||||
|
is_mucsub_message/1]).
|
||||||
|
|
||||||
%% Deprecated functions
|
%% Deprecated functions
|
||||||
-export([decode_base64/1, encode_base64/1]).
|
-export([decode_base64/1, encode_base64/1]).
|
||||||
|
@ -109,6 +110,26 @@ unwrap_mucsub_message(#message{} = OuterMsg) ->
|
||||||
unwrap_mucsub_message(_Packet) ->
|
unwrap_mucsub_message(_Packet) ->
|
||||||
false.
|
false.
|
||||||
|
|
||||||
|
-spec is_mucsub_message(xmpp_element()) -> boolean().
|
||||||
|
is_mucsub_message(#message{} = OuterMsg) ->
|
||||||
|
case xmpp:get_subtag(OuterMsg, #ps_event{}) of
|
||||||
|
#ps_event{
|
||||||
|
items = #ps_items{
|
||||||
|
node = Node}}
|
||||||
|
when Node == ?NS_MUCSUB_NODES_MESSAGES;
|
||||||
|
Node == ?NS_MUCSUB_NODES_SUBJECT;
|
||||||
|
Node == ?NS_MUCSUB_NODES_AFFILIATIONS;
|
||||||
|
Node == ?NS_MUCSUB_NODES_CONFIG;
|
||||||
|
Node == ?NS_MUCSUB_NODES_PARTICIPANTS;
|
||||||
|
Node == ?NS_MUCSUB_NODES_PRESENCE;
|
||||||
|
Node == ?NS_MUCSUB_NODES_SUBSCRIBERS ->
|
||||||
|
true;
|
||||||
|
_ ->
|
||||||
|
false
|
||||||
|
end;
|
||||||
|
is_mucsub_message(_Packet) ->
|
||||||
|
false.
|
||||||
|
|
||||||
-spec is_standalone_chat_state(stanza()) -> boolean().
|
-spec is_standalone_chat_state(stanza()) -> boolean().
|
||||||
is_standalone_chat_state(Stanza) ->
|
is_standalone_chat_state(Stanza) ->
|
||||||
case unwrap_carbon(Stanza) of
|
case unwrap_carbon(Stanza) of
|
||||||
|
|
|
@ -576,19 +576,42 @@ remove_user(User, Server) ->
|
||||||
|
|
||||||
%% Helper functions:
|
%% Helper functions:
|
||||||
|
|
||||||
|
-spec check_if_message_should_be_bounced(message()) -> boolean().
|
||||||
|
check_if_message_should_be_bounced(Packet) ->
|
||||||
|
case Packet of
|
||||||
|
#message{type = groupchat, to = #jid{lserver = LServer}} ->
|
||||||
|
gen_mod:get_module_opt(LServer, ?MODULE, bounce_groupchat);
|
||||||
|
#message{to = #jid{lserver = LServer}} ->
|
||||||
|
case misc:is_mucsub_message(Packet) of
|
||||||
|
true ->
|
||||||
|
gen_mod:get_module_opt(LServer, ?MODULE, bounce_groupchat);
|
||||||
|
_ ->
|
||||||
|
true
|
||||||
|
end;
|
||||||
|
_ ->
|
||||||
|
true
|
||||||
|
end.
|
||||||
|
|
||||||
%% Warn senders that their messages have been discarded:
|
%% Warn senders that their messages have been discarded:
|
||||||
|
|
||||||
-spec discard_warn_sender(message(), full | any()) -> ok.
|
-spec discard_warn_sender(message(), full | any()) -> ok.
|
||||||
discard_warn_sender(Packet, full) ->
|
discard_warn_sender(Packet, Reason) ->
|
||||||
ErrText = <<"Your contact offline message queue is "
|
case check_if_message_should_be_bounced(Packet) of
|
||||||
"full. The message has been discarded.">>,
|
true ->
|
||||||
Lang = xmpp:get_lang(Packet),
|
Lang = xmpp:get_lang(Packet),
|
||||||
Err = xmpp:err_resource_constraint(ErrText, Lang),
|
Err = case Reason of
|
||||||
ejabberd_router:route_error(Packet, Err);
|
full ->
|
||||||
discard_warn_sender(Packet, _) ->
|
ErrText = <<"Your contact offline message queue is "
|
||||||
ErrText = <<"Database failure">>,
|
"full. The message has been discarded.">>,
|
||||||
Lang = xmpp:get_lang(Packet),
|
xmpp:err_resource_constraint(ErrText, Lang);
|
||||||
Err = xmpp:err_internal_server_error(ErrText, Lang),
|
_ ->
|
||||||
ejabberd_router:route_error(Packet, Err).
|
ErrText = <<"Database failure">>,
|
||||||
|
xmpp:err_internal_server_error(ErrText, Lang)
|
||||||
|
end,
|
||||||
|
ejabberd_router:route_error(Packet, Err);
|
||||||
|
_ ->
|
||||||
|
ok
|
||||||
|
end.
|
||||||
|
|
||||||
webadmin_page(_, Host,
|
webadmin_page(_, Host,
|
||||||
#request{us = _US, path = [<<"user">>, U, <<"queue">>],
|
#request{us = _US, path = [<<"user">>, U, <<"queue">>],
|
||||||
|
@ -855,6 +878,8 @@ mod_opt_type(access_max_user_messages) ->
|
||||||
mod_opt_type(db_type) -> fun(T) -> ejabberd_config:v_db(?MODULE, T) end;
|
mod_opt_type(db_type) -> fun(T) -> ejabberd_config:v_db(?MODULE, T) end;
|
||||||
mod_opt_type(store_groupchat) ->
|
mod_opt_type(store_groupchat) ->
|
||||||
fun(V) when is_boolean(V) -> V end;
|
fun(V) when is_boolean(V) -> V end;
|
||||||
|
mod_opt_type(bounce_groupchat) ->
|
||||||
|
fun(V) when is_boolean(V) -> V end;
|
||||||
mod_opt_type(store_empty_body) ->
|
mod_opt_type(store_empty_body) ->
|
||||||
fun (V) when is_boolean(V) -> V;
|
fun (V) when is_boolean(V) -> V;
|
||||||
(unless_chat_state) -> unless_chat_state
|
(unless_chat_state) -> unless_chat_state
|
||||||
|
@ -864,4 +889,5 @@ mod_options(Host) ->
|
||||||
[{db_type, ejabberd_config:default_db(Host, ?MODULE)},
|
[{db_type, ejabberd_config:default_db(Host, ?MODULE)},
|
||||||
{access_max_user_messages, max_user_offline_messages},
|
{access_max_user_messages, max_user_offline_messages},
|
||||||
{store_empty_body, unless_chat_state},
|
{store_empty_body, unless_chat_state},
|
||||||
|
{bounce_groupchat, true},
|
||||||
{store_groupchat, false}].
|
{store_groupchat, false}].
|
||||||
|
|
Loading…
Reference in New Issue
Block a user