summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGeoff Cant <geoff.cant@process-one.net>2008-07-23 16:40:17 +0000
committerGeoff Cant <geoff.cant@process-one.net>2008-07-23 16:40:17 +0000
commit2c3260d07bb3835a21af8a093d684c0a405a863e (patch)
tree97d26b924ac44dad162be423a0e694998efe4c5a /src
parentImplementing muc_room visitor presence restrictions. (EJAB-624) (diff)
Renaming allow_visitor_presence to allow_visitor_status (EJAB-624).
allow_visitor_status when false will strip status message tags from visitor presence broadcasts in muc rooms. SVN Revision: 1477
Diffstat (limited to 'src')
-rw-r--r--src/mod_muc/mod_muc_room.erl36
1 files changed, 17 insertions, 19 deletions
diff --git a/src/mod_muc/mod_muc_room.erl b/src/mod_muc/mod_muc_room.erl
index e221cffd..2e8fcc0b 100644
--- a/src/mod_muc/mod_muc_room.erl
+++ b/src/mod_muc/mod_muc_room.erl
@@ -985,25 +985,16 @@ process_presence(From, Nick, {xmlelement, "presence", Attrs, _Els} = Packet,
change_nick(From, Nick, StateData)
end;
_NotNickChange ->
- case {(StateData#state.config)#config.allow_visitor_presence,
- is_visitor(From, StateData)} of
- {false, true} ->
- ErrText = "Visitors are not allowed to update their presence in this room",
- Err = jlib:make_error_reply(
- Packet,
- ?ERRT_NOT_ALLOWED(Lang, ErrText)),
- ejabberd_router:route(
- % TODO: s/Nick/""/
- jlib:jid_replace_resource(
- StateData#state.jid,
- Nick),
- From, Err),
- StateData;
- _Allowed ->
- NewState = add_user_presence(From, Packet, StateData),
- send_new_presence(From, NewState),
- NewState
- end
+ Stanza = case {(StateData#state.config)#config.allow_visitor_presence,
+ is_visitor(From, StateData)} of
+ {false, true} ->
+ strip_status(Packet);
+ _Allowed ->
+ Packet
+ end,
+ NewState = add_user_presence(From, Stanza, StateData),
+ send_new_presence(From, NewState),
+ NewState
end;
_ ->
add_new_user(From, Nick, Packet, StateData)
@@ -1388,6 +1379,13 @@ filter_presence({xmlelement, "presence", Attrs, Els}) ->
end, Els),
{xmlelement, "presence", Attrs, FEls}.
+strip_status({xmlelement, "presence", Attrs, Els}) ->
+ FEls = lists:filter(
+ fun({xmlelement, "status", _Attrs1, _Els1}) ->
+ false;
+ (_) -> true
+ end, Els),
+ {xmlelement, "presence", Attrs, FEls}.
add_user_presence(JID, Presence, StateData) ->
LJID = jlib:jid_tolower(JID),