aboutsummaryrefslogtreecommitdiff
path: root/src/mod_muc.erl
diff options
context:
space:
mode:
Diffstat (limited to 'src/mod_muc.erl')
-rw-r--r--src/mod_muc.erl21
1 files changed, 15 insertions, 6 deletions
diff --git a/src/mod_muc.erl b/src/mod_muc.erl
index f75981736..d50e6552e 100644
--- a/src/mod_muc.erl
+++ b/src/mod_muc.erl
@@ -556,11 +556,17 @@ route_to_room(Packet, ServerHost) ->
end.
-spec process_vcard(iq()) -> iq().
-process_vcard(#iq{type = get, lang = Lang, sub_els = [#vcard_temp{}]} = IQ) ->
- xmpp:make_iq_result(
- IQ, #vcard_temp{fn = <<"ejabberd/mod_muc">>,
- url = ejabberd_config:get_uri(),
- desc = misc:get_descr(Lang, ?T("ejabberd MUC module"))});
+process_vcard(#iq{type = get, to = To, lang = Lang, sub_els = [#vcard_temp{}]} = IQ) ->
+ ServerHost = ejabberd_router:host_of_route(To#jid.lserver),
+ VCard = case mod_muc_opt:vcard(ServerHost) of
+ undefined ->
+ #vcard_temp{fn = <<"ejabberd/mod_muc">>,
+ url = ejabberd_config:get_uri(),
+ desc = misc:get_descr(Lang, ?T("ejabberd MUC module"))};
+ V ->
+ V
+ end,
+ xmpp:make_iq_result(IQ, VCard);
process_vcard(#iq{type = set, lang = Lang} = IQ) ->
Txt = ?T("Value 'set' of 'type' attribute is not allowed"),
xmpp:make_error(IQ, xmpp:err_not_allowed(Txt, Lang));
@@ -1182,7 +1188,9 @@ mod_opt_type(hosts) ->
mod_opt_type(queue_type) ->
econf:queue_type();
mod_opt_type(hibernation_timeout) ->
- econf:timeout(second, infinity).
+ econf:timeout(second, infinity);
+mod_opt_type(vcard) ->
+ econf:vcard_temp().
mod_options(Host) ->
[{access, all},
@@ -1214,6 +1222,7 @@ mod_options(Host) ->
{user_presence_shaper, none},
{preload_rooms, true},
{hibernation_timeout, infinity},
+ {vcard, undefined},
{default_room_options,
[{allow_change_subj,true},
{allow_private_messages,true},