* src/mod_muc/mod_muc_room.erl: MUC kicks a participant if sends a

private message with type=error (EJAB-496)

SVN Revision: 1142
This commit is contained in:
Badlop 2008-01-09 16:01:16 +00:00
parent bceea5fc73
commit 5868a9d1a5
2 changed files with 49 additions and 62 deletions

View File

@ -1,3 +1,8 @@
2008-01-09 Badlop <badlop@process-one.net>
* src/mod_muc/mod_muc_room.erl: MUC kicks a participant if sends a
private message with type=error (EJAB-496)
2008-01-08 Badlop <badlop@process-one.net> 2008-01-08 Badlop <badlop@process-one.net>
* src/ejabberdctl.template: Removed the option ERL_FULLSWEEP_AFTER * src/ejabberdctl.template: Removed the option ERL_FULLSWEEP_AFTER

View File

@ -469,71 +469,53 @@ normal_state({route, From, ToNick,
StateData) -> StateData) ->
Type = xml:get_attr_s("type", Attrs), Type = xml:get_attr_s("type", Attrs),
Lang = xml:get_attr_s("xml:lang", Attrs), Lang = xml:get_attr_s("xml:lang", Attrs),
case Type of case (StateData#state.config)#config.allow_private_messages
"error" -> andalso is_user_online(From, StateData) of
case is_user_online(From, StateData) of true ->
true -> case Type of
NewState = "groupchat" ->
add_user_presence_un( ErrText = "It is not allowed to send private "
From, "messages of type \"groupchat\"",
{xmlelement, "presence", Err = jlib:make_error_reply(
[{"type", "unavailable"}], []}, Packet, ?ERRT_BAD_REQUEST(Lang, ErrText)),
StateData), ejabberd_router:route(
send_new_presence(From, NewState), jlib:jid_replace_resource(
{next_state, normal_state, StateData#state.jid,
remove_online_user(From, NewState)}; ToNick),
From, Err);
_ -> _ ->
{next_state, normal_state, StateData} case find_jid_by_nick(ToNick, StateData) of
false ->
ErrText = "Recipient is not in the conference room",
Err = jlib:make_error_reply(
Packet, ?ERRT_ITEM_NOT_FOUND(Lang, ErrText)),
ejabberd_router:route(
jlib:jid_replace_resource(
StateData#state.jid,
ToNick),
From, Err);
ToJID ->
{ok, #user{nick = FromNick}} =
?DICT:find(jlib:jid_tolower(From),
StateData#state.users),
ejabberd_router:route(
jlib:jid_replace_resource(
StateData#state.jid,
FromNick),
ToJID, Packet)
end
end; end;
_ -> _ ->
case (StateData#state.config)#config.allow_private_messages ErrText = "Only occupants are allowed to send messages to the conference",
andalso is_user_online(From, StateData) of Err = jlib:make_error_reply(
true -> Packet, ?ERRT_NOT_ACCEPTABLE(Lang, ErrText)),
case Type of ejabberd_router:route(
"groupchat" -> jlib:jid_replace_resource(
ErrText = "It is not allowed to send private " StateData#state.jid,
"messages of type \"groupchat\"", ToNick),
Err = jlib:make_error_reply( From, Err)
Packet, ?ERRT_BAD_REQUEST(Lang, ErrText)), end,
ejabberd_router:route( {next_state, normal_state, StateData};
jlib:jid_replace_resource(
StateData#state.jid,
ToNick),
From, Err);
_ ->
case find_jid_by_nick(ToNick, StateData) of
false ->
ErrText = "Recipient is not in the conference room",
Err = jlib:make_error_reply(
Packet, ?ERRT_ITEM_NOT_FOUND(Lang, ErrText)),
ejabberd_router:route(
jlib:jid_replace_resource(
StateData#state.jid,
ToNick),
From, Err);
ToJID ->
{ok, #user{nick = FromNick}} =
?DICT:find(jlib:jid_tolower(From),
StateData#state.users),
ejabberd_router:route(
jlib:jid_replace_resource(
StateData#state.jid,
FromNick),
ToJID, Packet)
end
end;
_ ->
ErrText = "Only occupants are allowed to send messages to the conference",
Err = jlib:make_error_reply(
Packet, ?ERRT_NOT_ACCEPTABLE(Lang, ErrText)),
ejabberd_router:route(
jlib:jid_replace_resource(
StateData#state.jid,
ToNick),
From, Err)
end,
{next_state, normal_state, StateData}
end;
normal_state({route, From, ToNick, normal_state({route, From, ToNick,
{xmlelement, "iq", Attrs, _Els} = Packet}, {xmlelement, "iq", Attrs, _Els} = Packet},