24
1
mirror of https://github.com/processone/ejabberd.git synced 2024-06-14 22:00:16 +02:00

* src/mod_muc/mod_muc_room.erl: More accurate invitation errors

(thanks to Magnus Henoch)

SVN Revision: 757
This commit is contained in:
Alexey Shchepin 2007-05-03 04:07:29 +00:00
parent 3acce9763a
commit b9e7fa2ef1
2 changed files with 67 additions and 67 deletions

View File

@ -1,3 +1,8 @@
2007-05-03 Alexey Shchepin <alexey@sevcom.net>
* src/mod_muc/mod_muc_room.erl: More accurate invitation errors
(thanks to Magnus Henoch)
2007-04-26 Alexey Shchepin <alexey@sevcom.net> 2007-04-26 Alexey Shchepin <alexey@sevcom.net>
* src/mod_roster_odbc.erl: Don't deliver roster items in "None + * src/mod_roster_odbc.erl: Don't deliver roster items in "None +

View File

@ -249,11 +249,10 @@ normal_state({route, From, "",
From, Err), From, Err),
{next_state, normal_state, StateData}; {next_state, normal_state, StateData};
Type when (Type == "") or (Type == "normal") -> Type when (Type == "") or (Type == "normal") ->
case check_invitation(From, Els, StateData) of case catch check_invitation(From, Els, StateData) of
error -> {error, Error} ->
ErrText = "It is not allowed to send normal messages to the conference",
Err = jlib:make_error_reply( Err = jlib:make_error_reply(
Packet, ?ERRT_NOT_ACCEPTABLE(Lang, ErrText)), Packet, Error),
ejabberd_router:route( ejabberd_router:route(
StateData#state.jid, StateData#state.jid,
From, Err), From, Err),
@ -2517,18 +2516,33 @@ check_invitation(From, Els, StateData) ->
FAffiliation = get_affiliation(From, StateData), FAffiliation = get_affiliation(From, StateData),
CanInvite = (StateData#state.config)#config.allow_user_invites CanInvite = (StateData#state.config)#config.allow_user_invites
orelse (FAffiliation == admin) orelse (FAffiliation == owner), orelse (FAffiliation == admin) orelse (FAffiliation == owner),
case xml:remove_cdata(Els) of InviteEl = case xml:remove_cdata(Els) of
[{xmlelement, "x", _Attrs1, Els1} = XEl] -> [{xmlelement, "x", _Attrs1, Els1} = XEl] ->
case xml:get_tag_attr_s("xmlns", XEl) of case xml:get_tag_attr_s("xmlns", XEl) of
?NS_MUC_USER -> ?NS_MUC_USER ->
ok;
_ ->
throw({error, ?ERR_BAD_REQUEST})
end,
case xml:remove_cdata(Els1) of case xml:remove_cdata(Els1) of
[{xmlelement, "invite", Attrs2, _Els2} = InviteEl] -> [{xmlelement, "invite", _Attrs2, _Els2} = InviteEl1] ->
case jlib:string_to_jid( InviteEl1;
xml:get_attr_s("to", Attrs2)) of _ ->
throw({error, ?ERR_BAD_REQUEST})
end;
_ ->
throw({error, ?ERR_BAD_REQUEST})
end,
JID = case jlib:string_to_jid(
xml:get_tag_attr_s("to", InviteEl)) of
error -> error ->
error; throw({error, ?ERR_JID_MALFORMED});
JID -> JID1 ->
JID1
end,
case CanInvite of case CanInvite of
false ->
throw({error, ?ERR_NOT_ALLOWED});
true -> true ->
Reason = Reason =
xml:get_path_s( xml:get_path_s(
@ -2551,35 +2565,16 @@ check_invitation(From, Els, StateData) ->
Msg = Msg =
{xmlelement, "message", {xmlelement, "message",
[{"type", "normal"}], [{"type", "normal"}],
[{xmlelement, "x", [{xmlelement, "x", [{"xmlns", ?NS_MUC_USER}], IEl ++ PasswdEl},
[{"xmlns", ?NS_MUC_USER}],
IEl ++ PasswdEl},
{xmlelement, "x", {xmlelement, "x",
[{"xmlns", [{"xmlns", ?NS_XCONFERENCE},
?NS_XCONFERENCE}, {"jid", jlib:jid_to_string(
{"jid",
jlib:jid_to_string(
{StateData#state.room, {StateData#state.room,
StateData#state.host, StateData#state.host,
""})}], ""})}],
[{xmlcdata, Reason}]}]}, [{xmlcdata, Reason}]}]},
ejabberd_router:route( ejabberd_router:route(StateData#state.jid, JID, Msg),
StateData#state.jid, JID
JID,
Msg),
JID;
_ ->
error
end
end;
_ ->
error
end;
_ ->
error
end;
_ ->
error
end. end.