summaryrefslogtreecommitdiff
path: root/src/mod_muc/mod_muc_room.erl
diff options
context:
space:
mode:
authorBadlop <badlop@process-one.net>2009-04-22 12:05:10 +0000
committerBadlop <badlop@process-one.net>2009-04-22 12:05:10 +0000
commitb59ecb83e8df04316ad8656444f7ded0fd610fee (patch)
treed82c10f84c6e703d1c772af6aeefdbe7c557bb36 /src/mod_muc/mod_muc_room.erl
parent* src/cyrsasl.erl: Change API of check_password: pass a function (diff)
* src/mod_muc/mod_muc.erl: Limit number of characters in Room ID,
Name and Description (EJAB-899) * src/mod_muc/mod_muc_room.erl: Likewise * doc/guide.tex: Likewise * doc/guide.html: Likewise SVN Revision: 2034
Diffstat (limited to 'src/mod_muc/mod_muc_room.erl')
-rw-r--r--src/mod_muc/mod_muc_room.erl52
1 files changed, 41 insertions, 11 deletions
diff --git a/src/mod_muc/mod_muc_room.erl b/src/mod_muc/mod_muc_room.erl
index 2fc518c8..63455293 100644
--- a/src/mod_muc/mod_muc_room.erl
+++ b/src/mod_muc/mod_muc_room.erl
@@ -2625,11 +2625,16 @@ process_iq_owner(From, set, Lang, SubEl, StateData) ->
{?NS_XDATA, "cancel"} ->
{result, [], StateData};
{?NS_XDATA, "submit"} ->
- case {check_allowed_log_change(XEl, StateData, From),
- check_allowed_persistent_change(XEl, StateData, From)} of
- {allow, allow} -> set_config(XEl, StateData);
- _ -> {error, ?ERR_BAD_REQUEST}
- end;
+ case is_allowed_log_change(XEl, StateData, From)
+ andalso
+ is_allowed_persistent_change(XEl, StateData,
+ From)
+ andalso
+ is_allowed_room_name_desc_limits(XEl,
+ StateData) of
+ true -> set_config(XEl, StateData);
+ false -> {error, ?ERR_BAD_REQUEST}
+ end;
_ ->
{error, ?ERR_BAD_REQUEST}
end;
@@ -2681,26 +2686,51 @@ process_iq_owner(From, get, Lang, SubEl, StateData) ->
{error, ?ERRT_FORBIDDEN(Lang, ErrText)}
end.
-check_allowed_log_change(XEl, StateData, From) ->
+is_allowed_log_change(XEl, StateData, From) ->
case lists:keymember("muc#roomconfig_enablelogging", 1,
jlib:parse_xdata_submit(XEl)) of
false ->
- allow;
+ true;
true ->
- mod_muc_log:check_access_log(
- StateData#state.server_host, From)
+ (allow == mod_muc_log:check_access_log(
+ StateData#state.server_host, From))
end.
-check_allowed_persistent_change(XEl, StateData, From) ->
+is_allowed_persistent_change(XEl, StateData, From) ->
case lists:keymember("muc#roomconfig_persistentroom", 1,
jlib:parse_xdata_submit(XEl)) of
false ->
- allow;
+ true;
true ->
{_AccessRoute, _AccessCreate, _AccessAdmin, AccessPersistent} = StateData#state.access,
acl:match_rule(StateData#state.server_host, AccessPersistent, From)
end.
+%% Check if the Room Name and Room Description defined in the Data Form
+%% are conformant to the configured limits
+is_allowed_room_name_desc_limits(XEl, StateData) ->
+ IsNameAccepted =
+ case lists:keysearch("muc#roomconfig_roomname", 1,
+ jlib:parse_xdata_submit(XEl)) of
+ {value, {_, [N]}} ->
+ length(N) =< gen_mod:get_module_opt(StateData#state.server_host,
+ mod_muc, max_room_name,
+ infinite);
+ _ ->
+ true
+ end,
+ IsDescAccepted =
+ case lists:keysearch("muc#roomconfig_roomdesc", 1,
+ jlib:parse_xdata_submit(XEl)) of
+ {value, {_, [D]}} ->
+ length(D) =< gen_mod:get_module_opt(StateData#state.server_host,
+ mod_muc, max_room_desc,
+ infinite);
+ _ ->
+ true
+ end,
+ IsNameAccepted and IsDescAccepted.
+
-define(XFIELD(Type, Label, Var, Val),
{xmlelement, "field", [{"type", Type},
{"label", translate:translate(Lang, Label)},