mirror of
https://github.com/processone/ejabberd.git
synced 2024-09-27 14:30:55 +02:00
XML attributes as binary(). Change Node argument to binary in the following hooks:
disco_local_items, disco_local_features, disco_local_identity, disco_sm_items and disco_sm_identity. SVN Revision: 1780
This commit is contained in:
parent
2cbd61f268
commit
e0e58711bb
15
ChangeLog
15
ChangeLog
@ -1,3 +1,18 @@
|
||||
2009-01-08 Pablo Polvorin <pablo.polvorin@process-one.net>
|
||||
* src/mod_vcard_ldap.erl, src/mod_muc/mod_muc.erl, src/mod_roster.hrl,
|
||||
src/mod_offline_odbc.erl, src/ejabberd_s2s_in.erl, src/adhoc.erl,
|
||||
src/mod_configure.erl, src/mod_irc/mod_irc_connection.erl,
|
||||
src/mod_irc/mod_irc.erl, src/web/ejabberd_http_poll.erl,
|
||||
src/mod_privacy_odbc.erl, src/ejabberd_c2s.erl, src/mod_announce.erl,
|
||||
src/mod_privacy.erl, src/mod_adhoc.erl, src/mod_pubsub/mod_pubsub.erl,
|
||||
src/mod_vcard_odbc.erl, src/mod_stats.erl, src/mod_last.erl,
|
||||
src/mod_roster.erl, src/ejabberd_service.erl, src/mod_disco.erl,
|
||||
src/mod_configure2.erl, src/mod_roster_odbc.erl, src/ejabberd_s2s_out.erl,
|
||||
src/mod_last_odbc.erl: XML attributes as binary(). Change Node argument
|
||||
to binary in the following hooks: disco_local_items, disco_local_features,
|
||||
disco_local_identity, disco_sm_items and disco_sm_identity.
|
||||
|
||||
|
||||
2009-01-05 Pablo Polvorin <pablo.polvorin@process-one.net>
|
||||
* src/mod_roster.erl: Fix typo.
|
||||
|
||||
|
@ -113,7 +113,7 @@ produce_response(#adhoc_response{lang = _Lang,
|
||||
"" ->
|
||||
ActionsElAttrs = [];
|
||||
_ ->
|
||||
ActionsElAttrs = [#xmlattr{name = 'execute', value = DefaultAction}]
|
||||
ActionsElAttrs = [#xmlattr{name = 'execute', value = list_to_binary(DefaultAction)}]
|
||||
end,
|
||||
ActionsEls = [#xmlel{ns = ?NS_ADHOC, name = 'actions', attrs =
|
||||
ActionsElAttrs, children =
|
||||
@ -121,11 +121,11 @@ produce_response(#adhoc_response{lang = _Lang,
|
||||
end,
|
||||
NotesEls = lists:map(fun({Type, Text}) ->
|
||||
#xmlel{ns = ?NS_ADHOC, name = 'note', attrs =
|
||||
[#xmlattr{name = 'type', value = Type}],
|
||||
[#xmlattr{name = 'type', value = list_to_binary(Type)}],
|
||||
children = [#xmlcdata{cdata = list_to_binary(Text)}]}
|
||||
end, Notes),
|
||||
#xmlel{ns = ?NS_ADHOC, name = 'command', attrs =
|
||||
[#xmlattr{name = 'sessionid', value = SessionID},
|
||||
#xmlattr{name = 'node', value = Node},
|
||||
#xmlattr{name = 'status', value = atom_to_list(Status)}], children =
|
||||
[#xmlattr{name = 'sessionid', value = list_to_binary(SessionID)},
|
||||
#xmlattr{name = 'node', value = list_to_binary(Node)},
|
||||
#xmlattr{name = 'status', value = list_to_binary(atom_to_list(Status))}], children =
|
||||
ActionsEls ++ NotesEls ++ Elements}.
|
||||
|
@ -837,7 +837,7 @@ session_established2(El, StateData) ->
|
||||
undefined ->
|
||||
exmpp_jid:jid_to_bare_jid(StateData#state.jid);
|
||||
_ ->
|
||||
exmpp_jid:list_to_jid(To)
|
||||
exmpp_jid:binary_to_jid(To)
|
||||
end,
|
||||
NewEl = case exmpp_stanza:get_lang(El) of
|
||||
undefined ->
|
||||
@ -1923,7 +1923,7 @@ check_from(El, FromJID) ->
|
||||
El;
|
||||
SJID ->
|
||||
try
|
||||
JID = exmpp_jid:list_to_jid(SJID),
|
||||
JID = exmpp_jid:binary_to_jid(SJID),
|
||||
case exmpp_jid:compare_jids(JID, FromJID) of
|
||||
true ->
|
||||
El;
|
||||
|
@ -371,7 +371,7 @@ stream_established({xmlstreamelement, El}, StateData) ->
|
||||
error;
|
||||
F ->
|
||||
try
|
||||
exmpp_jid:list_to_jid(F)
|
||||
exmpp_jid:binary_to_jid(F)
|
||||
catch
|
||||
_Exception1 -> error
|
||||
end
|
||||
@ -381,7 +381,7 @@ stream_established({xmlstreamelement, El}, StateData) ->
|
||||
error;
|
||||
T ->
|
||||
try
|
||||
exmpp_jid:list_to_jid(T)
|
||||
exmpp_jid:binary_to_jid(T)
|
||||
catch
|
||||
_Exception2 -> error
|
||||
end
|
||||
|
@ -807,8 +807,8 @@ bounce_element(El, Condition) ->
|
||||
"result" -> ok;
|
||||
_ ->
|
||||
Err = exmpp_stanza:reply_with_error(El, Condition),
|
||||
From = exmpp_jid:list_to_jid(exmpp_stanza:get_sender(El)),
|
||||
To = exmpp_jid:list_to_jid(exmpp_stanza:get_recipient(El)),
|
||||
From = exmpp_jid:binary_to_jid(exmpp_stanza:get_sender(El)),
|
||||
To = exmpp_jid:binary_to_jid(exmpp_stanza:get_recipient(El)),
|
||||
% No namespace conversion (:server <-> :client) is done.
|
||||
% This is handled by C2S and S2S send_element functions.
|
||||
ejabberd_router:route(To, From, Err)
|
||||
|
@ -154,7 +154,7 @@ wait_for_stream({xmlstreamstart, #xmlel{ns = NS, attrs = Attrs}}, StateData) ->
|
||||
%% component served by this Jabber server.
|
||||
%% However several transports don't respect that,
|
||||
%% so ejabberd doesn't check 'to' attribute (EJAB-717)
|
||||
To = exmpp_stanza:get_recipient_from_attrs(Attrs),
|
||||
To = binary_to_list(exmpp_stanza:get_recipient_from_attrs(Attrs)),
|
||||
Opening_Reply = exmpp_stream:opening_reply(xml:crypt(To),
|
||||
?NS_COMPONENT_ACCEPT,
|
||||
{0, 0}, StateData#state.streamid),
|
||||
@ -227,10 +227,10 @@ stream_established({xmlstreamelement, El}, StateData) ->
|
||||
%% when accept packets from any address.
|
||||
%% In this case, the component can send packet of
|
||||
%% behalf of the server users.
|
||||
false -> exmpp_jid:list_to_jid(From);
|
||||
false -> exmpp_jid:binary_to_jid(From);
|
||||
%% The default is the standard behaviour in XEP-0114
|
||||
_ ->
|
||||
FromJID1 = exmpp_jib:string_to_jid(From),
|
||||
FromJID1 = exmpp_jid:binary_to_jid(From),
|
||||
Server = exmpp_jid:ldomain_as_list(FromJID1),
|
||||
case lists:member(Server, StateData#state.hosts) of
|
||||
true -> FromJID1;
|
||||
@ -240,7 +240,7 @@ stream_established({xmlstreamelement, El}, StateData) ->
|
||||
To = exmpp_stanza:get_recipient(El),
|
||||
ToJID = case To of
|
||||
undefined -> error;
|
||||
_ -> exmpp_jib:string_to_jid(To)
|
||||
_ -> exmpp_jib:binary_to_jid(To)
|
||||
end,
|
||||
if ((El#xmlel.name == 'iq') or
|
||||
(El#xmlel.name == 'message') or
|
||||
|
@ -81,8 +81,8 @@ stop(Host) ->
|
||||
|
||||
%-------------------------------------------------------------------------
|
||||
|
||||
get_local_commands(Acc, _From, To, "", Lang) ->
|
||||
Server = exmpp_jid:domain_as_list(To),
|
||||
get_local_commands(Acc, _From, To, <<>>, Lang) ->
|
||||
Server = exmpp_jid:domain(To),
|
||||
LServer = exmpp_jid:ldomain_as_list(To),
|
||||
Display = gen_mod:get_module_opt(LServer, ?MODULE, report_commands_node, false),
|
||||
case Display of
|
||||
@ -96,16 +96,17 @@ get_local_commands(Acc, _From, To, "", Lang) ->
|
||||
Nodes = [#xmlel{ns = ?NS_DISCO_ITEMS,
|
||||
name = 'item', attrs =
|
||||
[#xmlattr{name = 'jid', value = Server},
|
||||
#xmlattr{name = 'node', value = ?NS_ADHOC_s},
|
||||
#xmlattr{name = 'name', value = translate:translate(Lang, "Commands")}]
|
||||
#xmlattr{name = 'node', value = list_to_binary(?NS_ADHOC_s)},
|
||||
#xmlattr{name = 'name',
|
||||
value = list_to_binary(translate:translate(Lang, "Commands"))}]
|
||||
}],
|
||||
{result, Items ++ Nodes}
|
||||
end;
|
||||
|
||||
get_local_commands(_Acc, From, To, ?NS_ADHOC_s, Lang) ->
|
||||
get_local_commands(_Acc, From, To, ?NS_ADHOC_b, Lang) ->
|
||||
ejabberd_hooks:run_fold(adhoc_local_items, exmpp_jid:ldomain(To), {result, []}, [From, To, Lang]);
|
||||
|
||||
get_local_commands(_Acc, _From, _To, "ping", _Lang) ->
|
||||
get_local_commands(_Acc, _From, _To, <<"ping">>, _Lang) ->
|
||||
{result, []};
|
||||
|
||||
get_local_commands(Acc, _From, _To, _Node, _Lang) ->
|
||||
@ -113,7 +114,7 @@ get_local_commands(Acc, _From, _To, _Node, _Lang) ->
|
||||
|
||||
%-------------------------------------------------------------------------
|
||||
|
||||
get_sm_commands(Acc, _From, To, "", Lang) ->
|
||||
get_sm_commands(Acc, _From, To, <<>>, Lang) ->
|
||||
LServer = exmpp_jid:ldomain_as_list(To),
|
||||
Display = gen_mod:get_module_opt(LServer, ?MODULE, report_commands_node, false),
|
||||
case Display of
|
||||
@ -126,14 +127,14 @@ get_sm_commands(Acc, _From, To, "", Lang) ->
|
||||
end,
|
||||
Nodes = [#xmlel{ns = ?NS_DISCO_ITEMS,
|
||||
name = 'item', attrs =
|
||||
[#xmlattr{name = 'jid', value = exmpp_jid:jid_to_list(To)},
|
||||
#xmlattr{name = 'node', value = ?NS_ADHOC_s},
|
||||
#xmlattr{name = 'name', value = translate:translate(Lang, "Commands")}]
|
||||
[#xmlattr{name = 'jid', value = exmpp_jid:jid_to_binary(To)},
|
||||
#xmlattr{name = 'node', value = list_to_binary(?NS_ADHOC_s)},
|
||||
#xmlattr{name = 'name', value = list_to_binary(translate:translate(Lang, "Commands"))}]
|
||||
}],
|
||||
{result, Items ++ Nodes}
|
||||
end;
|
||||
|
||||
get_sm_commands(_Acc, From, To, ?NS_ADHOC_s, Lang) ->
|
||||
get_sm_commands(_Acc, From, To, ?NS_ADHOC_b, Lang) ->
|
||||
ejabberd_hooks:run_fold(adhoc_sm_items, exmpp_jid:ldomain(To), {result, []}, [From, To, Lang]);
|
||||
|
||||
get_sm_commands(Acc, _From, _To, _Node, _Lang) ->
|
||||
@ -142,17 +143,17 @@ get_sm_commands(Acc, _From, _To, _Node, _Lang) ->
|
||||
%-------------------------------------------------------------------------
|
||||
|
||||
%% On disco info request to the ad-hoc node, return automation/command-list.
|
||||
get_local_identity(Acc, _From, _To, ?NS_ADHOC_s, Lang) ->
|
||||
get_local_identity(Acc, _From, _To, ?NS_ADHOC_b, Lang) ->
|
||||
[#xmlel{ns = ?NS_DISCO_INFO, name = 'identity', attrs =
|
||||
[#xmlattr{name = 'category', value = "automation"},
|
||||
#xmlattr{name = 'type', value = "command-list"},
|
||||
#xmlattr{name = 'name', value = translate:translate(Lang, "Commands")}]} | Acc];
|
||||
[#xmlattr{name = 'category', value = <<"automation">>},
|
||||
#xmlattr{name = 'type', value = <<"command-list">>},
|
||||
#xmlattr{name = 'name', value = list_to_binary(translate:translate(Lang, "Commands"))}]} | Acc];
|
||||
|
||||
get_local_identity(Acc, _From, _To, "ping", Lang) ->
|
||||
get_local_identity(Acc, _From, _To, <<"ping">>, Lang) ->
|
||||
[#xmlel{ns = ?NS_DISCO_INFO, name = 'identity', attrs =
|
||||
[#xmlattr{name = 'category', value = "automation"},
|
||||
#xmlattr{name = 'type', value = "command-node"},
|
||||
#xmlattr{name = 'name', value = translate:translate(Lang, "Ping")}]} | Acc];
|
||||
[#xmlattr{name = 'category', value = <<"automation">>},
|
||||
#xmlattr{name = 'type', value = <<"command-node">>},
|
||||
#xmlattr{name = 'name', value = list_to_binary(translate:translate(Lang, "Ping"))}]} | Acc];
|
||||
|
||||
get_local_identity(Acc, _From, _To, _Node, _Lang) ->
|
||||
Acc.
|
||||
@ -162,27 +163,27 @@ get_local_identity(Acc, _From, _To, _Node, _Lang) ->
|
||||
%% On disco info request to the ad-hoc node, return automation/command-list.
|
||||
get_sm_identity(Acc, _From, _To, ?NS_ADHOC_s, Lang) ->
|
||||
[#xmlel{ns = ?NS_DISCO_INFO, name = 'identity', attrs =
|
||||
[#xmlattr{name = 'category', value = "automation"},
|
||||
#xmlattr{name = 'type', value = "command-list"},
|
||||
#xmlattr{name = 'name', value = translate:translate(Lang, "Commands")}]} | Acc];
|
||||
[#xmlattr{name = 'category', value = <<"automation">>},
|
||||
#xmlattr{name = 'type', value = <<"command-list">>},
|
||||
#xmlattr{name = 'name', value = list_to_binary(translate:translate(Lang, "Commands"))}]} | Acc];
|
||||
|
||||
get_sm_identity(Acc, _From, _To, _Node, _Lang) ->
|
||||
Acc.
|
||||
|
||||
%-------------------------------------------------------------------------
|
||||
|
||||
get_local_features(Acc, _From, _To, "", _Lang) ->
|
||||
get_local_features(Acc, _From, _To, <<>>, _Lang) ->
|
||||
Feats = case Acc of
|
||||
{result, I} -> I;
|
||||
_ -> []
|
||||
end,
|
||||
{result, Feats ++ [?NS_ADHOC_s]};
|
||||
|
||||
get_local_features(_Acc, _From, _To, ?NS_ADHOC_s, _Lang) ->
|
||||
get_local_features(_Acc, _From, _To, ?NS_ADHOC_b, _Lang) ->
|
||||
%% override all lesser features...
|
||||
{result, []};
|
||||
|
||||
get_local_features(_Acc, _From, _To, "ping", _Lang) ->
|
||||
get_local_features(_Acc, _From, _To, <<"ping">>, _Lang) ->
|
||||
%% override all lesser features...
|
||||
{result, [?NS_ADHOC_s]};
|
||||
|
||||
@ -236,7 +237,7 @@ process_adhoc_request(From, To, IQ_Rec, Hook) ->
|
||||
|
||||
|
||||
ping_item(Acc, _From, To, Lang) ->
|
||||
Server = exmpp_jid:domain_as_list(To),
|
||||
Server = exmpp_jid:domain(To),
|
||||
Items = case Acc of
|
||||
{result, I} ->
|
||||
I;
|
||||
@ -245,8 +246,8 @@ ping_item(Acc, _From, To, Lang) ->
|
||||
end,
|
||||
Nodes = [#xmlel{ns = ?NS_DISCO_INFO, name = 'item', attrs =
|
||||
[#xmlattr{name = 'jid', value = Server},
|
||||
#xmlattr{name = 'node', value = "ping"},
|
||||
#xmlattr{name = 'name', value = translate:translate(Lang, "Ping")}]}],
|
||||
#xmlattr{name = 'node', value = <<"ping">>},
|
||||
#xmlattr{name = 'name', value = list_to_binary(translate:translate(Lang, "Ping"))}]}],
|
||||
{result, Items ++ Nodes}.
|
||||
|
||||
|
||||
|
@ -179,12 +179,12 @@ announce(From, To, Packet) ->
|
||||
%% Announcing via ad-hoc commands
|
||||
-define(INFO_COMMAND(Lang, Node),
|
||||
[#xmlel{ns = ?NS_DISCO_INFO, name = 'identity', attrs =
|
||||
[#xmlattr{name = 'category', value = "automation"},
|
||||
#xmlattr{name = 'type', value = "command-node"},
|
||||
#xmlattr{name = 'name', value = get_title(Lang, Node)}]}]).
|
||||
[#xmlattr{name = 'category', value = <<"automation">>},
|
||||
#xmlattr{name = 'type', value = <<"command-node">>},
|
||||
#xmlattr{name = 'name', value = list_to_binary(get_title(Lang, Node))}]}]).
|
||||
|
||||
disco_identity(Acc, _From, _To, Node, Lang) ->
|
||||
LNode = tokenize(Node),
|
||||
LNode = tokenize(binary_to_list(Node)),
|
||||
case LNode of
|
||||
?NS_ADMINL("announce") ->
|
||||
?INFO_COMMAND(Lang, Node);
|
||||
@ -220,7 +220,7 @@ disco_identity(Acc, _From, _To, Node, Lang) ->
|
||||
{result, Feats}
|
||||
end).
|
||||
|
||||
disco_features(Acc, From, To, "announce", _Lang) ->
|
||||
disco_features(Acc, From, To, <<"announce">>, _Lang) ->
|
||||
LServer = exmpp_jid:ldomain_as_list(To),
|
||||
case gen_mod:is_loaded(LServer, mod_adhoc) of
|
||||
false ->
|
||||
@ -248,25 +248,25 @@ disco_features(Acc, From, To, Node, _Lang) ->
|
||||
AccessGlobal = gen_mod:get_module_opt(global, ?MODULE, access, none),
|
||||
AllowGlobal = acl:match_rule(global, AccessGlobal, From),
|
||||
case Node of
|
||||
?NS_ADMIN_s ++ "#announce" ->
|
||||
<<?NS_ADMIN_s, "#announce">> ->
|
||||
?INFO_RESULT(Allow, [?NS_ADHOC_s]);
|
||||
?NS_ADMIN_s ++ "#announce-all" ->
|
||||
<<?NS_ADMIN_s, "#announce-all">> ->
|
||||
?INFO_RESULT(Allow, [?NS_ADHOC_s]);
|
||||
?NS_ADMIN_s ++ "#set-motd" ->
|
||||
<<?NS_ADMIN_s, "#set-motd">> ->
|
||||
?INFO_RESULT(Allow, [?NS_ADHOC_s]);
|
||||
?NS_ADMIN_s ++ "#edit-motd" ->
|
||||
<<?NS_ADMIN_s, "#edit-motd">> ->
|
||||
?INFO_RESULT(Allow, [?NS_ADHOC_s]);
|
||||
?NS_ADMIN_s ++ "#delete-motd" ->
|
||||
<<?NS_ADMIN_s, "#delete-motd">> ->
|
||||
?INFO_RESULT(Allow, [?NS_ADHOC_s]);
|
||||
?NS_ADMIN_s ++ "#announce-allhosts" ->
|
||||
<<?NS_ADMIN_s, "#announce-allhosts">> ->
|
||||
?INFO_RESULT(AllowGlobal, [?NS_ADHOC_s]);
|
||||
?NS_ADMIN_s ++ "#announce-all-allhosts" ->
|
||||
<<?NS_ADMIN_s, "#announce-all-allhosts">> ->
|
||||
?INFO_RESULT(AllowGlobal, [?NS_ADHOC_s]);
|
||||
?NS_ADMIN_s ++ "#set-motd-allhosts" ->
|
||||
<<?NS_ADMIN_s, "#set-motd-allhosts">> ->
|
||||
?INFO_RESULT(AllowGlobal, [?NS_ADHOC_s]);
|
||||
?NS_ADMIN_s ++ "#edit-motd-allhosts" ->
|
||||
<<?NS_ADMIN_s, "#edit-motd-allhosts">> ->
|
||||
?INFO_RESULT(AllowGlobal, [?NS_ADHOC_s]);
|
||||
?NS_ADMIN_s ++ "#delete-motd-allhosts" ->
|
||||
<<?NS_ADMIN_s, "#delete-motd-allhosts">> ->
|
||||
?INFO_RESULT(AllowGlobal, [?NS_ADHOC_s]);
|
||||
_ ->
|
||||
Acc
|
||||
@ -279,7 +279,7 @@ disco_features(Acc, From, To, Node, _Lang) ->
|
||||
#xmlel{ns = ?NS_DISCO_ITEMS, name = 'item', attrs =
|
||||
[#xmlattr{name = 'jid', value = Server},
|
||||
#xmlattr{name = 'node', value = Node},
|
||||
#xmlattr{name = 'name', value = get_title(Lang, Node)}]}).
|
||||
#xmlattr{name = 'name', value = list_to_binary(get_title(Lang, Node))}]}).
|
||||
|
||||
-define(ITEMS_RESULT(Allow, Items),
|
||||
case Allow of
|
||||
@ -289,9 +289,9 @@ disco_features(Acc, From, To, Node, _Lang) ->
|
||||
{result, Items}
|
||||
end).
|
||||
|
||||
disco_items(Acc, From, To, "", Lang) ->
|
||||
disco_items(Acc, From, To, <<>>, Lang) ->
|
||||
LServer = exmpp_jid:ldomain_as_list(To),
|
||||
Server = exmpp_jid:domain_as_list(To),
|
||||
Server = exmpp_jid:domain(To),
|
||||
|
||||
case gen_mod:is_loaded(LServer, mod_adhoc) of
|
||||
false ->
|
||||
@ -308,12 +308,12 @@ disco_items(Acc, From, To, "", Lang) ->
|
||||
{result, I} -> I;
|
||||
_ -> []
|
||||
end,
|
||||
Nodes = [?NODE_TO_ITEM(Lang, Server, "announce")],
|
||||
Nodes = [?NODE_TO_ITEM(Lang, Server, <<"announce">>)],
|
||||
{result, Items ++ Nodes}
|
||||
end
|
||||
end;
|
||||
|
||||
disco_items(Acc, From, To, "announce", Lang) ->
|
||||
disco_items(Acc, From, To, <<"announce">>, Lang) ->
|
||||
LServer = exmpp_jid:ldomain_as_list(To),
|
||||
case gen_mod:is_loaded(LServer, mod_adhoc) of
|
||||
false ->
|
||||
@ -333,25 +333,25 @@ disco_items(Acc, From, To, Node, _Lang) ->
|
||||
AccessGlobal = gen_mod:get_module_opt(global, ?MODULE, access, none),
|
||||
AllowGlobal = acl:match_rule(global, AccessGlobal, From),
|
||||
case Node of
|
||||
?NS_ADMIN_s ++ "#announce" ->
|
||||
<<?NS_ADMIN_s, "#announce">> ->
|
||||
?ITEMS_RESULT(Allow, []);
|
||||
?NS_ADMIN_s ++ "#announce-all" ->
|
||||
<<?NS_ADMIN_s, "#announce-all">> ->
|
||||
?ITEMS_RESULT(Allow, []);
|
||||
?NS_ADMIN_s ++ "#set-motd" ->
|
||||
<<?NS_ADMIN_s, "#set-motd">> ->
|
||||
?ITEMS_RESULT(Allow, []);
|
||||
?NS_ADMIN_s ++ "#edit-motd" ->
|
||||
<<?NS_ADMIN_s, "#edit-motd">> ->
|
||||
?ITEMS_RESULT(Allow, []);
|
||||
?NS_ADMIN_s ++ "#delete-motd" ->
|
||||
<<?NS_ADMIN_s, "#delete-motd">> ->
|
||||
?ITEMS_RESULT(Allow, []);
|
||||
?NS_ADMIN_s ++ "#announce-allhosts" ->
|
||||
<<?NS_ADMIN_s, "#announce-allhosts">> ->
|
||||
?ITEMS_RESULT(AllowGlobal, []);
|
||||
?NS_ADMIN_s ++ "#announce-all-allhosts" ->
|
||||
<<?NS_ADMIN_s, "#announce-all-allhosts">> ->
|
||||
?ITEMS_RESULT(AllowGlobal, []);
|
||||
?NS_ADMIN_s ++ "#set-motd-allhosts" ->
|
||||
<<?NS_ADMIN_s, "#set-motd-allhosts">> ->
|
||||
?ITEMS_RESULT(AllowGlobal, []);
|
||||
?NS_ADMIN_s ++ "#edit-motd-allhosts" ->
|
||||
<<?NS_ADMIN_s, "#edit-motd-allhosts">> ->
|
||||
?ITEMS_RESULT(AllowGlobal, []);
|
||||
?NS_ADMIN_s ++ "#delete-motd-allhosts" ->
|
||||
<<?NS_ADMIN_s, "#delete-motd-allhosts">> ->
|
||||
?ITEMS_RESULT(AllowGlobal, []);
|
||||
_ ->
|
||||
Acc
|
||||
@ -362,26 +362,26 @@ disco_items(Acc, From, To, Node, _Lang) ->
|
||||
|
||||
announce_items(Acc, From, To, Lang) ->
|
||||
LServer = exmpp_jid:ldomain_as_list(To),
|
||||
Server = exmpp_jid:domain_as_list(To),
|
||||
Server = exmpp_jid:domain(To),
|
||||
Access1 = gen_mod:get_module_opt(LServer, ?MODULE, access, none),
|
||||
Nodes1 = case acl:match_rule(LServer, Access1, From) of
|
||||
allow ->
|
||||
[?NODE_TO_ITEM(Lang, Server, ?NS_ADMIN_s ++ "#announce"),
|
||||
?NODE_TO_ITEM(Lang, Server, ?NS_ADMIN_s ++ "#announce-all"),
|
||||
?NODE_TO_ITEM(Lang, Server, ?NS_ADMIN_s ++ "#set-motd"),
|
||||
?NODE_TO_ITEM(Lang, Server, ?NS_ADMIN_s ++ "#edit-motd"),
|
||||
?NODE_TO_ITEM(Lang, Server, ?NS_ADMIN_s ++ "#delete-motd")];
|
||||
[?NODE_TO_ITEM(Lang, Server, <<?NS_ADMIN_s, "#announce">>),
|
||||
?NODE_TO_ITEM(Lang, Server, <<?NS_ADMIN_s, "#announce-all">>),
|
||||
?NODE_TO_ITEM(Lang, Server, <<?NS_ADMIN_s, "#set-motd">>),
|
||||
?NODE_TO_ITEM(Lang, Server, <<?NS_ADMIN_s, "#edit-motd">>),
|
||||
?NODE_TO_ITEM(Lang, Server, <<?NS_ADMIN_s, "#delete-motd">>)];
|
||||
deny ->
|
||||
[]
|
||||
end,
|
||||
Access2 = gen_mod:get_module_opt(global, ?MODULE, access, none),
|
||||
Nodes2 = case acl:match_rule(global, Access2, From) of
|
||||
allow ->
|
||||
[?NODE_TO_ITEM(Lang, Server, ?NS_ADMIN_s ++ "#announce-allhosts"),
|
||||
?NODE_TO_ITEM(Lang, Server, ?NS_ADMIN_s ++ "#announce-all-allhosts"),
|
||||
?NODE_TO_ITEM(Lang, Server, ?NS_ADMIN_s ++ "#set-motd-allhosts"),
|
||||
?NODE_TO_ITEM(Lang, Server, ?NS_ADMIN_s ++ "#edit-motd-allhosts"),
|
||||
?NODE_TO_ITEM(Lang, Server, ?NS_ADMIN_s ++ "#delete-motd-allhosts")];
|
||||
[?NODE_TO_ITEM(Lang, Server, <<?NS_ADMIN_s, "#announce-allhosts">>),
|
||||
?NODE_TO_ITEM(Lang, Server, <<?NS_ADMIN_s, "#announce-all-allhosts">>),
|
||||
?NODE_TO_ITEM(Lang, Server, <<?NS_ADMIN_s, "#set-motd-allhosts">>),
|
||||
?NODE_TO_ITEM(Lang, Server, <<?NS_ADMIN_s, "#edit-motd-allhosts">>),
|
||||
?NODE_TO_ITEM(Lang, Server, <<?NS_ADMIN_s, "#delete-motd-allhosts">>)];
|
||||
deny ->
|
||||
[]
|
||||
end,
|
||||
@ -481,17 +481,17 @@ announce_commands(From, To,
|
||||
end.
|
||||
|
||||
-define(VVALUE(Val),
|
||||
#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children = [#xmlcdata{cdata = list_to_binary(Val)}]}).
|
||||
#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children = [#xmlcdata{cdata = Val}]}).
|
||||
-define(VVALUEL(Val),
|
||||
case Val of
|
||||
"" -> [];
|
||||
<<>> -> [];
|
||||
_ -> [?VVALUE(Val)]
|
||||
end).
|
||||
-define(TVFIELD(Type, Var, Val),
|
||||
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = [#xmlattr{name = 'type', value = Type},
|
||||
#xmlattr{name = 'var', value = Var}], children =
|
||||
?VVALUEL(Val)}).
|
||||
-define(HFIELD(), ?TVFIELD("hidden", "FORM_TYPE", ?NS_ADMIN_s)).
|
||||
-define(HFIELD(), ?TVFIELD(<<"hidden">>, <<"FORM_TYPE">>, list_to_binary(?NS_ADMIN_s))).
|
||||
|
||||
generate_adhoc_form(Lang, Node, ServerHost) ->
|
||||
LNode = tokenize(Node),
|
||||
@ -502,29 +502,29 @@ generate_adhoc_form(Lang, Node, ServerHost) ->
|
||||
{[], []}
|
||||
end,
|
||||
#xmlel{ns = ?NS_DATA_FORMS, name = 'x', attrs =
|
||||
[#xmlattr{name = 'type', value = "form"}], children =
|
||||
[#xmlattr{name = 'type', value = <<"form">>}], children =
|
||||
[?HFIELD(),
|
||||
#xmlel{ns = ?NS_DATA_FORMS, name = 'title', children = [#xmlcdata{cdata = list_to_binary(get_title(Lang, Node))}]}]
|
||||
++
|
||||
if (LNode == ?NS_ADMINL("delete-motd"))
|
||||
or (LNode == ?NS_ADMINL("delete-motd-allhosts")) ->
|
||||
[#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs =
|
||||
[#xmlattr{name = 'var', value = "confirm"},
|
||||
#xmlattr{name = 'type', value = "boolean"},
|
||||
#xmlattr{name = 'label', value = translate:translate(Lang, "Really delete message of the day?")}], children =
|
||||
[#xmlattr{name = 'var', value = <<"confirm">>},
|
||||
#xmlattr{name = 'type', value = <<"boolean">>},
|
||||
#xmlattr{name = 'label', value = list_to_binary(translate:translate(Lang, "Really delete message of the day?"))}], children =
|
||||
[#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children =
|
||||
[#xmlcdata{cdata = <<"true">>}]}]}];
|
||||
true ->
|
||||
[#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs =
|
||||
[#xmlattr{name = 'var', value = "subject"},
|
||||
#xmlattr{name = 'type', value = "text-single"},
|
||||
#xmlattr{name = 'label', value = translate:translate(Lang, "Subject")}], children =
|
||||
?VVALUEL(OldSubject)},
|
||||
[#xmlattr{name = 'var', value = <<"subject">>},
|
||||
#xmlattr{name = 'type', value = <<"text-single">>},
|
||||
#xmlattr{name = 'label', value = list_to_binary(translate:translate(Lang, "Subject"))}], children =
|
||||
?VVALUEL(list_to_binary(OldSubject))},
|
||||
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs =
|
||||
[#xmlattr{name = 'var', value = "body"},
|
||||
#xmlattr{name = 'type', value = "text-multi"},
|
||||
#xmlattr{name = 'label', value = translate:translate(Lang, "Message body")}], children =
|
||||
?VVALUEL(OldBody)}]
|
||||
[#xmlattr{name = 'var', value = <<"body">>},
|
||||
#xmlattr{name = 'type', value = <<"text-multi">>},
|
||||
#xmlattr{name = 'label', value = list_to_binary(translate:translate(Lang, "Message body"))}], children =
|
||||
?VVALUEL(list_to_binary(OldBody))}]
|
||||
end}.
|
||||
|
||||
join_lines([]) ->
|
||||
@ -569,7 +569,7 @@ handle_adhoc_form(From, To,
|
||||
node = Node,
|
||||
sessionid = SessionID,
|
||||
status = completed},
|
||||
Packet = #xmlel{ns = ?NS_JABBER_CLIENT, name = 'message', attrs = [#xmlattr{name = 'type', value = "normal"}], children =
|
||||
Packet = #xmlel{ns = ?NS_JABBER_CLIENT, name = 'message', attrs = [#xmlattr{name = 'type', value = <<"normal">>}], children =
|
||||
if Subject /= [] ->
|
||||
[#xmlel{ns = ?NS_JABBER_CLIENT, name = 'subject', children =
|
||||
[#xmlcdata{cdata = list_to_binary(Subject)}]}];
|
||||
|
@ -51,7 +51,7 @@
|
||||
-include("ejabberd.hrl").
|
||||
-include("adhoc.hrl").
|
||||
|
||||
-define(T(Lang, Text), translate:translate(Lang, Text)).
|
||||
-define(T(Lang, Text), list_to_binary(translate:translate(Lang, Text))).
|
||||
|
||||
%% Copied from ejabberd_sm.erl
|
||||
-record(session, {sid, usr, us, priority, info}).
|
||||
@ -96,11 +96,11 @@ stop(Host) ->
|
||||
#xmlattr{name = 'name', value = ?T(Lang, Name)}]}]).
|
||||
|
||||
-define(INFO_COMMAND(Name, Lang),
|
||||
?INFO_IDENTITY("automation", "command-node", Name, Lang)).
|
||||
?INFO_IDENTITY(<<"automation">>, <<"command-node">>, Name, Lang)).
|
||||
|
||||
-define(NODEJID(To, Name, Node),
|
||||
#xmlel{ns = ?NS_DISCO_ITEMS, name = 'item', attrs =
|
||||
[#xmlattr{name = 'jid', value = exmpp_jid:jid_to_list(To)},
|
||||
[#xmlattr{name = 'jid', value = exmpp_jid:jid_to_binary(To)},
|
||||
#xmlattr{name = 'name', value = ?T(Lang, Name)},
|
||||
#xmlattr{name = 'node', value = Node}]}).
|
||||
|
||||
@ -110,7 +110,7 @@ stop(Host) ->
|
||||
#xmlattr{name = 'name', value = ?T(Lang, Name)},
|
||||
#xmlattr{name = 'node', value = Node}]}).
|
||||
|
||||
-define(NS_ADMINX(Sub), ?NS_ADMIN_s++"#"++Sub).
|
||||
-define(NS_ADMINX(Sub), <<?NS_ADMIN_s,"#", Sub/binary>>).
|
||||
-define(NS_ADMINL(Sub), ["http:","jabber.org","protocol","admin", Sub]).
|
||||
tokenize(Node) -> string:tokens(Node, "/#").
|
||||
|
||||
@ -123,10 +123,10 @@ get_sm_identity(Acc, _From, _To, Node, Lang) ->
|
||||
end.
|
||||
|
||||
get_local_identity(Acc, _From, _To, Node, Lang) ->
|
||||
LNode = tokenize(Node),
|
||||
LNode = tokenize(binary_to_list(Node)),
|
||||
case LNode of
|
||||
["running nodes", ENode] ->
|
||||
?INFO_IDENTITY("ejabberd", "node", ENode, Lang);
|
||||
?INFO_IDENTITY(<<"ejabberd">>, <<"node">>, ENode, Lang);
|
||||
["running nodes", _ENode, "DB"] ->
|
||||
?INFO_COMMAND("Database", Lang);
|
||||
["running nodes", _ENode, "modules", "start"] ->
|
||||
@ -204,7 +204,7 @@ get_local_features(Acc, From, To, Node, _Lang) ->
|
||||
false ->
|
||||
Acc;
|
||||
_ ->
|
||||
LNode = tokenize(Node),
|
||||
LNode = tokenize(binary_to_list(Node)),
|
||||
Allow = acl:match_rule(LServer, configure, From),
|
||||
case LNode of
|
||||
["config"] ->
|
||||
@ -263,9 +263,9 @@ adhoc_sm_items(Acc, From, To, Lang) ->
|
||||
empty -> []
|
||||
end,
|
||||
Nodes = [#xmlel{ns = ?NS_DISCO_ITEMS, name = 'item', attrs =
|
||||
[#xmlattr{name = 'jid', value = exmpp_jid:jid_to_list(To)},
|
||||
[#xmlattr{name = 'jid', value = exmpp_jid:jid_binary(To)},
|
||||
#xmlattr{name = 'name', value = ?T(Lang, "Configuration")},
|
||||
#xmlattr{name = 'node', value = "config"}]}],
|
||||
#xmlattr{name = 'node', value = <<"config">>}]}],
|
||||
{result, Items ++ Nodes};
|
||||
_ ->
|
||||
Acc
|
||||
@ -283,10 +283,10 @@ get_sm_items(Acc, From, To, Node, Lang) ->
|
||||
{result, Its} -> Its;
|
||||
empty -> []
|
||||
end,
|
||||
case {acl:match_rule(LServer, configure, From), Node} of
|
||||
case {acl:match_rule(LServer, configure, From), binary_to_list(Node)} of
|
||||
{allow, ""} ->
|
||||
Nodes = [?NODEJID(To, "Configuration", "config"),
|
||||
?NODEJID(To, "User Management", "user")],
|
||||
Nodes = [?NODEJID(To, "Configuration", <<"config">>),
|
||||
?NODEJID(To, "User Management", <<"user">>)],
|
||||
{result, Items ++ Nodes ++ get_user_resources(To)};
|
||||
{allow, "config"} ->
|
||||
{result, []};
|
||||
@ -303,17 +303,16 @@ get_user_resources(BareJID) ->
|
||||
lists:map(fun(R) ->
|
||||
#xmlel{ns = ?NS_DISCO_ITEMS, name = 'item', attrs =
|
||||
[#xmlattr{name = 'jid',
|
||||
value = exmpp_jid:jid_to_list(
|
||||
value = exmpp_jid:jid_to_binary(
|
||||
exmpp_jid:bare_jid_to_jid(BareJID, R))},
|
||||
#xmlattr{name = 'name',
|
||||
value = exmpp_jid:lnode_as_list(BareJID)}]}
|
||||
value = exmpp_jid:lnode(BareJID)}]}
|
||||
end, lists:sort(Rs)).
|
||||
|
||||
%%%-----------------------------------------------------------------------
|
||||
|
||||
adhoc_local_items(Acc, From, To, Lang) ->
|
||||
LServer = exmpp_jid:ldomain_as_list(To),
|
||||
Server = exmpp_jid:domain_as_list(To),
|
||||
case acl:match_rule(LServer, configure, From) of
|
||||
allow ->
|
||||
Items = case Acc of
|
||||
@ -321,7 +320,7 @@ adhoc_local_items(Acc, From, To, Lang) ->
|
||||
empty -> []
|
||||
end,
|
||||
%% Recursively get all configure commands
|
||||
Nodes = recursively_get_local_items(LServer, "", Server, Lang),
|
||||
Nodes = recursively_get_local_items(LServer, "", exmpp_jid:domain(To), Lang),
|
||||
Nodes1 = lists:filter(
|
||||
fun(N) ->
|
||||
Nd = exmpp_xml:get_attribute(N, 'node', ""),
|
||||
@ -374,7 +373,7 @@ recursively_get_local_items(LServer, Node, Server, Lang) ->
|
||||
Fallback;
|
||||
allow ->
|
||||
case get_local_items(LServer, LNode,
|
||||
exmpp_jid:jid_to_list(To), Lang) of
|
||||
exmpp_jid:jid_to_binary(To), Lang) of
|
||||
{result, Res} ->
|
||||
{result, Res};
|
||||
{error, Error} ->
|
||||
@ -382,7 +381,7 @@ recursively_get_local_items(LServer, Node, Server, Lang) ->
|
||||
end
|
||||
end).
|
||||
|
||||
get_local_items(Acc, From, To, "", Lang) ->
|
||||
get_local_items(Acc, From, To, <<>>, Lang) ->
|
||||
LServer = exmpp_jid:ldomain_as_list(To),
|
||||
case gen_mod:is_loaded(LServer, mod_adhoc) of
|
||||
false ->
|
||||
@ -398,7 +397,7 @@ get_local_items(Acc, From, To, "", Lang) ->
|
||||
{result, Items};
|
||||
allow ->
|
||||
case get_local_items(LServer, [],
|
||||
exmpp_jid:jid_to_list(To), Lang) of
|
||||
exmpp_jid:jid_to_binary(To), Lang) of
|
||||
{result, Res} ->
|
||||
{result, Items ++ Res};
|
||||
{error, _Error} ->
|
||||
@ -413,7 +412,7 @@ get_local_items(Acc, From, To, Node, Lang) ->
|
||||
false ->
|
||||
Acc;
|
||||
_ ->
|
||||
LNode = tokenize(Node),
|
||||
LNode = tokenize(binary_to_list(Node)),
|
||||
Allow = acl:match_rule(LServer, configure, From),
|
||||
case LNode of
|
||||
["config"] ->
|
||||
@ -465,19 +464,19 @@ get_local_items(Acc, From, To, Node, Lang) ->
|
||||
|
||||
get_local_items(_Host, [], Server, Lang) ->
|
||||
{result,
|
||||
[?NODE("Configuration", "config"),
|
||||
?NODE("User Management", "user"),
|
||||
?NODE("Online Users", "online users"),
|
||||
?NODE("All Users", "all users"),
|
||||
?NODE("Outgoing s2s Connections", "outgoing s2s"),
|
||||
?NODE("Running Nodes", "running nodes"),
|
||||
?NODE("Stopped Nodes", "stopped nodes")
|
||||
[?NODE("Configuration", <<"config">>),
|
||||
?NODE("User Management", <<"user">>),
|
||||
?NODE("Online Users", <<"online users">>),
|
||||
?NODE("All Users", <<"all users">>),
|
||||
?NODE("Outgoing s2s Connections", <<"outgoing s2s">>),
|
||||
?NODE("Running Nodes", <<"running nodes">>),
|
||||
?NODE("Stopped Nodes", <<"stopped nodes">>)
|
||||
]};
|
||||
|
||||
get_local_items(_Host, ["config"], Server, Lang) ->
|
||||
{result,
|
||||
[?NODE("Access Control Lists", "config/acls"),
|
||||
?NODE("Access Rules", "config/access")
|
||||
[?NODE("Access Control Lists", <<"config/acls">>),
|
||||
?NODE("Access Rules", <<"config/access">>)
|
||||
]};
|
||||
|
||||
get_local_items(_Host, ["config", _], _Server, _Lang) ->
|
||||
@ -485,15 +484,15 @@ get_local_items(_Host, ["config", _], _Server, _Lang) ->
|
||||
|
||||
get_local_items(_Host, ["user"], Server, Lang) ->
|
||||
{result,
|
||||
[?NODE("Add User", ?NS_ADMINX("add-user")),
|
||||
?NODE("Delete User", ?NS_ADMINX("delete-user")),
|
||||
?NODE("End User Session", ?NS_ADMINX("end-user-session")),
|
||||
?NODE("Get User Password", ?NS_ADMINX("get-user-password")),
|
||||
?NODE("Change User Password",?NS_ADMINX("change-user-password")),
|
||||
?NODE("Get User Last Login Time", ?NS_ADMINX("get-user-lastlogin")),
|
||||
?NODE("Get User Statistics", ?NS_ADMINX("user-stats")),
|
||||
?NODE("Get Number of Registered Users",?NS_ADMINX("get-registered-users-num")),
|
||||
?NODE("Get Number of Online Users",?NS_ADMINX("get-online-users-num"))
|
||||
[?NODE("Add User", ?NS_ADMINX(<<"add-user">>)),
|
||||
?NODE("Delete User", ?NS_ADMINX(<<"delete-user">>)),
|
||||
?NODE("End User Session", ?NS_ADMINX(<<"end-user-session">>)),
|
||||
?NODE("Get User Password", ?NS_ADMINX(<<"get-user-password">>)),
|
||||
?NODE("Change User Password",?NS_ADMINX(<<"change-user-password">>)),
|
||||
?NODE("Get User Last Login Time", ?NS_ADMINX(<<"get-user-lastlogin">>)),
|
||||
?NODE("Get User Statistics", ?NS_ADMINX(<<"user-stats">>)),
|
||||
?NODE("Get Number of Registered Users",?NS_ADMINX(<<"get-registered-users-num">>)),
|
||||
?NODE("Get Number of Online Users",?NS_ADMINX(<<"get-online-users-num">>))
|
||||
]};
|
||||
|
||||
get_local_items(_Host, ["http:" | _], _Server, _Lang) ->
|
||||
@ -518,8 +517,8 @@ get_local_items(Host, ["all users", [$@ | Diap]], _Server, _Lang) ->
|
||||
Sub = lists:sublist(SUsers, N1, N2 - N1 + 1),
|
||||
lists:map(fun({S, U}) ->
|
||||
#xmlel{ns = ?NS_DISCO_ITEMS, name = 'item', attrs =
|
||||
[#xmlattr{name = 'jid', value = exmpp_jid:jid_to_list(U, S)},
|
||||
#xmlattr{name = 'name', value = exmpp_jid:jid_to_list(U, S)}]}
|
||||
[#xmlattr{name = 'jid', value = exmpp_jid:jid_to_binary(U, S)},
|
||||
#xmlattr{name = 'name', value = exmpp_jid:jid_to_binary(U, S)}]}
|
||||
end, Sub)
|
||||
end of
|
||||
{'EXIT', _Reason} ->
|
||||
@ -542,43 +541,47 @@ get_local_items(_Host, ["stopped nodes"], _Server, Lang) ->
|
||||
{result, get_stopped_nodes(Lang)};
|
||||
|
||||
get_local_items(_Host, ["running nodes", ENode], Server, Lang) ->
|
||||
ENodeB = list_to_binary(ENode),
|
||||
{result,
|
||||
[?NODE("Database", "running nodes/" ++ ENode ++ "/DB"),
|
||||
?NODE("Modules", "running nodes/" ++ ENode ++ "/modules"),
|
||||
?NODE("Backup Management", "running nodes/" ++ ENode ++ "/backup"),
|
||||
[?NODE("Database", <<"running nodes/", ENodeB/binary, "/DB">>),
|
||||
?NODE("Modules", <<"running nodes/", ENodeB/binary, "/modules">>),
|
||||
?NODE("Backup Management", <<"running nodes/", ENodeB/binary, "/backup">>),
|
||||
?NODE("Import Users From jabberd 1.4 Spool Files",
|
||||
"running nodes/" ++ ENode ++ "/import"),
|
||||
?NODE("Restart Service", "running nodes/" ++ ENode ++ "/restart"),
|
||||
?NODE("Shut Down Service", "running nodes/" ++ ENode ++ "/shutdown")
|
||||
<<"running nodes/", ENodeB/binary, "/import">>),
|
||||
?NODE("Restart Service", <<"running nodes/", ENodeB/binary, "/restart">>),
|
||||
?NODE("Shut Down Service", <<"running nodes/", ENodeB/binary, "/shutdown">>)
|
||||
]};
|
||||
|
||||
get_local_items(_Host, ["running nodes", _ENode, "DB"], _Server, _Lang) ->
|
||||
{result, []};
|
||||
|
||||
get_local_items(_Host, ["running nodes", ENode, "modules"], Server, Lang) ->
|
||||
ENodeB = list_to_binary(ENode),
|
||||
{result,
|
||||
[?NODE("Start Modules", "running nodes/" ++ ENode ++ "/modules/start"),
|
||||
?NODE("Stop Modules", "running nodes/" ++ ENode ++ "/modules/stop")
|
||||
[?NODE("Start Modules", <<"running nodes/", ENodeB/binary, "/modules/start">>),
|
||||
?NODE("Stop Modules", <<"running nodes/", ENodeB/binary, "/modules/stop">>)
|
||||
]};
|
||||
|
||||
get_local_items(_Host, ["running nodes", _ENode, "modules", _], _Server, _Lang) ->
|
||||
{result, []};
|
||||
|
||||
get_local_items(_Host, ["running nodes", ENode, "backup"], Server, Lang) ->
|
||||
ENodeB = list_to_binary(ENode),
|
||||
{result,
|
||||
[?NODE("Backup", "running nodes/" ++ ENode ++ "/backup/backup"),
|
||||
?NODE("Restore", "running nodes/" ++ ENode ++ "/backup/restore"),
|
||||
[?NODE("Backup", <<"running nodes/", ENodeB/binary, "/backup/backup">>),
|
||||
?NODE("Restore", <<"running nodes/", ENodeB/binary, "/backup/restore">>),
|
||||
?NODE("Dump to Text File",
|
||||
"running nodes/" ++ ENode ++ "/backup/textfile")
|
||||
<<"running nodes/", ENodeB/binary, "/backup/textfile">>)
|
||||
]};
|
||||
|
||||
get_local_items(_Host, ["running nodes", _ENode, "backup", _], _Server, _Lang) ->
|
||||
{result, []};
|
||||
|
||||
get_local_items(_Host, ["running nodes", ENode, "import"], Server, Lang) ->
|
||||
ENodeB = list_to_binary(ENode),
|
||||
{result,
|
||||
[?NODE("Import File", "running nodes/" ++ ENode ++ "/import/file"),
|
||||
?NODE("Import Directory", "running nodes/" ++ ENode ++ "/import/dir")
|
||||
[?NODE("Import File", <<"running nodes/", ENodeB/binary, "/import/file">>),
|
||||
?NODE("Import Directory", <<"running nodes/", ENodeB/binary, "/import/dir">>)
|
||||
]};
|
||||
|
||||
get_local_items(_Host, ["running nodes", _ENode, "import", _], _Server, _Lang) ->
|
||||
@ -602,8 +605,8 @@ get_online_vh_users(Host) ->
|
||||
SURs = lists:sort([{S, U, R} || {U, S, R} <- USRs]),
|
||||
lists:map(fun({S, U, R}) ->
|
||||
#xmlel{ns = ?NS_DISCO_ITEMS, name = 'item', attrs =
|
||||
[#xmlattr{name = 'jid', value = exmpp_jid:jid_to_list(U, S, R)},
|
||||
#xmlattr{name = 'name', value = exmpp_jid:jid_to_list(U, S)}]}
|
||||
[#xmlattr{name = 'jid', value = exmpp_jid:jid_binary(U, S, R)},
|
||||
#xmlattr{name = 'name', value = exmpp_jid:jid_to_binary(U, S)}]}
|
||||
end, SURs)
|
||||
end.
|
||||
|
||||
@ -617,8 +620,8 @@ get_all_vh_users(Host) ->
|
||||
N when N =< 100 ->
|
||||
lists:map(fun({S, U}) ->
|
||||
#xmlel{ns = ?NS_DISCO_ITEMS, name = 'item', attrs =
|
||||
[#xmlattr{name = 'jid', value = exmpp_jid:jid_to_list(U, S)},
|
||||
#xmlattr{name = 'name', value = exmpp_jid:jid_to_list(U, S)}]}
|
||||
[#xmlattr{name = 'jid', value = exmpp_jid:jid_to_binary(U, S)},
|
||||
#xmlattr{name = 'name', value = exmpp_jid:jid_to_binary(U, S)}]}
|
||||
end, SUsers);
|
||||
N ->
|
||||
NParts = trunc(math:sqrt(N * 0.618)) + 1,
|
||||
@ -626,20 +629,19 @@ get_all_vh_users(Host) ->
|
||||
lists:map(fun(K) ->
|
||||
L = K + M - 1,
|
||||
Node =
|
||||
"@" ++ integer_to_list(K) ++
|
||||
"-" ++ integer_to_list(L),
|
||||
<<"@", (list_to_binary(integer_to_list(K)))/binary,
|
||||
"-", (list_to_binary(integer_to_list(L)))/binary>>,
|
||||
{FS, FU} = lists:nth(K, SUsers),
|
||||
{LS, LU} =
|
||||
if L < N -> lists:nth(L, SUsers);
|
||||
true -> lists:last(SUsers)
|
||||
end,
|
||||
Name =
|
||||
FU ++ "@" ++ FS ++
|
||||
" -- " ++
|
||||
LU ++ "@" ++ LS,
|
||||
<<(list_to_binary(FU))/binary, "@", (list_to_binary(FS))/binary,
|
||||
" -- ", (list_to_binary(LU))/binary, "@", (list_to_binary(LS))/binary>>,
|
||||
#xmlel{ns = ?NS_DISCO_ITEMS, name = 'item', attrs =
|
||||
[#xmlattr{name = 'jid', value = Host},
|
||||
#xmlattr{name = 'node', value = "all users/" ++ Node},
|
||||
[#xmlattr{name = 'jid', value = list_to_binary(Host)},
|
||||
#xmlattr{name = 'node', value = <<"all users/", Node/binary>>},
|
||||
#xmlattr{name = 'name', value = Name}]}
|
||||
end, lists:seq(1, N, M))
|
||||
end
|
||||
@ -656,10 +658,10 @@ get_outgoing_s2s(Host, Lang) ->
|
||||
lists:map(
|
||||
fun(T) ->
|
||||
#xmlel{ns = ?NS_DISCO_ITEMS, name = 'item', attrs =
|
||||
[#xmlattr{name = 'jid', value = Host},
|
||||
#xmlattr{name = 'node', value = "outgoing s2s/" ++ T},
|
||||
[#xmlattr{name = 'jid', value = list_to_binary(Host)},
|
||||
#xmlattr{name = 'node', value = <<"outgoing s2s/", (list_to_binary(T))/binary>>},
|
||||
#xmlattr{name = 'name', value =
|
||||
lists:flatten(
|
||||
list_to_binary(
|
||||
io_lib:format(
|
||||
?T(Lang, "To ~s"), [T]))}]}
|
||||
end, lists:usort(TConns))
|
||||
@ -673,10 +675,10 @@ get_outgoing_s2s(Host, Lang, To) ->
|
||||
lists:map(
|
||||
fun({F, _T}) ->
|
||||
#xmlel{ns = ?NS_DISCO_ITEMS, name = 'item', attrs =
|
||||
[#xmlattr{name = 'jid', value = Host},
|
||||
#xmlattr{name = 'node', value = "outgoing s2s/" ++ To ++ "/" ++ F},
|
||||
[#xmlattr{name = 'jid', value = list_to_binary(Host)},
|
||||
#xmlattr{name = 'node', value = <<"outgoing s2s/", (list_to_binary(To))/binary, "/", (list_to_binary(F))/binary>>},
|
||||
#xmlattr{name = 'name', value =
|
||||
lists:flatten(
|
||||
list_to_binary(
|
||||
io_lib:format(
|
||||
?T(Lang, "From ~s"), [F]))}]}
|
||||
end, lists:keysort(1, lists:filter(fun(E) ->
|
||||
@ -692,10 +694,10 @@ get_running_nodes(Server, _Lang) ->
|
||||
DBNodes ->
|
||||
lists:map(
|
||||
fun(N) ->
|
||||
S = atom_to_list(N),
|
||||
S = list_to_binary(atom_to_list(N)),
|
||||
#xmlel{ns = ?NS_DISCO_ITEMS, name = 'item', attrs =
|
||||
[#xmlattr{name = 'jid', value = Server},
|
||||
#xmlattr{name = 'node', value = "running nodes/" ++ S},
|
||||
[#xmlattr{name = 'jid', value = list_to_binary(Server)},
|
||||
#xmlattr{name = 'node', value = <<"running nodes/", (list_to_binary(S))/binary>>},
|
||||
#xmlattr{name = 'name', value = S}]}
|
||||
end, lists:sort(DBNodes))
|
||||
end.
|
||||
@ -709,10 +711,10 @@ get_stopped_nodes(_Lang) ->
|
||||
DBNodes ->
|
||||
lists:map(
|
||||
fun(N) ->
|
||||
S = atom_to_list(N),
|
||||
S = list_to_binary(atom_to_list(N)),
|
||||
#xmlel{ns = ?NS_DISCO_ITEMS, name = 'item', attrs =
|
||||
[#xmlattr{name = 'jid', value = ?MYNAME},
|
||||
#xmlattr{name = 'node', value = "stopped nodes/" ++ S},
|
||||
[#xmlattr{name = 'jid', value = list_to_binary(?MYNAME)},
|
||||
#xmlattr{name = 'node', value = <<"stopped nodes/", S/binary>>},
|
||||
#xmlattr{name = 'name', value = S}]}
|
||||
end, lists:sort(DBNodes))
|
||||
end.
|
||||
@ -815,8 +817,8 @@ adhoc_local_commands(From, To,
|
||||
-define(TVFIELD(Type, Var, Val),
|
||||
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = [#xmlattr{name = 'type', value = Type},
|
||||
#xmlattr{name = 'var', value = Var}],
|
||||
children = [#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children = [#xmlcdata{cdata = list_to_binary(Val)}]}]}).
|
||||
-define(HFIELD(), ?TVFIELD("hidden", "FORM_TYPE", ?NS_ADMIN_s)).
|
||||
children = [#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children = [#xmlcdata{cdata = Val}]}]}).
|
||||
-define(HFIELD(), ?TVFIELD(<<"hidden">>, <<"FORM_TYPE">>, list_to_binary(?NS_ADMIN_s))).
|
||||
|
||||
-define(TLFIELD(Type, Label, Var),
|
||||
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = [#xmlattr{name = 'type', value = Type},
|
||||
@ -827,7 +829,7 @@ adhoc_local_commands(From, To,
|
||||
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = [#xmlattr{name = 'type', value = Type},
|
||||
#xmlattr{name = 'label', value = ?T(Lang, Label)},
|
||||
#xmlattr{name = 'var', value = Var}],
|
||||
children = [#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children = [#xmlcdata{cdata = list_to_binary(Val)}]}]}).
|
||||
children = [#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children = [#xmlcdata{cdata = Val}]}]}).
|
||||
|
||||
-define(XMFIELD(Type, Label, Var, Vals),
|
||||
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = [#xmlattr{name = 'type', value = Type},
|
||||
@ -836,9 +838,9 @@ adhoc_local_commands(From, To,
|
||||
children = [#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children = [#xmlcdata{cdata = list_to_binary(Val)}]} || Val <- Vals]}).
|
||||
|
||||
-define(TABLEFIELD(Table, Val),
|
||||
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = [#xmlattr{name = 'type', value = "list-single"},
|
||||
#xmlattr{name = 'label', value = atom_to_list(Table)},
|
||||
#xmlattr{name = 'var', value = atom_to_list(Table)}],
|
||||
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = [#xmlattr{name = 'type', value = <<"list-single">>},
|
||||
#xmlattr{name = 'label', value = list_to_binary(atom_to_list(Table))},
|
||||
#xmlattr{name = 'var', value = list_to_binary(atom_to_list(Table))}],
|
||||
children = [#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children = [#xmlcdata{cdata = list_to_binary(atom_to_list(Val))}]},
|
||||
#xmlel{ns = ?NS_DATA_FORMS, name = 'option', attrs = [#xmlattr{name = 'label', value =
|
||||
?T(Lang, "RAM copy")}],
|
||||
@ -917,7 +919,7 @@ get_form(Host, ["running nodes", ENode, "modules", "stop"], Lang) ->
|
||||
Lang, "Choose modules to stop"))}]} |
|
||||
lists:map(fun(M) ->
|
||||
S = atom_to_list(M),
|
||||
?XFIELD("boolean", S, S, "0")
|
||||
?XFIELD(<<"boolean">>, S, list_to_binary(S), <<"0">>)
|
||||
end, SModules)
|
||||
]}]}
|
||||
end
|
||||
@ -934,21 +936,22 @@ get_form(_Host, ["running nodes", ENode, "modules", "start"], Lang) ->
|
||||
[#xmlcdata{cdata =
|
||||
list_to_binary(?T(
|
||||
Lang, "Enter list of {Module, [Options]}"))}]},
|
||||
?XFIELD("text-multi", "List of modules to start", "modules", "[].")
|
||||
?XFIELD(<<"text-multi">>, "List of modules to start", <<"modules">>, <<"[].">>)
|
||||
]}]};
|
||||
|
||||
get_form(_Host, ["running nodes", ENode, "backup", "backup"], Lang) ->
|
||||
{result, [#xmlel{ns = ?NS_DATA_FORMS, name = 'x', children =
|
||||
[?HFIELD(),
|
||||
[
|
||||
?HFIELD(),
|
||||
#xmlel{ns = ?NS_DATA_FORMS, name = 'title', children =
|
||||
[#xmlcdata{cdata =
|
||||
list_to_binary(?T(
|
||||
Lang, "Backup to File at ") ++ ENode)}]},
|
||||
#xmlel{ns = ?NS_DATA_FORMS, name = 'instructions', children =
|
||||
#xmlel{ns = ?NS_DATA_FORMS, name = 'instructions', children =
|
||||
[#xmlcdata{cdata =
|
||||
list_to_binary(?T(
|
||||
Lang, "Enter path to backup file"))}]},
|
||||
?XFIELD("text-single", "Path to File", "path", "")
|
||||
Lang, "Enter path to backup file"))}]},
|
||||
?XFIELD(<<"text-single">>, "Path to File", <<"path">>, <<"">>)
|
||||
]}]};
|
||||
|
||||
get_form(_Host, ["running nodes", ENode, "backup", "restore"], Lang) ->
|
||||
@ -962,7 +965,7 @@ get_form(_Host, ["running nodes", ENode, "backup", "restore"], Lang) ->
|
||||
[#xmlcdata{cdata =
|
||||
list_to_binary(?T(
|
||||
Lang, "Enter path to backup file"))}]},
|
||||
?XFIELD("text-single", "Path to File", "path", "")
|
||||
?XFIELD(<<"text-single">>, "Path to File", <<"path">>, <<"">>)
|
||||
]}]};
|
||||
|
||||
get_form(_Host, ["running nodes", ENode, "backup", "textfile"], Lang) ->
|
||||
@ -976,7 +979,7 @@ get_form(_Host, ["running nodes", ENode, "backup", "textfile"], Lang) ->
|
||||
[#xmlcdata{cdata =
|
||||
list_to_binary(?T(
|
||||
Lang, "Enter path to text file"))}]},
|
||||
?XFIELD("text-single", "Path to File", "path", "")
|
||||
?XFIELD(<<"text-single">>, "Path to File", <<"path">>, <<"">>)
|
||||
]}]};
|
||||
|
||||
get_form(_Host, ["running nodes", ENode, "import", "file"], Lang) ->
|
||||
@ -990,7 +993,7 @@ get_form(_Host, ["running nodes", ENode, "import", "file"], Lang) ->
|
||||
[#xmlcdata{cdata =
|
||||
list_to_binary(?T(
|
||||
Lang, "Enter path to jabberd1.4 spool file"))}]},
|
||||
?XFIELD("text-single", "Path to File", "path", "")
|
||||
?XFIELD(<<"text-single">>, "Path to File", <<"path">>, <<"">>)
|
||||
]}]};
|
||||
|
||||
get_form(_Host, ["running nodes", ENode, "import", "dir"], Lang) ->
|
||||
@ -1004,14 +1007,14 @@ get_form(_Host, ["running nodes", ENode, "import", "dir"], Lang) ->
|
||||
[#xmlcdata{cdata =
|
||||
list_to_binary(?T(
|
||||
Lang, "Enter path to jabberd1.4 spool dir"))}]},
|
||||
?XFIELD("text-single", "Path to Dir", "path", "")
|
||||
?XFIELD(<<"text-single">>, "Path to Dir", <<"path">>, <<"">>)
|
||||
]}]};
|
||||
|
||||
get_form(_Host, ["running nodes", _ENode, "restart"], Lang) ->
|
||||
Make_option =
|
||||
fun(LabelNum, LabelUnit, Value)->
|
||||
#xmlel{ns = ?NS_DATA_FORMS, name = 'option', attrs =
|
||||
[#xmlattr{name = 'label', value = LabelNum ++ ?T(Lang, LabelUnit)}], children =
|
||||
[#xmlattr{name = 'label', value = <<(list_to_binary(LabelNum))/binary, (?T(Lang, LabelUnit))/binary>>}], children =
|
||||
[#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children = [#xmlcdata{cdata = list_to_binary(Value)}]}]}
|
||||
end,
|
||||
{result, [#xmlel{ns = ?NS_DATA_FORMS, name = 'x', children =
|
||||
@ -1019,9 +1022,9 @@ get_form(_Host, ["running nodes", _ENode, "restart"], Lang) ->
|
||||
#xmlel{ns = ?NS_DATA_FORMS, name = 'title', children =
|
||||
[#xmlcdata{cdata = list_to_binary(?T(Lang, "Restart Service"))}]},
|
||||
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs =
|
||||
[#xmlattr{name = 'type', value = "list-single"},
|
||||
[#xmlattr{name = 'type', value = <<"list-single">>},
|
||||
#xmlattr{name = 'label', value = ?T(Lang, "Time delay")},
|
||||
#xmlattr{name = 'var', value = "delay"}], children =
|
||||
#xmlattr{name = 'var', value = <<"delay">>}], children =
|
||||
[Make_option("", "immediately", "1"),
|
||||
Make_option("15 ", "seconds", "15"),
|
||||
Make_option("30 ", "seconds", "30"),
|
||||
@ -1037,15 +1040,15 @@ get_form(_Host, ["running nodes", _ENode, "restart"], Lang) ->
|
||||
#xmlel{ns = ?NS_DATA_FORMS, name = 'required'}
|
||||
]},
|
||||
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs =
|
||||
[#xmlattr{name = 'type', value = "fixed"},
|
||||
[#xmlattr{name = 'type', value = <<"fixed">>},
|
||||
#xmlattr{name = 'label', value = ?T(Lang, "Send announcement to all online users on all hosts")}]},
|
||||
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs =
|
||||
[#xmlattr{name = 'var', value = "subject"},
|
||||
#xmlattr{name = 'type', value = "text-single"},
|
||||
[#xmlattr{name = 'var', value = <<"subject">>},
|
||||
#xmlattr{name = 'type', value = <<"text-single">>},
|
||||
#xmlattr{name = 'label', value = ?T(Lang, "Subject")}]},
|
||||
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs =
|
||||
[#xmlattr{name = 'var', value = "announcement"},
|
||||
#xmlattr{name = 'type', value = "text-multi"},
|
||||
[#xmlattr{name = 'var', value = <<"announcement">>},
|
||||
#xmlattr{name = 'type', value = <<"text-multi">>},
|
||||
#xmlattr{name = 'label', value = ?T(Lang, "Message body")}]}
|
||||
]}]};
|
||||
|
||||
@ -1053,7 +1056,7 @@ get_form(_Host, ["running nodes", _ENode, "shutdown"], Lang) ->
|
||||
Make_option =
|
||||
fun(LabelNum, LabelUnit, Value)->
|
||||
#xmlel{ns = ?NS_DATA_FORMS, name = 'option', attrs =
|
||||
[#xmlattr{name = 'label', value = LabelNum ++ ?T(Lang, LabelUnit)}], children =
|
||||
[#xmlattr{name = 'label', value = <<(list_to_binary(LabelNum))/binary, (?T(Lang, LabelUnit))/binary>>}], children =
|
||||
[#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children = [#xmlcdata{cdata = list_to_binary(Value)}]}]}
|
||||
end,
|
||||
{result, [#xmlel{ns = ?NS_DATA_FORMS, name = 'x', children =
|
||||
@ -1061,9 +1064,9 @@ get_form(_Host, ["running nodes", _ENode, "shutdown"], Lang) ->
|
||||
#xmlel{ns = ?NS_DATA_FORMS, name = 'title', children =
|
||||
[#xmlcdata{cdata = list_to_binary(?T(Lang, "Shut Down Service"))}]},
|
||||
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs =
|
||||
[#xmlattr{name = 'type', value = "list-single"},
|
||||
[#xmlattr{name = 'type', value = <<"list-single">>},
|
||||
#xmlattr{name = 'label', value = ?T(Lang, "Time delay")},
|
||||
#xmlattr{name = 'var', value = "delay"}], children =
|
||||
#xmlattr{name = 'var', value = <<"delay">>}], children =
|
||||
[Make_option("", "immediately", "1"),
|
||||
Make_option("15 ", "seconds", "15"),
|
||||
Make_option("30 ", "seconds", "30"),
|
||||
@ -1079,15 +1082,15 @@ get_form(_Host, ["running nodes", _ENode, "shutdown"], Lang) ->
|
||||
#xmlel{ns = ?NS_DATA_FORMS, name = 'required'}
|
||||
]},
|
||||
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs =
|
||||
[#xmlattr{name = 'type', value = "fixed"},
|
||||
[#xmlattr{name = 'type', value = <<"fixed">>},
|
||||
#xmlattr{name = 'label', value = ?T(Lang, "Send announcement to all online users on all hosts")}]},
|
||||
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs =
|
||||
[#xmlattr{name = 'var', value = "subject"},
|
||||
#xmlattr{name = 'type', value = "text-single"},
|
||||
[#xmlattr{name = 'var', value = <<"subject">>},
|
||||
#xmlattr{name = 'type', value = <<"text-single">>},
|
||||
#xmlattr{name = 'label', value = ?T(Lang, "Subject")}]},
|
||||
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs =
|
||||
[#xmlattr{name = 'var', value = "announcement"},
|
||||
#xmlattr{name = 'type', value = "text-multi"},
|
||||
[#xmlattr{name = 'var', value = <<"announcement">>},
|
||||
#xmlattr{name = 'type', value = <<"text-multi">>},
|
||||
#xmlattr{name = 'label', value = ?T(Lang, "Message body")}]}
|
||||
]}]};
|
||||
|
||||
@ -1098,11 +1101,11 @@ get_form(Host, ["config", "acls"], Lang) ->
|
||||
[#xmlcdata{cdata =
|
||||
list_to_binary(?T(
|
||||
Lang, "Access Control List Configuration"))}]},
|
||||
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = [#xmlattr{name = 'type', value = "text-multi"},
|
||||
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = [#xmlattr{name = 'type', value = <<"text-multi">>},
|
||||
#xmlattr{name = 'label', value =
|
||||
?T(
|
||||
Lang, "Access control lists")},
|
||||
#xmlattr{name = 'var', value = "acls"}],
|
||||
#xmlattr{name = 'var', value = <<"acls">>}],
|
||||
children = lists:map(fun(S) ->
|
||||
#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children = [#xmlcdata{cdata = list_to_binary(S)}]}
|
||||
end,
|
||||
@ -1126,11 +1129,11 @@ get_form(Host, ["config", "access"], Lang) ->
|
||||
[#xmlcdata{cdata =
|
||||
list_to_binary(?T(
|
||||
Lang, "Access Configuration"))}]},
|
||||
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs =[#xmlattr{name = 'type', value = "text-multi"},
|
||||
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs =[#xmlattr{name = 'type', value = <<"text-multi">>},
|
||||
#xmlattr{name = 'label', value =
|
||||
?T(
|
||||
Lang, "Access rules")},
|
||||
#xmlattr{name = 'var', value = "access"}],
|
||||
#xmlattr{name = 'var', value = <<"access">>}],
|
||||
children = lists:map(fun(S) ->
|
||||
#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children =[#xmlcdata{cdata = list_to_binary(S)}]}
|
||||
end,
|
||||
@ -1153,19 +1156,19 @@ get_form(_Host, ?NS_ADMINL("add-user"), Lang) ->
|
||||
#xmlel{ns = ?NS_DATA_FORMS, name = 'title', children =
|
||||
[#xmlcdata{cdata = list_to_binary(?T(Lang, "Add User"))}]},
|
||||
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs =
|
||||
[#xmlattr{name = 'type', value = "jid-single"},
|
||||
[#xmlattr{name = 'type', value = <<"jid-single">>},
|
||||
#xmlattr{name = 'label', value = ?T(Lang, "Jabber ID")},
|
||||
#xmlattr{name = 'var', value = "accountjid"}], children =
|
||||
#xmlattr{name = 'var', value = <<"accountjid">>}], children =
|
||||
[#xmlel{ns = ?NS_DATA_FORMS, name = 'required'}]},
|
||||
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs =
|
||||
[#xmlattr{name = 'type', value = "text-private"},
|
||||
[#xmlattr{name = 'type', value = <<"text-private">>},
|
||||
#xmlattr{name = 'label', value = ?T(Lang, "Password")},
|
||||
#xmlattr{name = 'var', value = "password"}], children =
|
||||
#xmlattr{name = 'var', value = <<"password">>}], children =
|
||||
[#xmlel{ns = ?NS_DATA_FORMS, name = 'required'}]},
|
||||
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs =
|
||||
[#xmlattr{name = 'type', value = "text-private"},
|
||||
[#xmlattr{name = 'type', value = <<"text-private">>},
|
||||
#xmlattr{name = 'label', value = ?T(Lang, "Password Verification")},
|
||||
#xmlattr{name = 'var', value = "password-verify"}], children =
|
||||
#xmlattr{name = 'var', value = <<"password-verify">>}], children =
|
||||
[#xmlel{ns = ?NS_DATA_FORMS, name = 'required'}]}
|
||||
]}]};
|
||||
|
||||
@ -1175,9 +1178,9 @@ get_form(_Host, ?NS_ADMINL("delete-user"), Lang) ->
|
||||
#xmlel{ns = ?NS_DATA_FORMS, name = 'title', children =
|
||||
[#xmlcdata{cdata = list_to_binary(?T(Lang, "Delete User"))}]},
|
||||
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs =
|
||||
[#xmlattr{name = 'type', value = "jid-multi"},
|
||||
[#xmlattr{name = 'type', value = <<"jid-multi">>},
|
||||
#xmlattr{name = 'label', value = ?T(Lang, "Jabber ID")},
|
||||
#xmlattr{name = 'var', value = "accountjids"}], children =
|
||||
#xmlattr{name = 'var', value = <<"accountjids">>}], children =
|
||||
[#xmlel{ns = ?NS_DATA_FORMS, name = 'required'}]}
|
||||
]}]};
|
||||
|
||||
@ -1187,9 +1190,9 @@ get_form(_Host, ?NS_ADMINL("end-user-session"), Lang) ->
|
||||
#xmlel{ns = ?NS_DATA_FORMS, name = 'title', children =
|
||||
[#xmlcdata{cdata = list_to_binary(?T(Lang, "End User Session"))}]},
|
||||
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs =
|
||||
[#xmlattr{name = 'type', value = "jid-single"},
|
||||
[#xmlattr{name = 'type', value = <<"jid-single">>},
|
||||
#xmlattr{name = 'label', value = list_to_binary(?T(Lang, "Jabber ID"))},
|
||||
#xmlattr{name = 'var', value = "accountjid"}], children =
|
||||
#xmlattr{name = 'var', value = <<"accountjid">>}], children =
|
||||
[#xmlel{ns = ?NS_DATA_FORMS, name = 'required'}]}
|
||||
]}]};
|
||||
|
||||
@ -1199,9 +1202,9 @@ get_form(_Host, ?NS_ADMINL("get-user-password"), Lang) ->
|
||||
#xmlel{ns = ?NS_DATA_FORMS, name = 'title', children =
|
||||
[#xmlcdata{cdata = list_to_binary(?T(Lang, "Get User Password"))}]},
|
||||
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs =
|
||||
[#xmlattr{name = 'type', value = "jid-single"},
|
||||
[#xmlattr{name = 'type', value = <<"jid-single">>},
|
||||
#xmlattr{name = 'label', value = ?T(Lang, "Jabber ID")},
|
||||
#xmlattr{name = 'var', value = "accountjid"}], children =
|
||||
#xmlattr{name = 'var', value = <<"accountjid">>}], children =
|
||||
[#xmlel{ns = ?NS_DATA_FORMS, name = 'required'}]}
|
||||
]}]};
|
||||
|
||||
@ -1211,14 +1214,14 @@ get_form(_Host, ?NS_ADMINL("change-user-password"), Lang) ->
|
||||
#xmlel{ns = ?NS_DATA_FORMS, name = 'title', children =
|
||||
[#xmlcdata{cdata = list_to_binary(?T(Lang, "Get User Password"))}]},
|
||||
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs =
|
||||
[#xmlattr{name = 'type', value = "jid-single"},
|
||||
[#xmlattr{name = 'type', value = <<"jid-single">>},
|
||||
#xmlattr{name = 'label', value = ?T(Lang, "Jabber ID")},
|
||||
#xmlattr{name = 'var', value = "accountjid"}], children =
|
||||
#xmlattr{name = 'var', value = <<"accountjid">>}], children =
|
||||
[#xmlel{ns = ?NS_DATA_FORMS, name = 'required'}]},
|
||||
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs =
|
||||
[#xmlattr{name = 'type', value = "text-private"},
|
||||
[#xmlattr{name = 'type', value = <<"text-private">>},
|
||||
#xmlattr{name = 'label', value = ?T(Lang, "Password")},
|
||||
#xmlattr{name = 'var', value = "password"}], children =
|
||||
#xmlattr{name = 'var', value = <<"password">>}], children =
|
||||
[#xmlel{ns = ?NS_DATA_FORMS, name = 'required'}]}
|
||||
]}]};
|
||||
|
||||
@ -1228,9 +1231,9 @@ get_form(_Host, ?NS_ADMINL("get-user-lastlogin"), Lang) ->
|
||||
#xmlel{ns = ?NS_DATA_FORMS, name = 'title', children =
|
||||
[#xmlcdata{cdata = list_to_binary(?T(Lang, "Get User Last Login Time"))}]},
|
||||
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs =
|
||||
[#xmlattr{name = 'type', value = "jid-single"},
|
||||
[#xmlattr{name = 'type', value = <<"jid-single">>},
|
||||
#xmlattr{name = 'label', value = ?T(Lang, "Jabber ID")},
|
||||
#xmlattr{name = 'var', value = "accountjid"}], children =
|
||||
#xmlattr{name = 'var', value = <<"accountjid">>}], children =
|
||||
[#xmlel{ns = ?NS_DATA_FORMS, name = 'required'}]}
|
||||
]}]};
|
||||
|
||||
@ -1240,9 +1243,9 @@ get_form(_Host, ?NS_ADMINL("user-stats"), Lang) ->
|
||||
#xmlel{ns = ?NS_DATA_FORMS, name = 'title', children =
|
||||
[#xmlcdata{cdata = list_to_binary(?T(Lang, "Get User Statistics"))}]},
|
||||
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs =
|
||||
[#xmlattr{name = 'type', value = "jid-single"},
|
||||
[#xmlattr{name = 'type', value = <<"jid-single">>},
|
||||
#xmlattr{name = 'label', value = ?T(Lang, "Jabber ID")},
|
||||
#xmlattr{name = 'var', value = "accountjid"}], children =
|
||||
#xmlattr{name = 'var', value = <<"accountjid">>}], children =
|
||||
[#xmlel{ns = ?NS_DATA_FORMS, name = 'required'}]}
|
||||
]}]};
|
||||
|
||||
@ -1252,9 +1255,9 @@ get_form(Host, ?NS_ADMINL("get-registered-users-num"), Lang) ->
|
||||
[#xmlel{ns = ?NS_DATA_FORMS, name = 'x', children =
|
||||
[?HFIELD(),
|
||||
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs =
|
||||
[#xmlattr{name = 'type', value = "text-single"},
|
||||
[#xmlattr{name = 'type', value = <<"text-single">>},
|
||||
#xmlattr{name = 'label', value = ?T(Lang, "Number of registered users")},
|
||||
#xmlattr{name = 'var', value = "registeredusersnum"}], children =
|
||||
#xmlattr{name = 'var', value = <<"registeredusersnum">>}], children =
|
||||
[#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children = [#xmlcdata{cdata = list_to_binary(Num)}]}]
|
||||
}]}]};
|
||||
|
||||
@ -1264,9 +1267,9 @@ get_form(Host, ?NS_ADMINL("get-online-users-num"), Lang) ->
|
||||
[#xmlel{ns = ?NS_DATA_FORMS, name = 'x', children =
|
||||
[?HFIELD(),
|
||||
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs =
|
||||
[#xmlattr{name = 'type', value = "text-single"},
|
||||
[#xmlattr{name = 'type', value = <<"text-single">>},
|
||||
#xmlattr{name = 'label', value = ?T(Lang, "Number of online users")},
|
||||
#xmlattr{name = 'var', value = "onlineusersnum"}], children =
|
||||
#xmlattr{name = 'var', value = <<"onlineusersnum">>}], children =
|
||||
[#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children = [#xmlcdata{cdata = list_to_binary(Num)}]}]
|
||||
}]}]};
|
||||
|
||||
@ -1595,8 +1598,8 @@ set_form(_From, _Host, ?NS_ADMINL("get-user-password"), Lang, XData) ->
|
||||
true = is_list(Password),
|
||||
{result, [#xmlel{ns = ?NS_DATA_FORMS, name = 'x', children =
|
||||
[?HFIELD(),
|
||||
?XFIELD("jid-single", "Jabber ID", "accountjid", AccountString),
|
||||
?XFIELD("text-single", "Password", "password", Password)
|
||||
?XFIELD(<<"jid-single">>, "Jabber ID", <<"accountjid">>, list_to_binary(AccountString)),
|
||||
?XFIELD(<<"text-single">>, "Password", <<"password">>, list_to_binary(Password))
|
||||
]}]};
|
||||
|
||||
set_form(_From, _Host, ?NS_ADMINL("change-user-password"), _Lang, XData) ->
|
||||
@ -1640,10 +1643,10 @@ set_form(_From, _Host, ?NS_ADMINL("get-user-lastlogin"), Lang, XData) ->
|
||||
_ ->
|
||||
?T(Lang, "Online")
|
||||
end,
|
||||
{result, [#xmlel{ns = ?NS_DATA_FORMS, name = 'x', attrs = [#xmlattr{name = 'type', value = "result"}], children =
|
||||
{result, [#xmlel{ns = ?NS_DATA_FORMS, name = 'x', attrs = [#xmlattr{name = 'type', value = <<"result">>}], children =
|
||||
[?HFIELD(),
|
||||
?XFIELD("jid-single", "Jabber ID", "accountjid", AccountString),
|
||||
?XFIELD("text-single", "Last login", "lastlogin", FLast)
|
||||
?XFIELD(<<"jid-single">>, "Jabber ID", <<"accountjid">>, list_to_binary(AccountString)),
|
||||
?XFIELD(<<"text-single">>, "Last login", <<"lastlogin">>, list_to_binary(FLast))
|
||||
]}]};
|
||||
|
||||
set_form(_From, _Host, ?NS_ADMINL("user-stats"), Lang, XData) ->
|
||||
@ -1666,10 +1669,10 @@ set_form(_From, _Host, ?NS_ADMINL("user-stats"), Lang, XData) ->
|
||||
|
||||
{result, [#xmlel{ns = ?NS_DATA_FORMS, name = 'x', children =
|
||||
[?HFIELD(),
|
||||
?XFIELD("jid-single", "Jabber ID", "accountjid", AccountString),
|
||||
?XFIELD("text-single", "Roster size", "rostersize", Rostersize),
|
||||
?XMFIELD("text-multi", "IP addresses", "ipaddresses", IPs),
|
||||
?XMFIELD("text-multi", "Resources", "onlineresources", Resources)
|
||||
?XFIELD(<<"jid-single">>, "Jabber ID", <<"accountjid">>, AccountString),
|
||||
?XFIELD(<<"text-single">>, "Roster size", <<"rostersize">>, Rostersize),
|
||||
?XMFIELD(<<"text-multi">>, "IP addresses", <<"ipaddresses">>, IPs),
|
||||
?XMFIELD(<<"text-multi">>, "Resources", <<"onlineresources">>, Resources)
|
||||
]}]};
|
||||
|
||||
set_form(_From, _Host, _, _Lang, _XData) ->
|
||||
@ -1699,25 +1702,25 @@ stop_node(From, Host, ENode, Action, XData) ->
|
||||
Delay = list_to_integer(get_value("delay", XData)),
|
||||
Subject = case get_value("subject", XData) of
|
||||
[] -> [];
|
||||
S -> [#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = [#xmlattr{name = 'var', value = "subject"}], children =
|
||||
S -> [#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = [#xmlattr{name = 'var', value = <<"subject">>}], children =
|
||||
[#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children = [#xmlcdata{cdata = list_to_binary(S)}]}]}]
|
||||
end,
|
||||
Announcement = case get_values("announcement", XData) of
|
||||
[] -> [];
|
||||
As -> [#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = [#xmlattr{name = 'var', value = "body"}], children =
|
||||
As -> [#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = [#xmlattr{name = 'var', value = <<"body">>}], children =
|
||||
[#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children = [#xmlcdata{cdata = list_to_binary(Line)}]} || Line <- As] }]
|
||||
end,
|
||||
case Subject ++ Announcement of
|
||||
[] -> ok;
|
||||
SubEls ->
|
||||
Request = #adhoc_request{
|
||||
node = ?NS_ADMINX("announce-allhosts"),
|
||||
node = binary_to_list(?NS_ADMINX(<<"announce-allhosts">>)),
|
||||
action = "complete",
|
||||
xdata = #xmlel{ns = ?NS_DATA_FORMS, name = 'x', attrs =
|
||||
[#xmlattr{name = 'type', value = "submit"}], children =
|
||||
[#xmlattr{name = 'type', value = <<"submit">>}], children =
|
||||
SubEls},
|
||||
others= [#xmlel{ns = ?NS_DATA_FORMS, name = 'x', attrs =
|
||||
[#xmlattr{name = 'type', value = "submit"}], children =
|
||||
[#xmlattr{name = 'type', value = <<"submit">>}], children =
|
||||
SubEls}]
|
||||
},
|
||||
To = exmpp_jid:make_jid(Host),
|
||||
@ -1799,9 +1802,9 @@ get_sm_form(User, Server, "config", Lang) ->
|
||||
list_to_binary(?T(
|
||||
Lang, "Administration of ") ++ User)}]},
|
||||
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs =
|
||||
[#xmlattr{name = 'type', value = "list-single"},
|
||||
[#xmlattr{name = 'type', value = <<"list-single">>},
|
||||
#xmlattr{name = 'label', value = ?T(Lang, "Action on user")},
|
||||
#xmlattr{name = 'var', value = "action"}], children =
|
||||
#xmlattr{name = 'var', value = <<"action">>}], children =
|
||||
[#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children = [#xmlcdata{cdata = <<"edit">>}]},
|
||||
#xmlel{ns = ?NS_DATA_FORMS, name = 'option', attrs =
|
||||
[#xmlattr{name = 'label', value = ?T(Lang, "Edit Properties")}], children =
|
||||
@ -1810,8 +1813,8 @@ get_sm_form(User, Server, "config", Lang) ->
|
||||
[#xmlattr{name = 'label', value = ?T(Lang, "Remove User")}], children =
|
||||
[#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children = [#xmlcdata{cdata = <<"remove">>}]}]}
|
||||
]},
|
||||
?XFIELD("text-private", "Password", "password",
|
||||
ejabberd_auth:get_password_s(User, Server))
|
||||
?XFIELD(<<"text-private">>, "Password", <<"password">>,
|
||||
list_to_binary(ejabberd_auth:get_password_s(User, Server)))
|
||||
]}]};
|
||||
|
||||
get_sm_form(_User, _Server, _Node, _Lang) ->
|
||||
|
@ -125,18 +125,18 @@ process_get(#xmlel{ns = ?NS_ECONFIGURE, name = 'info'}) ->
|
||||
S2SConns = ejabberd_s2s:dirty_get_connections(),
|
||||
TConns = lists:usort([element(2, C) || C <- S2SConns]),
|
||||
Attrs = [#xmlattr{name = 'registered-users', value =
|
||||
integer_to_list(mnesia:table_info(passwd, size))},
|
||||
list_to_binary(integer_to_list(mnesia:table_info(passwd, size)))},
|
||||
#xmlattr{name = 'online-users', value =
|
||||
integer_to_list(mnesia:table_info(presence, size))},
|
||||
list_to_binary(integer_to_list(mnesia:table_info(presence, size)))},
|
||||
#xmlattr{name = 'running-nodes', value =
|
||||
integer_to_list(length(mnesia:system_info(running_db_nodes)))},
|
||||
list_to_binary(integer_to_list(length(mnesia:system_info(running_db_nodes))))},
|
||||
#xmlattr{name = 'stopped-nodes', value =
|
||||
integer_to_list(
|
||||
list_to_binary(integer_to_list(
|
||||
length(lists:usort(mnesia:system_info(db_nodes) ++
|
||||
mnesia:system_info(extra_db_nodes)) --
|
||||
mnesia:system_info(running_db_nodes)))},
|
||||
mnesia:system_info(running_db_nodes))))},
|
||||
#xmlattr{name = 'outgoing-s2s-servers', value =
|
||||
integer_to_list(length(TConns))}],
|
||||
list_to_binary(integer_to_list(length(TConns)))}],
|
||||
{result, #xmlel{ns = ?NS_ECONFIGURE, name = 'info', attrs = Attrs}};
|
||||
process_get(#xmlel{ns = ?NS_ECONFIGURE, name = 'welcome-message', attrs = Attrs}) ->
|
||||
{Subj, Body} = case ejabberd_config:get_local_option(welcome_message) of
|
||||
|
@ -130,7 +130,7 @@ unregister_extra_domain(Host, Domain) ->
|
||||
|
||||
process_local_iq_items(From, To, #iq{type = get, payload = SubEl,
|
||||
lang = Lang} = IQ_Rec) ->
|
||||
Node = exmpp_xml:get_attribute(SubEl, 'node', ""),
|
||||
Node = exmpp_xml:get_attribute_as_binary(SubEl, 'node', <<>>),
|
||||
|
||||
case ejabberd_hooks:run_fold(disco_local_items,
|
||||
exmpp_jid:ldomain(To),
|
||||
@ -138,7 +138,7 @@ process_local_iq_items(From, To, #iq{type = get, payload = SubEl,
|
||||
[From, To, Node, Lang]) of
|
||||
{result, Items} ->
|
||||
ANode = case Node of
|
||||
"" -> [];
|
||||
<<>> -> [];
|
||||
_ -> [#xmlattr{name = 'node', value = Node}]
|
||||
end,
|
||||
Result = #xmlel{ns = ?NS_DISCO_ITEMS, name = 'query',
|
||||
@ -153,7 +153,7 @@ process_local_iq_items(_From, _To, #iq{type = set} = IQ_Rec) ->
|
||||
|
||||
process_local_iq_info(From, To, #iq{type = get, payload = SubEl,
|
||||
lang = Lang} = IQ_Rec) ->
|
||||
Node = exmpp_xml:get_attribute(SubEl, 'node', ""),
|
||||
Node = exmpp_xml:get_attribute_as_binary(SubEl, 'node', <<>>),
|
||||
Identity = ejabberd_hooks:run_fold(disco_local_identity,
|
||||
exmpp_jid:ldomain(To),
|
||||
[],
|
||||
@ -164,7 +164,7 @@ process_local_iq_info(From, To, #iq{type = get, payload = SubEl,
|
||||
[From, To, Node, Lang]) of
|
||||
{result, Features} ->
|
||||
ANode = case Node of
|
||||
"" -> [];
|
||||
<<>> -> [];
|
||||
_ -> [#xmlattr{name = 'node', value = Node}]
|
||||
end,
|
||||
Result = #xmlel{ns = ?NS_DISCO_INFO, name = 'query',
|
||||
@ -178,11 +178,11 @@ process_local_iq_info(From, To, #iq{type = get, payload = SubEl,
|
||||
process_local_iq_info(_From, _To, #iq{type = set} = IQ_Rec) ->
|
||||
exmpp_iq:error(IQ_Rec, 'not-allowed').
|
||||
|
||||
get_local_identity(Acc, _From, _To, [], _Lang) ->
|
||||
get_local_identity(Acc, _From, _To, <<>>, _Lang) ->
|
||||
Acc ++ [#xmlel{ns = ?NS_DISCO_INFO, name = 'identity', attrs = [
|
||||
#xmlattr{name = 'category', value = "server"},
|
||||
#xmlattr{name = 'type', value = "im"},
|
||||
#xmlattr{name = 'name', value = "ejabberd"}
|
||||
#xmlattr{name = 'category', value = <<"server">>},
|
||||
#xmlattr{name = 'type', value = <<"im">>},
|
||||
#xmlattr{name = 'name', value = <<"ejabberd">>}
|
||||
]}];
|
||||
|
||||
get_local_identity(Acc, _From, _To, _Node, _Lang) ->
|
||||
@ -191,7 +191,7 @@ get_local_identity(Acc, _From, _To, _Node, _Lang) ->
|
||||
get_local_features({error, _Error} = Acc, _From, _To, _Node, _Lang) ->
|
||||
Acc;
|
||||
|
||||
get_local_features(Acc, _From, To, [], _Lang) ->
|
||||
get_local_features(Acc, _From, To, <<>>, _Lang) ->
|
||||
Feats = case Acc of
|
||||
{result, Features} -> Features;
|
||||
empty -> []
|
||||
@ -211,28 +211,30 @@ get_local_features(Acc, _From, _To, _Node, _Lang) ->
|
||||
|
||||
feature_to_xml({{Feature, _Host}}) ->
|
||||
feature_to_xml(Feature);
|
||||
feature_to_xml(Feature) when is_list(Feature) ->
|
||||
|
||||
feature_to_xml(Feature) when is_binary(Feature) ->
|
||||
#xmlel{ns = ?NS_DISCO_INFO, name = 'feature', attrs = [
|
||||
#xmlattr{name = 'var', value = Feature}
|
||||
]};
|
||||
|
||||
feature_to_xml(Feature) when is_list(Feature) ->
|
||||
feature_to_xml(list_to_binary(Feature));
|
||||
feature_to_xml(Feature) when is_atom(Feature) ->
|
||||
#xmlel{ns = ?NS_DISCO_INFO, name = 'feature', attrs = [
|
||||
#xmlattr{name = 'var', value = atom_to_list(Feature)}
|
||||
]}.
|
||||
feature_to_xml(atom_to_list(Feature)).
|
||||
|
||||
domain_to_xml({Domain}) ->
|
||||
domain_to_xml(Domain);
|
||||
domain_to_xml(Domain) when is_binary(Domain)->
|
||||
#xmlel{ns = ?NS_DISCO_ITEMS, name = 'item', attrs = [
|
||||
#xmlattr{name = 'jid', value = Domain}
|
||||
]};
|
||||
domain_to_xml(Domain) ->
|
||||
#xmlel{ns = ?NS_DISCO_ITEMS, name = 'item', attrs = [
|
||||
#xmlattr{name = 'jid', value = Domain}
|
||||
]}.
|
||||
domain_to_xml(Domain) when is_list(Domain) ->
|
||||
domain_to_xml(list_to_binary(Domain)).
|
||||
|
||||
get_local_services({error, _Error} = Acc, _From, _To, _Node, _Lang) ->
|
||||
Acc;
|
||||
|
||||
get_local_services(Acc, _From, To, [], _Lang) ->
|
||||
get_local_services(Acc, _From, To, <<>>, _Lang) ->
|
||||
Items = case Acc of
|
||||
{result, Its} -> Its;
|
||||
empty -> []
|
||||
@ -270,14 +272,14 @@ get_vh_services(Host) ->
|
||||
|
||||
process_sm_iq_items(From, To, #iq{type = get, payload = SubEl,
|
||||
lang = Lang} = IQ_Rec) ->
|
||||
Node = exmpp_xml:get_attribute(SubEl, 'node', ""),
|
||||
Node = exmpp_xml:get_attribute_as_binary(SubEl, 'node', <<>>),
|
||||
case ejabberd_hooks:run_fold(disco_sm_items,
|
||||
exmpp_jid:ldomain(To),
|
||||
empty,
|
||||
[From, To, Node, Lang]) of
|
||||
{result, Items} ->
|
||||
ANode = case Node of
|
||||
"" -> [];
|
||||
<<>> -> [];
|
||||
_ -> [#xmlattr{name = 'node', value = Node}]
|
||||
end,
|
||||
Result = #xmlel{ns = ?NS_DISCO_ITEMS, name = 'query',
|
||||
@ -311,7 +313,7 @@ process_sm_iq_items(From, To, #iq{type = set, payload = SubEl} = IQ_Rec) ->
|
||||
get_sm_items({error, _Error} = Acc, _From, _To, _Node, _Lang) ->
|
||||
Acc;
|
||||
|
||||
get_sm_items(Acc, From, To, [], _Lang) ->
|
||||
get_sm_items(Acc, From, To, <<>>, _Lang) ->
|
||||
LFrom = exmpp_jid:lnode_as_list(From),
|
||||
LSFrom = exmpp_jid:ldomain_as_list(From),
|
||||
LTo = exmpp_jid:lnode_as_list(To),
|
||||
@ -344,7 +346,7 @@ get_sm_items(empty, From, To, _Node, _Lang) ->
|
||||
|
||||
process_sm_iq_info(From, To, #iq{type = get, payload = SubEl,
|
||||
lang = Lang} = IQ_Rec) ->
|
||||
Node = exmpp_xml:get_attribute(SubEl, 'node', ""),
|
||||
Node = exmpp_xml:get_attribute_as_binary(SubEl, 'node', <<>>),
|
||||
Identity = ejabberd_hooks:run_fold(disco_sm_identity,
|
||||
exmpp_jid:ldomain(To),
|
||||
[],
|
||||
@ -355,7 +357,7 @@ process_sm_iq_info(From, To, #iq{type = get, payload = SubEl,
|
||||
[From, To, Node, Lang]) of
|
||||
{result, Features} ->
|
||||
ANode = case Node of
|
||||
"" -> [];
|
||||
<<>> -> [];
|
||||
_ -> [#xmlattr{name = 'node', value = Node}]
|
||||
end,
|
||||
Result = #xmlel{ns = ?NS_DISCO_INFO, name = 'query',
|
||||
@ -395,8 +397,8 @@ get_user_resources(JID) ->
|
||||
lists:map(fun(R) ->
|
||||
#xmlel{ns = ?NS_DISCO_ITEMS, name = 'item', attrs = [
|
||||
#xmlattr{name = 'jid', value =
|
||||
exmpp_jid:jid_to_list(exmpp_jid:bare_jid_to_jid(JID, R))},
|
||||
#xmlattr{name = 'name', value = exmpp_jid:lnode_as_list(JID)}
|
||||
exmpp_jid:jid_to_binary(exmpp_jid:bare_jid_to_jid(JID, R))},
|
||||
#xmlattr{name = 'name', value = exmpp_jid:lnode(JID)}
|
||||
]}
|
||||
end, lists:sort(Rs)).
|
||||
|
||||
@ -408,7 +410,7 @@ get_publish_items(empty, From, To, Node, _Lang) ->
|
||||
LSTo = exmpp_jid:ldomain_as_list(To),
|
||||
if
|
||||
(LFrom == LTo) and (LSFrom == LSTo) ->
|
||||
retrieve_disco_publish({LTo, LSTo}, Node);
|
||||
retrieve_disco_publish({LTo, LSTo}, binary_to_list(Node));
|
||||
true ->
|
||||
empty
|
||||
end;
|
||||
@ -486,18 +488,18 @@ retrieve_disco_publish(User, Node) ->
|
||||
name = Name,
|
||||
node = PNode}) ->
|
||||
#xmlel{ns = ?NS_DISCO_ITEMS, name = 'item', attrs =
|
||||
lists:append([[#xmlattr{name = 'jid', value = Jid}],
|
||||
lists:append([[#xmlattr{name = 'jid', value = list_to_binary(Jid)}],
|
||||
case Name of
|
||||
"" ->
|
||||
[];
|
||||
_ ->
|
||||
[#xmlattr{name = 'name', value = Name}]
|
||||
[#xmlattr{name = 'name', value = list_to_binary(Name)}]
|
||||
end,
|
||||
case PNode of
|
||||
"" ->
|
||||
[];
|
||||
_ ->
|
||||
[#xmlattr{name = 'node', value = PNode}]
|
||||
[#xmlattr{name = 'node', value = list_to_binary(PNode)}]
|
||||
end])}
|
||||
end, Items)}
|
||||
end.
|
||||
|
@ -303,17 +303,17 @@ closed_connection(Host, From, Server) ->
|
||||
|
||||
iq_disco(Lang) ->
|
||||
[#xmlel{ns = ?NS_DISCO_INFO, name = 'identity', attrs =
|
||||
[#xmlattr{name = 'category', value = "conference"},
|
||||
#xmlattr{name = 'type', value = "irc"},
|
||||
#xmlattr{name = 'name', value = translate:translate(Lang, "IRC Transport")}]},
|
||||
[#xmlattr{name = 'category', value = <<"conference">>},
|
||||
#xmlattr{name = 'type', value = <<"irc">>},
|
||||
#xmlattr{name = 'name', value = list_to_binary(translate:translate(Lang, "IRC Transport"))}]},
|
||||
#xmlel{ns = ?NS_DISCO_INFO, name = 'feature', attrs =
|
||||
[#xmlattr{name = 'var', value = ?NS_DISCO_INFO_s}]},
|
||||
[#xmlattr{name = 'var', value = list_to_binary(?NS_DISCO_INFO_s)}]},
|
||||
#xmlel{ns = ?NS_DISCO_INFO, name = 'feature', attrs =
|
||||
[#xmlattr{name = 'var', value = ?NS_MUC_s}]},
|
||||
[#xmlattr{name = 'var', value = list_to_binary(?NS_MUC_s)}]},
|
||||
#xmlel{ns = ?NS_DISCO_INFO, name = 'feature', attrs =
|
||||
[#xmlattr{name = 'var', value = ?NS_INBAND_REGISTER_s}]},
|
||||
[#xmlattr{name = 'var', value = list_to_binary(?NS_INBAND_REGISTER_s)}]},
|
||||
#xmlel{ns = ?NS_DISCO_INFO, name = 'feature', attrs =
|
||||
[#xmlattr{name = 'var', value = ?NS_VCARD_s}]}].
|
||||
[#xmlattr{name = 'var', value = list_to_binary(?NS_VCARD_s)}]}].
|
||||
|
||||
iq_get_vcard(Lang) ->
|
||||
[#xmlel{ns = ?NS_VCARD, name = 'FN', children =
|
||||
@ -439,13 +439,13 @@ get_form(Host, From, [], Lang, DefEnc) ->
|
||||
Lang,
|
||||
"Enter username and encodings you wish to use for "
|
||||
"connecting to IRC servers"))}]},
|
||||
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = [#xmlattr{name = 'type', value = "text-single"},
|
||||
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = [#xmlattr{name = 'type', value = <<"text-single">>},
|
||||
#xmlattr{name = 'label', value =
|
||||
translate:translate(
|
||||
Lang, "IRC Username")},
|
||||
#xmlattr{name = 'var', value = "username"}], children =
|
||||
list_to_binary(translate:translate(
|
||||
Lang, "IRC Username"))},
|
||||
#xmlattr{name = 'var', value = <<"username">>}], children =
|
||||
[#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children = [#xmlcdata{cdata = list_to_binary(Username)}]}]},
|
||||
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = [#xmlattr{name = 'type', value = "fixed"}], children =
|
||||
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = [#xmlattr{name = 'type', value = <<"fixed">>}], children =
|
||||
[#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children =
|
||||
[#xmlcdata{cdata = list_to_binary(
|
||||
lists:flatten(
|
||||
@ -457,7 +457,7 @@ get_form(Host, From, [], Lang, DefEnc) ->
|
||||
"in format '{\"irc server\", \"encoding\"}'. "
|
||||
"By default this service use \"~s\" encoding."),
|
||||
[DefEnc])))}]}]},
|
||||
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = [#xmlattr{name = 'type', value = "fixed"}], children =
|
||||
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = [#xmlattr{name = 'type', value = <<"fixed">>}], children =
|
||||
[#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children =
|
||||
[#xmlcdata{cdata = list_to_binary(
|
||||
translate:translate(
|
||||
@ -465,10 +465,10 @@ get_form(Host, From, [], Lang, DefEnc) ->
|
||||
"Example: [{\"irc.lucky.net\", \"koi8-r\"}, "
|
||||
"{\"vendetta.fef.net\", \"iso8859-1\"}]."
|
||||
))}]}]},
|
||||
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = [#xmlattr{name = 'type', value = "text-multi"},
|
||||
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs = [#xmlattr{name = 'type', value = <<"text-multi">>},
|
||||
#xmlattr{name = 'label', value =
|
||||
translate:translate(Lang, "Encodings")},
|
||||
#xmlattr{name = 'var', value = "encodings"}], children =
|
||||
list_to_binary(translate:translate(Lang, "Encodings"))},
|
||||
#xmlattr{name = 'var', value = <<"encodings">>}], children =
|
||||
lists:map(
|
||||
fun(S) ->
|
||||
#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children = [#xmlcdata{cdata = list_to_binary(S)}]}
|
||||
|
@ -590,8 +590,8 @@ terminate(_Reason, _StateName, StateData) ->
|
||||
lists:concat([Chan, "%", StateData#state.server]),
|
||||
StateData#state.host, StateData#state.nick),
|
||||
StateData#state.user,
|
||||
#xmlel{ns = ?NS_JABBER_CLIENT, name = 'presence', attrs = [#xmlattr{name = 'type', value = "error"}], children =
|
||||
[#xmlel{ns = ?NS_JABBER_CLIENT, name = 'error', attrs = [#xmlattr{name = 'code', value = "502"}], children =
|
||||
#xmlel{ns = ?NS_JABBER_CLIENT, name = 'presence', attrs = [#xmlattr{name = 'type', value = <<"error">>}], children =
|
||||
[#xmlel{ns = ?NS_JABBER_CLIENT, name = 'error', attrs = [#xmlattr{name = 'code', value = <<"502">>}], children =
|
||||
[#xmlcdata{cdata = <<"Server Connect Failed">>}]}]})
|
||||
end, dict:fetch_keys(StateData#state.channels)),
|
||||
case StateData#state.socket of
|
||||
@ -629,11 +629,11 @@ bounce_messages(Reason) ->
|
||||
ok;
|
||||
_ ->
|
||||
Error = #xmlel{ns = ?NS_JABBER_CLIENT, name = 'error',
|
||||
attrs = [#xmlattr{name = 'code', value = "502"}],
|
||||
attrs = [#xmlattr{name = 'code', value = <<"502">>}],
|
||||
children = [#xmlcdata{cdata = Reason}]},
|
||||
Err = exmpp_stanza:reply_with_error(El, Error),
|
||||
From = exmpp_jid:list_to_jid(exmpp_stanza:get_sender(El)),
|
||||
To = exmpp_jid:list_to_jid(exmpp_stanza:get_recipient(El)),
|
||||
From = exmpp_jid:binary_to_jid(exmpp_stanza:get_sender(El)),
|
||||
To = exmpp_jid:binary_to_jid(exmpp_stanza:get_recipient(El)),
|
||||
ejabberd_router:route(To, From, Err)
|
||||
end,
|
||||
bounce_messages(Reason)
|
||||
@ -678,12 +678,12 @@ process_channel_list_user(StateData, Chan, User) ->
|
||||
end,
|
||||
{User2, Affiliation, Role} =
|
||||
case User1 of
|
||||
[$@ | U2] -> {U2, "admin", "moderator"};
|
||||
[$+ | U2] -> {U2, "member", "participant"};
|
||||
[$\% | U2] -> {U2, "admin", "moderator"};
|
||||
[$& | U2] -> {U2, "admin", "moderator"};
|
||||
[$~ | U2] -> {U2, "admin", "moderator"};
|
||||
_ -> {User1, "member", "participant"}
|
||||
[$@ | U2] -> {U2, <<"admin">>, <<"moderator">>};
|
||||
[$+ | U2] -> {U2, <<"member">>, <<"participant">>};
|
||||
[$\% | U2] -> {U2, <<"admin">>, <<"moderator">>};
|
||||
[$& | U2] -> {U2, <<"admin">>, <<"moderator">>};
|
||||
[$~ | U2] -> {U2, <<"admin">>, <<"moderator">>};
|
||||
_ -> {User1, <<"member">>, <<"participant">>}
|
||||
end,
|
||||
ejabberd_router:route(
|
||||
exmpp_jid:make_jid(lists:concat([Chan, "%", StateData#state.server]),
|
||||
@ -893,11 +893,11 @@ process_part(StateData, Chan, From, String) ->
|
||||
exmpp_jid:make_jid(lists:concat([Chan, "%", StateData#state.server]),
|
||||
StateData#state.host, FromUser),
|
||||
StateData#state.user,
|
||||
#xmlel{ns = ?NS_JABBER_CLIENT, name = 'presence', attrs = [#xmlattr{name = 'type', value = "unavailable"}], children =
|
||||
#xmlel{ns = ?NS_JABBER_CLIENT, name = 'presence', attrs = [#xmlattr{name = 'type', value = <<"unavailable">>}], children =
|
||||
[#xmlel{ns = ?NS_MUC_USER, name = 'x', children =
|
||||
[#xmlel{ns = ?NS_MUC_USER, name = 'item', attrs =
|
||||
[#xmlattr{name = 'affiliation', value = "member"},
|
||||
#xmlattr{name = 'role', value = "none"}]}]},
|
||||
[#xmlattr{name = 'affiliation', value = <<"member">>},
|
||||
#xmlattr{name = 'role', value = <<"none">>}]}]},
|
||||
#xmlel{ns = ?NS_MUC_USER, name = 'status', children =
|
||||
[#xmlcdata{cdata = list_to_binary(Msg1 ++ " (" ++ FromIdent ++ ")")}]}]
|
||||
}),
|
||||
@ -927,11 +927,11 @@ process_quit(StateData, From, String) ->
|
||||
lists:concat([Chan, "%", StateData#state.server]),
|
||||
StateData#state.host, FromUser),
|
||||
StateData#state.user,
|
||||
#xmlel{ns = ?NS_JABBER_CLIENT, name = 'presence', attrs = [#xmlattr{name = 'type', value = "unavailable"}], children =
|
||||
#xmlel{ns = ?NS_JABBER_CLIENT, name = 'presence', attrs = [#xmlattr{name = 'type', value = <<"unavailable">>}], children =
|
||||
[#xmlel{ns = ?NS_MUC_USER, name = 'x', children =
|
||||
[#xmlel{ns = ?NS_MUC_USER, name = 'item', attrs =
|
||||
[#xmlattr{name = 'affiliation', value = "member"},
|
||||
#xmlattr{name = 'role', value = "none"}]}]},
|
||||
[#xmlattr{name = 'affiliation', value = <<"member">>},
|
||||
#xmlattr{name = 'role', value = <<"none">>}]}]},
|
||||
#xmlel{ns = ?NS_MUC_USER, name = 'status', children =
|
||||
[#xmlcdata{cdata = list_to_binary(Msg1 ++ " (" ++ FromIdent ++ ")")}]}
|
||||
]}),
|
||||
@ -953,8 +953,8 @@ process_join(StateData, Channel, From, _String) ->
|
||||
#xmlel{ns = ?NS_JABBER_CLIENT, name = 'presence', children =
|
||||
[#xmlel{ns = ?NS_MUC_USER, name = 'x', children =
|
||||
[#xmlel{ns = ?NS_MUC_USER, name = 'item', attrs =
|
||||
[#xmlattr{name = 'affiliation', value = "member"},
|
||||
#xmlattr{name = 'role', value = "participant"}]}]},
|
||||
[#xmlattr{name = 'affiliation', value = <<"member">>},
|
||||
#xmlattr{name = 'role', value = <<"participant">>}]}]},
|
||||
#xmlel{ns = ?NS_MUC_USER, name = 'status', children =
|
||||
[#xmlcdata{cdata = list_to_binary(FromIdent)}]}]}),
|
||||
|
||||
@ -979,8 +979,8 @@ process_mode_o(StateData, Chan, _From, Nick, Affiliation, Role) ->
|
||||
#xmlel{ns = ?NS_JABBER_CLIENT, name = 'presence', children =
|
||||
[#xmlel{ns = ?NS_MUC_USER, name = 'x', children =
|
||||
[#xmlel{ns = ?NS_MUC_USER, name = 'item', attrs =
|
||||
[#xmlattr{name = 'affiliation', value = Affiliation},
|
||||
#xmlattr{name = 'role', value = Role}]}]}]}).
|
||||
[#xmlattr{name = 'affiliation', value = list_to_binary(Affiliation)},
|
||||
#xmlattr{name = 'role', value = list_to_binary(Role)}]}]}]}).
|
||||
|
||||
process_kick(StateData, Chan, From, Nick, String) ->
|
||||
Msg = lists:last(string:tokens(String, ":")),
|
||||
@ -994,12 +994,12 @@ process_kick(StateData, Chan, From, Nick, String) ->
|
||||
exmpp_jid:make_jid(lists:concat([Chan, "%", StateData#state.server]),
|
||||
StateData#state.host, Nick),
|
||||
StateData#state.user,
|
||||
#xmlel{ns = ?NS_JABBER_CLIENT, name = 'presence', attrs = [#xmlattr{name = 'type', value = "unavailable"}], children =
|
||||
#xmlel{ns = ?NS_JABBER_CLIENT, name = 'presence', attrs = [#xmlattr{name = 'type', value = <<"unavailable">>}], children =
|
||||
[#xmlel{ns = ?NS_MUC_USER, name = 'x', children =
|
||||
[#xmlel{ns = ?NS_MUC_USER, name = 'item', attrs =
|
||||
[#xmlattr{name = 'affiliation', value = "none"},
|
||||
#xmlattr{name = 'role', value = "none"}]},
|
||||
#xmlel{ns = ?NS_MUC_USER, name = 'status', attrs = [#xmlattr{name = 'code', value = "307"}]}
|
||||
[#xmlattr{name = 'affiliation', value = <<"none">>},
|
||||
#xmlattr{name = 'role', value = <<"none">>}]},
|
||||
#xmlel{ns = ?NS_MUC_USER, name = 'status', attrs = [#xmlattr{name = 'code', value = <<"307">>}]}
|
||||
]}]}).
|
||||
|
||||
process_nick(StateData, From, NewNick) ->
|
||||
@ -1015,13 +1015,13 @@ process_nick(StateData, From, NewNick) ->
|
||||
lists:concat([Chan, "%", StateData#state.server]),
|
||||
StateData#state.host, FromUser),
|
||||
StateData#state.user,
|
||||
#xmlel{ns = ?NS_JABBER_CLIENT, name = 'presence', attrs = [#xmlattr{name = 'type', value = "unavailable"}], children =
|
||||
#xmlel{ns = ?NS_JABBER_CLIENT, name = 'presence', attrs = [#xmlattr{name = 'type', value = <<"unavailable">>}], children =
|
||||
[#xmlel{ns = ?NS_MUC_USER, name = 'x', children =
|
||||
[#xmlel{ns = ?NS_MUC_USER, name = 'item', attrs =
|
||||
[#xmlattr{name = 'affiliation', value = "member"},
|
||||
#xmlattr{name = 'role', value = "participant"},
|
||||
#xmlattr{name = 'nick', value = Nick}]},
|
||||
#xmlel{ns = ?NS_MUC_USER, name = 'status', attrs = [#xmlattr{name = 'code', value = "303"}]}
|
||||
[#xmlattr{name = 'affiliation', value = <<"member">>},
|
||||
#xmlattr{name = 'role', value = <<"participant">>},
|
||||
#xmlattr{name = 'nick', value = list_to_binary(Nick)}]},
|
||||
#xmlel{ns = ?NS_MUC_USER, name = 'status', attrs = [#xmlattr{name = 'code', value = <<"303">>}]}
|
||||
]}]}),
|
||||
ejabberd_router:route(
|
||||
exmpp_jid:make_jid(
|
||||
@ -1031,8 +1031,8 @@ process_nick(StateData, From, NewNick) ->
|
||||
#xmlel{ns = ?NS_JABBER_CLIENT, name = 'presence', children =
|
||||
[#xmlel{ns = ?NS_MUC_USER, name = 'x', children =
|
||||
[#xmlel{ns = ?NS_MUC_USER, name = 'item', attrs =
|
||||
[#xmlattr{name = 'affiliation', value = "member"},
|
||||
#xmlattr{name = 'role', value = "participant"}]}
|
||||
[#xmlattr{name = 'affiliation', value = <<"member">>},
|
||||
#xmlattr{name = 'role', value = <<"participant">>}]}
|
||||
]}]}),
|
||||
?SETS:add_element(Nick,
|
||||
remove_element(FromUser, Ps));
|
||||
@ -1051,8 +1051,8 @@ process_error(StateData, String) ->
|
||||
lists:concat([Chan, "%", StateData#state.server]),
|
||||
StateData#state.host, StateData#state.nick),
|
||||
StateData#state.user,
|
||||
#xmlel{ns = ?NS_JABBER_CLIENT, name = 'presence', attrs = [#xmlattr{name = 'type', value = "error"}], children =
|
||||
[#xmlel{ns = ?NS_JABBER_CLIENT, name = 'error', attrs = [#xmlattr{name = 'code', value = "502"}], children =
|
||||
#xmlel{ns = ?NS_JABBER_CLIENT, name = 'presence', attrs = [#xmlattr{name = 'type', value = <<"error">>}], children =
|
||||
[#xmlel{ns = ?NS_JABBER_CLIENT, name = 'error', attrs = [#xmlattr{name = 'code', value = <<"502">>}], children =
|
||||
[#xmlcdata{cdata = list_to_binary(String)}]}]})
|
||||
end, dict:fetch_keys(StateData#state.channels)).
|
||||
|
||||
|
@ -74,7 +74,7 @@ stop(Host) ->
|
||||
process_local_iq(_From, _To, #iq{type = get} = IQ_Rec) ->
|
||||
Sec = trunc(element(1, erlang:statistics(wall_clock))/1000),
|
||||
Response = #xmlel{ns = ?NS_LAST_ACTIVITY, name = 'query', attrs =
|
||||
[#xmlattr{name = 'seconds', value = integer_to_list(Sec)}]},
|
||||
[#xmlattr{name = 'seconds', value = list_to_binary(integer_to_list(Sec))}]},
|
||||
exmpp_iq:result(IQ_Rec, Response);
|
||||
process_local_iq(_From, _To, #iq{type = set} = IQ_Rec) ->
|
||||
exmpp_iq:error(IQ_Rec, 'not-allowed').
|
||||
@ -121,7 +121,7 @@ get_last(IQ_Rec, LUser, LServer) ->
|
||||
TimeStamp2 = MegaSecs * 1000000 + Secs,
|
||||
Sec = TimeStamp2 - TimeStamp,
|
||||
Response = #xmlel{ns = ?NS_LAST_ACTIVITY, name = 'query',
|
||||
attrs = [#xmlattr{name = 'seconds', value = integer_to_list(Sec)}],
|
||||
attrs = [#xmlattr{name = 'seconds', value = list_to_binary(integer_to_list(Sec))}],
|
||||
children = [#xmlcdata{cdata = Status}]},
|
||||
exmpp_iq:result(IQ_Rec, Response)
|
||||
end.
|
||||
|
@ -67,7 +67,7 @@ stop(Host) ->
|
||||
process_local_iq(_From, _To, #iq{type = get} = IQ_Rec) ->
|
||||
Sec = trunc(element(1, erlang:statistics(wall_clock))/1000),
|
||||
Response = #xmlel{ns = ?NS_LAST_ACTIVITY, name = 'query', attrs =
|
||||
[#xmlattr{name = 'seconds', value = integer_to_list(Sec)}]},
|
||||
[#xmlattr{name = 'seconds', value = list_to_binary(integer_to_list(Sec))}]},
|
||||
exmpp_iq:result(IQ_Rec, Response);
|
||||
process_local_iq(_From, _To, #iq{type = set} = IQ_Rec) ->
|
||||
exmpp_iq:error(IQ_Rec, 'not-allowed').
|
||||
@ -116,7 +116,7 @@ get_last(IQ_Rec, LUser, LServer) ->
|
||||
TimeStamp2 = MegaSecs * 1000000 + Secs,
|
||||
Sec = TimeStamp2 - TimeStamp,
|
||||
Response = #xmlel{ns = ?NS_LAST_ACTIVITY, name = 'query',
|
||||
attrs = [#xmlattr{name = 'seconds', value = integer_to_list(Sec)}],
|
||||
attrs = [#xmlattr{name = 'seconds', value = list_to_binary(integer_to_list(Sec))}],
|
||||
children = [#xmlcdata{cdata = list_to_binary(Status)}]},
|
||||
exmpp_iq:result(IQ_Rec, Response);
|
||||
_ ->
|
||||
|
@ -98,19 +98,20 @@ stop(Host) ->
|
||||
%% C) mod_muc:stop was called, and each room is being terminated
|
||||
%% In this case, the mod_muc process died before the room processes
|
||||
%% So the message sending must be catched
|
||||
room_destroyed(Host, Room, Pid, ServerHost) ->
|
||||
room_destroyed(Host, Room, Pid, ServerHost) when is_binary(Host),
|
||||
is_binary(Room) ->
|
||||
catch gen_mod:get_module_proc(ServerHost, ?PROCNAME) !
|
||||
{room_destroyed, {Room, Host}, Pid},
|
||||
ok.
|
||||
|
||||
store_room(Host, Name, Opts) ->
|
||||
store_room(Host, Name, Opts) when is_binary(Host), is_binary(Name) ->
|
||||
F = fun() ->
|
||||
mnesia:write(#muc_room{name_host = {Name, Host},
|
||||
opts = Opts})
|
||||
end,
|
||||
mnesia:transaction(F).
|
||||
|
||||
restore_room(Host, Name) ->
|
||||
restore_room(Host, Name) when is_binary(Host), is_binary(Name) ->
|
||||
case catch mnesia:dirty_read(muc_room, {Name, Host}) of
|
||||
[#muc_room{opts = Opts}] ->
|
||||
Opts;
|
||||
@ -118,7 +119,7 @@ restore_room(Host, Name) ->
|
||||
error
|
||||
end.
|
||||
|
||||
forget_room(Host, Name) ->
|
||||
forget_room(Host, Name) when is_binary(Host), is_binary(Name) ->
|
||||
F = fun() ->
|
||||
mnesia:delete({muc_room, {Name, Host}})
|
||||
end,
|
||||
|
@ -257,9 +257,9 @@ pop_offline_messages(Ls, User, Server)
|
||||
[El] = exmpp_xml:parse_document(XML,
|
||||
[names_as_atom, {check_elems, xmpp},
|
||||
{check_nss,xmpp}, {check_attrs,xmpp}]),
|
||||
To = exmpp_jid:list_to_jid(
|
||||
To = exmpp_jid:binary_to_jid(
|
||||
exmpp_stanza:get_recipient(El)),
|
||||
From = exmpp_jid:list_to_jid(
|
||||
From = exmpp_jid:binary_to_jid(
|
||||
exmpp_stanza:get_sender(El)),
|
||||
[{route, From, To, El}]
|
||||
catch
|
||||
|
@ -156,14 +156,14 @@ process_list_get(LUser, LServer, Name) ->
|
||||
|
||||
|
||||
item_to_xml(Item) ->
|
||||
Attrs1 = [#xmlattr{name = 'action', value = action_to_list(Item#listitem.action)},
|
||||
#xmlattr{name = 'order', value = order_to_list(Item#listitem.order)}],
|
||||
Attrs1 = [#xmlattr{name = 'action', value = action_to_binary(Item#listitem.action)},
|
||||
#xmlattr{name = 'order', value = order_to_binary(Item#listitem.order)}],
|
||||
Attrs2 = case Item#listitem.type of
|
||||
none ->
|
||||
Attrs1;
|
||||
Type ->
|
||||
[#xmlattr{name = 'type', value = type_to_list(Item#listitem.type)},
|
||||
#xmlattr{name = 'value', value = value_to_list(Type, Item#listitem.value)} |
|
||||
[#xmlattr{name = 'type', value = type_to_binary(Item#listitem.type)},
|
||||
#xmlattr{name = 'value', value = value_to_binary(Type, Item#listitem.value)} |
|
||||
Attrs1]
|
||||
end,
|
||||
SubEls = case Item#listitem.match_all of
|
||||
@ -199,34 +199,34 @@ item_to_xml(Item) ->
|
||||
exmpp_xml:set_attributes(#xmlel{ns = ?NS_PRIVACY, name = item, children = SubEls}, Attrs2).
|
||||
|
||||
|
||||
action_to_list(Action) ->
|
||||
action_to_binary(Action) ->
|
||||
case Action of
|
||||
allow -> "allow";
|
||||
deny -> "deny"
|
||||
allow -> <<"allow">>;
|
||||
deny -> <<"deny">>
|
||||
end.
|
||||
|
||||
order_to_list(Order) ->
|
||||
integer_to_list(Order).
|
||||
order_to_binary(Order) ->
|
||||
list_to_binary(integer_to_list(Order)).
|
||||
|
||||
type_to_list(Type) ->
|
||||
type_to_binary(Type) ->
|
||||
case Type of
|
||||
jid -> "jid";
|
||||
group -> "group";
|
||||
subscription -> "subscription"
|
||||
jid -> <<"jid">>;
|
||||
group -> <<"group">>;
|
||||
subscription -> <<"subscription">>
|
||||
end.
|
||||
|
||||
value_to_list(Type, Val) ->
|
||||
value_to_binary(Type, Val) ->
|
||||
case Type of
|
||||
jid ->
|
||||
{N, D, R} = Val,
|
||||
exmpp_jid:jid_to_list(N, D, R);
|
||||
exmpp_jid:jid_to_binary(N, D, R);
|
||||
group -> Val;
|
||||
subscription ->
|
||||
case Val of
|
||||
both -> "both";
|
||||
to -> "to";
|
||||
from -> "from";
|
||||
none -> "none"
|
||||
both -> <<"both">>;
|
||||
to -> <<"to">>;
|
||||
from -> <<"from">>;
|
||||
none -> <<"none">>
|
||||
end
|
||||
end.
|
||||
|
||||
|
@ -162,14 +162,14 @@ process_list_get(LUser, LServer, Name) ->
|
||||
|
||||
|
||||
item_to_xml(Item) ->
|
||||
Attrs1 = [#xmlattr{name = 'action', value = action_to_list(Item#listitem.action)},
|
||||
#xmlattr{name = 'order', value = order_to_list(Item#listitem.order)}],
|
||||
Attrs1 = [#xmlattr{name = 'action', value = action_to_binary(Item#listitem.action)},
|
||||
#xmlattr{name = 'order', value = order_to_binary(Item#listitem.order)}],
|
||||
Attrs2 = case Item#listitem.type of
|
||||
none ->
|
||||
Attrs1;
|
||||
Type ->
|
||||
[#xmlattr{name = 'type', value = type_to_list(Item#listitem.type)},
|
||||
#xmlattr{name = 'value', value = value_to_list(Type, Item#listitem.value)} |
|
||||
[#xmlattr{name = 'type', value = type_to_binary(Item#listitem.type)},
|
||||
#xmlattr{name = 'value', value = value_to_binary(Type, Item#listitem.value)} |
|
||||
Attrs1]
|
||||
end,
|
||||
SubEls = case Item#listitem.match_all of
|
||||
@ -205,34 +205,34 @@ item_to_xml(Item) ->
|
||||
exmpp_xml:set_attributes(#xmlel{ns = ?NS_PRIVACY, name = item, children = SubEls}, Attrs2).
|
||||
|
||||
|
||||
action_to_list(Action) ->
|
||||
action_to_binary(Action) ->
|
||||
case Action of
|
||||
allow -> "allow";
|
||||
deny -> "deny"
|
||||
allow -> <<"allow">>;
|
||||
deny -> <<"deny">>
|
||||
end.
|
||||
|
||||
order_to_list(Order) ->
|
||||
integer_to_list(Order).
|
||||
order_to_binary(Order) ->
|
||||
list_to_binary(integer_to_list(Order)).
|
||||
|
||||
type_to_list(Type) ->
|
||||
type_to_binary(Type) ->
|
||||
case Type of
|
||||
jid -> "jid";
|
||||
group -> "group";
|
||||
subscription -> "subscription"
|
||||
jid -> <<"jid">>;
|
||||
group -> <<"group">>;
|
||||
subscription -> <<"subscription">>
|
||||
end.
|
||||
|
||||
value_to_list(Type, Val) ->
|
||||
value_to_binary(Type, Val) ->
|
||||
case Type of
|
||||
jid ->
|
||||
{N, D, R} = Val,
|
||||
exmpp_jid:jid_to_list(N, D, R);
|
||||
exmpp_jid:jid_to_binary(N, D, R);
|
||||
group -> Val;
|
||||
subscription ->
|
||||
case Val of
|
||||
both -> "both";
|
||||
to -> "to";
|
||||
from -> "from";
|
||||
none -> "none"
|
||||
both -> <<"both">>;
|
||||
to -> <<"to">>;
|
||||
from -> <<"from">>;
|
||||
none -> <<"none">>
|
||||
end
|
||||
end.
|
||||
|
||||
|
@ -315,12 +315,12 @@ identity(Host) ->
|
||||
end,
|
||||
#xmlel{ns = ?NS_DISCO_INFO, name = 'identity', attrs = Identity}.
|
||||
|
||||
disco_local_identity(Acc, _From, To, [], _Lang) ->
|
||||
disco_local_identity(Acc, _From, To, <<>>, _Lang) ->
|
||||
Acc ++ [identity(To#jid.ldomain)];
|
||||
disco_local_identity(Acc, _From, _To, _Node, _Lang) ->
|
||||
Acc.
|
||||
|
||||
disco_local_features(Acc, _From, To, [], _Lang) ->
|
||||
disco_local_features(Acc, _From, To, <<>>, _Lang) ->
|
||||
Host = To#jid.ldomain,
|
||||
Feats = case Acc of
|
||||
{result, I} -> I;
|
||||
@ -332,12 +332,12 @@ disco_local_features(Acc, _From, To, [], _Lang) ->
|
||||
disco_local_features(Acc, _From, _To, _Node, _Lang) ->
|
||||
Acc.
|
||||
|
||||
disco_local_items(Acc, _From, _To, [], _Lang) ->
|
||||
disco_local_items(Acc, _From, _To, <<>>, _Lang) ->
|
||||
Acc;
|
||||
disco_local_items(Acc, _From, _To, _Node, _Lang) ->
|
||||
Acc.
|
||||
|
||||
disco_sm_identity(Acc, _From, To, [], _Lang) ->
|
||||
disco_sm_identity(Acc, _From, To, <<>>, _Lang) ->
|
||||
Acc ++ [identity(To#jid.ldomain)];
|
||||
disco_sm_identity(Acc, From, To, Node, _Lang) ->
|
||||
LOwner = jlib:short_prepd_bare_jid(To),
|
||||
@ -360,7 +360,7 @@ disco_sm_features(Acc, From, To, Node, _Lang) ->
|
||||
Acc
|
||||
end.
|
||||
|
||||
disco_sm_items(Acc, From, To, [], _Lang) ->
|
||||
disco_sm_items(Acc, From, To, <<>>, _Lang) ->
|
||||
%% TODO, use iq_disco_items(Host, [], From)
|
||||
Host = To#jid.ldomain,
|
||||
LJID = jlib:short_prepd_bare_jid(To),
|
||||
@ -381,7 +381,8 @@ disco_sm_items(Acc, From, To, [], _Lang) ->
|
||||
{result, NodeItems ++ Items}
|
||||
end;
|
||||
|
||||
disco_sm_items(Acc, From, To, Node, _Lang) ->
|
||||
disco_sm_items(Acc, From, To, NodeB, _Lang) ->
|
||||
Node = binary_to_list(NodeB),
|
||||
%% TODO, use iq_disco_items(Host, Node, From)
|
||||
Host = To#jid.ldomain,
|
||||
LJID = jlib:short_prepd_bare_jid(To),
|
||||
|
@ -154,7 +154,7 @@ item_to_xml(Item) ->
|
||||
Attrs1 = exmpp_xml:set_attribute_in_list([],
|
||||
'jid', exmpp_jid:jid_to_list(U, S, R)),
|
||||
Attrs2 = case Item#roster.name of
|
||||
"" ->
|
||||
<<>> ->
|
||||
Attrs1;
|
||||
Name ->
|
||||
exmpp_xml:set_attribute_in_list(Attrs1, 'name', Name)
|
||||
@ -205,7 +205,7 @@ process_item_set(From, To, #xmlel{} = El) ->
|
||||
jid = JID};
|
||||
[I] ->
|
||||
I#roster{jid = JID,
|
||||
name = "",
|
||||
name = <<>>,
|
||||
groups = [],
|
||||
xs = []}
|
||||
end,
|
||||
@ -274,7 +274,7 @@ process_item_attrs(Item, [#xmlattr{name = Attr, value = Val} | Attrs]) ->
|
||||
process_item_attrs(Item#roster{name = Val}, Attrs);
|
||||
'subscription' ->
|
||||
case Val of
|
||||
"remove" ->
|
||||
<<"remove">> ->
|
||||
process_item_attrs(Item#roster{subscription = remove},
|
||||
Attrs);
|
||||
_ ->
|
||||
@ -623,19 +623,19 @@ process_item_attrs_ws(Item, [#xmlattr{name = Attr, value = Val} | Attrs]) ->
|
||||
process_item_attrs_ws(Item#roster{name = Val}, Attrs);
|
||||
'subscription' ->
|
||||
case Val of
|
||||
"remove" ->
|
||||
<<"remove">> ->
|
||||
process_item_attrs_ws(Item#roster{subscription = remove},
|
||||
Attrs);
|
||||
"none" ->
|
||||
<<"none">> ->
|
||||
process_item_attrs_ws(Item#roster{subscription = none},
|
||||
Attrs);
|
||||
"both" ->
|
||||
<<"both">> ->
|
||||
process_item_attrs_ws(Item#roster{subscription = both},
|
||||
Attrs);
|
||||
"from" ->
|
||||
<<"from">> ->
|
||||
process_item_attrs_ws(Item#roster{subscription = from},
|
||||
Attrs);
|
||||
"to" ->
|
||||
<<"to">> ->
|
||||
process_item_attrs_ws(Item#roster{subscription = to},
|
||||
Attrs);
|
||||
_ ->
|
||||
@ -888,7 +888,7 @@ user_roster(User, Server, Query, Lang) ->
|
||||
[?XAC("td", [{"class", "valign"}],
|
||||
catch exmpp_jid:jid_to_list(U, S, R)),
|
||||
?XAC("td", [{"class", "valign"}],
|
||||
R#roster.name),
|
||||
binary_to_list(R#roster.name)),
|
||||
?XAC("td", [{"class", "valign"}],
|
||||
atom_to_list(R#roster.subscription)),
|
||||
?XAC("td", [{"class", "valign"}],
|
||||
|
@ -22,7 +22,7 @@
|
||||
-record(roster, {usj,
|
||||
us,
|
||||
jid,
|
||||
name = "",
|
||||
name = <<>>,
|
||||
subscription = none,
|
||||
ask = none,
|
||||
groups = [],
|
||||
|
@ -181,7 +181,7 @@ item_to_xml(Item) ->
|
||||
Attrs1 = exmpp_xml:set_attribute_in_list([],
|
||||
'jid', exmpp_jid:jid_to_list(U, S, R)),
|
||||
Attrs2 = case Item#roster.name of
|
||||
"" ->
|
||||
<<>> ->
|
||||
Attrs1;
|
||||
Name ->
|
||||
exmpp_xml:set_attribute_in_list(Attrs1, 'name', Name)
|
||||
@ -245,7 +245,7 @@ process_item_set(From, To, #xmlel{} = El) ->
|
||||
usj = {LUser, LServer, LJID},
|
||||
us = {LUser, LServer},
|
||||
jid = LJID,
|
||||
name = ""}
|
||||
name = <<>>}
|
||||
end
|
||||
end,
|
||||
Item1 = process_item_attrs(Item, El#xmlel.attrs),
|
||||
@ -315,7 +315,7 @@ process_item_attrs(Item, [#xmlattr{name = Attr, value = Val} | Attrs]) ->
|
||||
process_item_attrs(Item#roster{name = Val}, Attrs);
|
||||
'subscription' ->
|
||||
case Val of
|
||||
"remove" ->
|
||||
<<"remove">> ->
|
||||
process_item_attrs(Item#roster{subscription = remove},
|
||||
Attrs);
|
||||
_ ->
|
||||
@ -685,19 +685,19 @@ process_item_attrs_ws(Item, [#xmlattr{name = Attr, value = Val} | Attrs]) ->
|
||||
process_item_attrs_ws(Item#roster{name = Val}, Attrs);
|
||||
'subscription' ->
|
||||
case Val of
|
||||
"remove" ->
|
||||
<<"remove">> ->
|
||||
process_item_attrs_ws(Item#roster{subscription = remove},
|
||||
Attrs);
|
||||
"none" ->
|
||||
<<"none">> ->
|
||||
process_item_attrs_ws(Item#roster{subscription = none},
|
||||
Attrs);
|
||||
"both" ->
|
||||
<<"both">> ->
|
||||
process_item_attrs_ws(Item#roster{subscription = both},
|
||||
Attrs);
|
||||
"from" ->
|
||||
<<"from">> ->
|
||||
process_item_attrs_ws(Item#roster{subscription = from},
|
||||
Attrs);
|
||||
"to" ->
|
||||
<<"to">> ->
|
||||
process_item_attrs_ws(Item#roster{subscription = to},
|
||||
Attrs);
|
||||
_ ->
|
||||
@ -834,7 +834,7 @@ raw_to_record(LServer, {User, SJID, Nick, SSubscription, SAsk, SAskMessage,
|
||||
#roster{usj = {UserB, LServer, LJID},
|
||||
us = {UserB, LServer},
|
||||
jid = LJID,
|
||||
name = Nick,
|
||||
name = list_to_binary(Nick),
|
||||
subscription = Subscription,
|
||||
ask = Ask,
|
||||
askmessage = list_to_binary(SAskMessage)}
|
||||
@ -852,7 +852,7 @@ record_to_string(#roster{us = {User, _Server},
|
||||
Username = ejabberd_odbc:escape(binary_to_list(User)),
|
||||
{U, S, R} = JID,
|
||||
SJID = ejabberd_odbc:escape(exmpp_jid:jid_to_list(U, S, R)),
|
||||
Nick = ejabberd_odbc:escape(Name),
|
||||
Nick = ejabberd_odbc:escape(binary_to_list(Name)),
|
||||
SSubscription = case Subscription of
|
||||
both -> "B";
|
||||
to -> "T";
|
||||
@ -939,7 +939,7 @@ user_roster(User, Server, Query, Lang) ->
|
||||
[?XAC("td", [{"class", "valign"}],
|
||||
catch exmpp_jid:jid_to_list(U, S, R)),
|
||||
?XAC("td", [{"class", "valign"}],
|
||||
R#roster.name),
|
||||
binary_to_list(R#roster.name)),
|
||||
?XAC("td", [{"class", "valign"}],
|
||||
atom_to_list(R#roster.subscription)),
|
||||
?XAC("td", [{"class", "valign"}],
|
||||
|
@ -63,9 +63,9 @@ process_local_iq(_From, _To, #iq{type = set} = IQ_Rec) ->
|
||||
get_names([], Res) ->
|
||||
Res;
|
||||
get_names([#xmlel{name = 'stat', attrs = Attrs} | Els], Res) ->
|
||||
Name = exmpp_xml:get_attribute_from_list(Attrs, 'name', ""),
|
||||
Name = exmpp_xml:get_attribute_from_list_as_binary(Attrs, 'name', <<>>),
|
||||
case Name of
|
||||
"" ->
|
||||
<<>> ->
|
||||
get_names(Els, Res);
|
||||
_ ->
|
||||
get_names(Els, [Name | Res])
|
||||
@ -78,10 +78,10 @@ get_names([_ | Els], Res) ->
|
||||
|
||||
get_local_stats(_Server, [], []) ->
|
||||
{result,
|
||||
[?STAT("users/online"),
|
||||
?STAT("users/total"),
|
||||
?STAT("users/all-hosts/online"),
|
||||
?STAT("users/all-hosts/total")
|
||||
[?STAT(<<"users/online">>),
|
||||
?STAT(<<"users/total">>),
|
||||
?STAT(<<"users/all-hosts/online">>),
|
||||
?STAT(<<"users/all-hosts/total">>)
|
||||
]};
|
||||
|
||||
get_local_stats(Server, [], Names) ->
|
||||
@ -91,13 +91,13 @@ get_local_stats(Server, [], Names) ->
|
||||
|
||||
get_local_stats(_Server, ["running nodes", _], []) ->
|
||||
{result,
|
||||
[?STAT("time/uptime"),
|
||||
?STAT("time/cputime"),
|
||||
?STAT("users/online"),
|
||||
?STAT("transactions/commited"),
|
||||
?STAT("transactions/aborted"),
|
||||
?STAT("transactions/restarted"),
|
||||
?STAT("transactions/logged")
|
||||
[?STAT(<<"time/uptime">>),
|
||||
?STAT(<<"time/cputime">>),
|
||||
?STAT(<<"users/online">>),
|
||||
?STAT(<<"transactions/commited">>),
|
||||
?STAT(<<"transactions/aborted">>),
|
||||
?STAT(<<"transactions/restarted">>),
|
||||
?STAT(<<"transactions/logged">>)
|
||||
]};
|
||||
|
||||
get_local_stats(_Server, ["running nodes", ENode], Names) ->
|
||||
@ -126,107 +126,107 @@ get_local_stats(_Server, _, _) ->
|
||||
[#xmlattr{name = 'name', value = Name}], children =
|
||||
[#xmlel{ns = ?NS_STATS, name = 'error', attrs =
|
||||
[#xmlattr{name = 'code', value = Code}], children =
|
||||
[#xmlcdata{cdata = list_to_binary(Desc)}]}]}).
|
||||
[#xmlcdata{cdata = Desc}]}]}).
|
||||
|
||||
|
||||
get_local_stat(Server, [], Name) when Name == "users/online" ->
|
||||
get_local_stat(Server, [], Name) when Name == <<"users/online">> ->
|
||||
case catch ejabberd_sm:get_vh_session_list(list_to_binary(Server)) of
|
||||
{'EXIT', _Reason} ->
|
||||
?STATERR("500", "Internal Server Error");
|
||||
?STATERR(<<"500">>, <<"Internal Server Error">>);
|
||||
Users ->
|
||||
?STATVAL(integer_to_list(length(Users)), "users")
|
||||
?STATVAL(list_to_binary(integer_to_list(length(Users))), <<"users">>)
|
||||
end;
|
||||
|
||||
get_local_stat(Server, [], Name) when Name == "users/total" ->
|
||||
get_local_stat(Server, [], Name) when Name == <<"users/total">> ->
|
||||
%%LServer = jlib:nameprep(Server),
|
||||
case catch ejabberd_auth:get_vh_registered_users_number(Server) of
|
||||
{'EXIT', _Reason} ->
|
||||
?STATERR("500", "Internal Server Error");
|
||||
?STATERR(<<"500">>, <<"Internal Server Error">>);
|
||||
NUsers ->
|
||||
?STATVAL(integer_to_list(NUsers), "users")
|
||||
?STATVAL(list_to_binary(integer_to_list(NUsers)), <<"users">>)
|
||||
end;
|
||||
|
||||
get_local_stat(_Server, [], Name) when Name == "users/all-hosts/online" ->
|
||||
get_local_stat(_Server, [], Name) when Name == <<"users/all-hosts/online">> ->
|
||||
case catch mnesia:table_info(session, size) of
|
||||
{'EXIT', _Reason} ->
|
||||
?STATERR("500", "Internal Server Error");
|
||||
?STATERR(<<"500">>, <<"Internal Server Error">>);
|
||||
Users ->
|
||||
?STATVAL(integer_to_list(Users), "users")
|
||||
?STATVAL(list_to_binary(integer_to_list(Users)), <<"users">>)
|
||||
end;
|
||||
|
||||
get_local_stat(_Server, [], Name) when Name == "users/all-hosts/total" ->
|
||||
get_local_stat(_Server, [], Name) when Name == <<"users/all-hosts/total">> ->
|
||||
case catch mnesia:table_info(passwd, size) of
|
||||
{'EXIT', _Reason} ->
|
||||
?STATERR("500", "Internal Server Error");
|
||||
?STATERR(<<"500">>, <<"Internal Server Error">>);
|
||||
Users ->
|
||||
?STATVAL(integer_to_list(Users), "users")
|
||||
?STATVAL(list_to_binary(integer_to_list(Users)), <<"users">>)
|
||||
end;
|
||||
|
||||
get_local_stat(_Server, _, Name) ->
|
||||
?STATERR("404", "Not Found").
|
||||
?STATERR(<<"404">>, <<"Not Found">>).
|
||||
|
||||
|
||||
|
||||
get_node_stat(Node, Name) when Name == "time/uptime" ->
|
||||
get_node_stat(Node, Name) when Name == <<"time/uptime">> ->
|
||||
case catch rpc:call(Node, erlang, statistics, [wall_clock]) of
|
||||
{badrpc, _Reason} ->
|
||||
?STATERR("500", "Internal Server Error");
|
||||
?STATERR(<<"500">>, <<"Internal Server Error">>);
|
||||
CPUTime ->
|
||||
?STATVAL(
|
||||
io_lib:format("~.3f", [element(1, CPUTime)/1000]), "seconds")
|
||||
?STATVAL(list_to_binary(
|
||||
io_lib:format("~.3f", [element(1, CPUTime)/1000])), "seconds")
|
||||
end;
|
||||
|
||||
get_node_stat(Node, Name) when Name == "time/cputime" ->
|
||||
get_node_stat(Node, Name) when Name == <<"time/cputime">> ->
|
||||
case catch rpc:call(Node, erlang, statistics, [runtime]) of
|
||||
{badrpc, _Reason} ->
|
||||
?STATERR("500", "Internal Server Error");
|
||||
?STATERR(<<"500">>, <<"Internal Server Error">>);
|
||||
RunTime ->
|
||||
?STATVAL(
|
||||
io_lib:format("~.3f", [element(1, RunTime)/1000]), "seconds")
|
||||
?STATVAL(list_to_binary(
|
||||
io_lib:format("~.3f", [element(1, RunTime)/1000])), "seconds")
|
||||
end;
|
||||
|
||||
get_node_stat(Node, Name) when Name == "users/online" ->
|
||||
get_node_stat(Node, Name) when Name == <<"users/online">> ->
|
||||
case catch rpc:call(Node, ejabberd_sm, dirty_get_my_sessions_list, []) of
|
||||
{badrpc, _Reason} ->
|
||||
?STATERR("500", "Internal Server Error");
|
||||
?STATERR(<<"500">>, <<"Internal Server Error">>);
|
||||
Users ->
|
||||
?STATVAL(integer_to_list(length(Users)), "users")
|
||||
?STATVAL(list_to_binary(integer_to_list(length(Users))), <<"users">>)
|
||||
end;
|
||||
|
||||
get_node_stat(Node, Name) when Name == "transactions/commited" ->
|
||||
get_node_stat(Node, Name) when Name == <<"transactions/commited">> ->
|
||||
case catch rpc:call(Node, mnesia, system_info, [transaction_commits]) of
|
||||
{badrpc, _Reason} ->
|
||||
?STATERR("500", "Internal Server Error");
|
||||
?STATERR(<<"500">>, <<"Internal Server Error">>);
|
||||
Transactions ->
|
||||
?STATVAL(integer_to_list(Transactions), "transactions")
|
||||
?STATVAL(list_to_binary(integer_to_list(Transactions)), <<"transactions">>)
|
||||
end;
|
||||
|
||||
get_node_stat(Node, Name) when Name == "transactions/aborted" ->
|
||||
get_node_stat(Node, Name) when Name == <<"transactions/aborted">> ->
|
||||
case catch rpc:call(Node, mnesia, system_info, [transaction_failures]) of
|
||||
{badrpc, _Reason} ->
|
||||
?STATERR("500", "Internal Server Error");
|
||||
?STATERR(<<"500">>, <<"Internal Server Error">>);
|
||||
Transactions ->
|
||||
?STATVAL(integer_to_list(Transactions), "transactions")
|
||||
?STATVAL(list_to_binary(integer_to_list(Transactions)), <<"transactions">>)
|
||||
end;
|
||||
|
||||
get_node_stat(Node, Name) when Name == "transactions/restarted" ->
|
||||
get_node_stat(Node, Name) when Name == <<"transactions/restarted">> ->
|
||||
case catch rpc:call(Node, mnesia, system_info, [transaction_restarts]) of
|
||||
{badrpc, _Reason} ->
|
||||
?STATERR("500", "Internal Server Error");
|
||||
?STATERR(<<"500">>, <<"Internal Server Error">>);
|
||||
Transactions ->
|
||||
?STATVAL(integer_to_list(Transactions), "transactions")
|
||||
?STATVAL(list_to_binary(integer_to_list(Transactions)), <<"transactions">>)
|
||||
end;
|
||||
|
||||
get_node_stat(Node, Name) when Name == "transactions/logged" ->
|
||||
get_node_stat(Node, Name) when Name == <<"transactions/logged">> ->
|
||||
case catch rpc:call(Node, mnesia, system_info, [transaction_log_writes]) of
|
||||
{badrpc, _Reason} ->
|
||||
?STATERR("500", "Internal Server Error");
|
||||
?STATERR(<<"500">>, <<"Internal Server Error">>);
|
||||
Transactions ->
|
||||
?STATVAL(integer_to_list(Transactions), "transactions")
|
||||
?STATVAL(list_to_binary(integer_to_list(Transactions)), <<"transactions">>)
|
||||
end;
|
||||
|
||||
get_node_stat(_, Name) ->
|
||||
?STATERR("404", "Not Found").
|
||||
?STATERR(<<"404">>, <<"Not Found">>).
|
||||
|
||||
|
||||
search_running_node(SNode) ->
|
||||
|
@ -284,7 +284,7 @@ set_vcard(User, LServer, VCARD) ->
|
||||
[#xmlel{ns = ?NS_SEARCH, name = 'instructions', children =
|
||||
[#xmlcdata{cdata = list_to_binary(translate:translate(Lang, "You need an x:data capable client to search"))}]},
|
||||
#xmlel{ns = ?NS_DATA_FORMS, name = 'x', attrs =
|
||||
[#xmlattr{name = 'type', value = "form"}], children =
|
||||
[#xmlattr{name = 'type', value = <<"form">>}], children =
|
||||
[#xmlel{ns = ?NS_DATA_FORMS, name = 'title', children =
|
||||
[#xmlcdata{cdata = list_to_binary(translate:translate(Lang, "Search users in ") ++ exmpp_jid:jid_to_list(JID))}]},
|
||||
#xmlel{ns = ?NS_SEARCH, name = 'instructions', children =
|
||||
@ -293,18 +293,18 @@ set_vcard(User, LServer, VCARD) ->
|
||||
"for any matching Jabber User "
|
||||
"(Add * to the end of field to "
|
||||
"match substring)"))}]},
|
||||
?TLFIELD("text-single", "User", "user"),
|
||||
?TLFIELD("text-single", "Full Name", "fn"),
|
||||
?TLFIELD("text-single", "Name", "first"),
|
||||
?TLFIELD("text-single", "Middle Name", "middle"),
|
||||
?TLFIELD("text-single", "Family Name", "last"),
|
||||
?TLFIELD("text-single", "Nickname", "nick"),
|
||||
?TLFIELD("text-single", "Birthday", "bday"),
|
||||
?TLFIELD("text-single", "Country", "ctry"),
|
||||
?TLFIELD("text-single", "City", "locality"),
|
||||
?TLFIELD("text-single", "Email", "email"),
|
||||
?TLFIELD("text-single", "Organization Name", "orgname"),
|
||||
?TLFIELD("text-single", "Organization Unit", "orgunit")
|
||||
?TLFIELD(<<"text-single">>, "User", <<"user">>),
|
||||
?TLFIELD(<<"text-single">>, "Full Name", <<"fn">>),
|
||||
?TLFIELD(<<"text-single">>, "Name", <<"first">>),
|
||||
?TLFIELD(<<"text-single">>, "Middle Name", <<"middle">>),
|
||||
?TLFIELD(<<"text-single">>, "Family Name", <<"last">>),
|
||||
?TLFIELD(<<"text-single">>, "Nickname", <<"nick">>),
|
||||
?TLFIELD(<<"text-single">>, "Birthday", <<"bday">>),
|
||||
?TLFIELD(<<"text-single">>, "Country", <<"ctry">>),
|
||||
?TLFIELD(<<"text-single">>, "City", <<"locality">>),
|
||||
?TLFIELD(<<"text-single">>, "Email", <<"email">>),
|
||||
?TLFIELD(<<"text-single">>, "Organization Name", <<"orgname">>),
|
||||
?TLFIELD(<<"text-single">>, "Organization Unit", <<"orgunit">>)
|
||||
]}]).
|
||||
|
||||
|
||||
@ -346,7 +346,7 @@ do_route(ServerHost, From, To, Packet) ->
|
||||
ns = ?NS_DATA_FORMS,
|
||||
name = 'x',
|
||||
attrs = [#xmlattr{name = 'type',
|
||||
value = "result"}],
|
||||
value = <<"result">>}],
|
||||
children = search_result(Lang,
|
||||
To, ServerHost, XData)}]},
|
||||
ResIQ = exmpp_iq:result(Packet,
|
||||
@ -371,24 +371,24 @@ do_route(ServerHost, From, To, Packet) ->
|
||||
#xmlel{ns = ?NS_DISCO_INFO, name = 'identity',
|
||||
attrs = [
|
||||
#xmlattr{name = 'category',
|
||||
value = "directory"},
|
||||
value = <<"directory">>},
|
||||
#xmlattr{name = 'type',
|
||||
value = "user"},
|
||||
value = <<"user">>},
|
||||
#xmlattr{name = 'name',
|
||||
value = translate:translate(Lang,
|
||||
"vCard User Search")}]},
|
||||
value = list_to_binary(translate:translate(Lang,
|
||||
"vCard User Search"))}]},
|
||||
#xmlel{ns = ?NS_DISCO_INFO, name = 'feature',
|
||||
attrs = [
|
||||
#xmlattr{name = 'var',
|
||||
value = ?NS_DISCO_INFO_s}]},
|
||||
value = list_to_binary(?NS_DISCO_INFO_s)}]},
|
||||
#xmlel{ns = ?NS_DISCO_INFO, name = 'feature',
|
||||
attrs = [
|
||||
#xmlattr{name = 'var',
|
||||
value = ?NS_SEARCH_s}]},
|
||||
value = list_to_binary(?NS_SEARCH_s)}]},
|
||||
#xmlel{ns = ?NS_DISCO_INFO, name = 'feature',
|
||||
attrs = [
|
||||
#xmlattr{name = 'var',
|
||||
value = ?NS_VCARD_s}]}
|
||||
value = list_to_binary(?NS_VCARD_s)}]}
|
||||
]},
|
||||
ResIQ = exmpp_iq:result(Packet, Result),
|
||||
ejabberd_router:route(To,
|
||||
@ -449,42 +449,42 @@ search_result(Lang, JID, ServerHost, Data) ->
|
||||
translate:translate(Lang, "Search Results for ") ++
|
||||
exmpp_jid:jid_to_list(JID))}]},
|
||||
#xmlel{ns = ?NS_DATA_FORMS, name = 'reported', children =
|
||||
[?TLFIELD("text-single", "Jabber ID", "jid"),
|
||||
?TLFIELD("text-single", "Full Name", "fn"),
|
||||
?TLFIELD("text-single", "Name", "first"),
|
||||
?TLFIELD("text-single", "Middle Name", "middle"),
|
||||
?TLFIELD("text-single", "Family Name", "last"),
|
||||
?TLFIELD("text-single", "Nickname", "nick"),
|
||||
?TLFIELD("text-single", "Birthday", "bday"),
|
||||
?TLFIELD("text-single", "Country", "ctry"),
|
||||
?TLFIELD("text-single", "City", "locality"),
|
||||
?TLFIELD("text-single", "Email", "email"),
|
||||
?TLFIELD("text-single", "Organization Name", "orgname"),
|
||||
?TLFIELD("text-single", "Organization Unit", "orgunit")
|
||||
[?TLFIELD(<<"text-single">>, "Jabber ID", <<"jid">>),
|
||||
?TLFIELD(<<"text-single">>, "Full Name", <<"fn">>),
|
||||
?TLFIELD(<<"text-single">>, "Name", <<"first">>),
|
||||
?TLFIELD(<<"text-single">>, "Middle Name", <<"middle">>),
|
||||
?TLFIELD(<<"text-single">>, "Family Name", <<"last">>),
|
||||
?TLFIELD(<<"text-single">>, "Nickname", <<"nick">>),
|
||||
?TLFIELD(<<"text-single">>, "Birthday", <<"bday">>),
|
||||
?TLFIELD(<<"text-single">>, "Country", <<"ctry">>),
|
||||
?TLFIELD(<<"text-single">>, "City", <<"locality">>),
|
||||
?TLFIELD(<<"text-single">>, "Email", <<"email">>),
|
||||
?TLFIELD(<<"text-single">>, "Organization Name", <<"orgname">>),
|
||||
?TLFIELD(<<"text-single">>, "Organization Unit", <<"orgunit">>)
|
||||
]}] ++ lists:map(fun record_to_item/1, search(ServerHost, Data)).
|
||||
|
||||
-define(FIELD(Var, Val),
|
||||
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs =
|
||||
[#xmlattr{name = 'var', value = Var}], children =
|
||||
[#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children =
|
||||
[#xmlcdata{cdata = list_to_binary(Val)}]}]}).
|
||||
[#xmlcdata{cdata = Val}]}]}).
|
||||
|
||||
record_to_item(R) ->
|
||||
{User, Server} = R#vcard_search.user,
|
||||
#xmlel{ns = ?NS_DATA_FORMS, name = 'item', children =
|
||||
[
|
||||
?FIELD("jid", User ++ "@" ++ Server),
|
||||
?FIELD("fn", R#vcard_search.fn),
|
||||
?FIELD("last", R#vcard_search.family),
|
||||
?FIELD("first", R#vcard_search.given),
|
||||
?FIELD("middle", R#vcard_search.middle),
|
||||
?FIELD("nick", R#vcard_search.nickname),
|
||||
?FIELD("bday", R#vcard_search.bday),
|
||||
?FIELD("ctry", R#vcard_search.ctry),
|
||||
?FIELD("locality", R#vcard_search.locality),
|
||||
?FIELD("email", R#vcard_search.email),
|
||||
?FIELD("orgname", R#vcard_search.orgname),
|
||||
?FIELD("orgunit", R#vcard_search.orgunit)
|
||||
?FIELD(<<"jid">>, list_to_binary(User ++ "@" ++ Server)),
|
||||
?FIELD(<<"fn">>, list_to_binary(R#vcard_search.fn)),
|
||||
?FIELD(<<"last">>, list_to_binary(R#vcard_search.family)),
|
||||
?FIELD(<<"first">>, list_to_binary(R#vcard_search.given)),
|
||||
?FIELD(<<"middle">>, list_to_binary(R#vcard_search.middle)),
|
||||
?FIELD(<<"nick">>, list_to_binary(R#vcard_search.nickname)),
|
||||
?FIELD(<<"bday">>, list_to_binary(R#vcard_search.bday)),
|
||||
?FIELD(<<"ctry">>, list_to_binary(R#vcard_search.ctry)),
|
||||
?FIELD(<<"locality">>, list_to_binary(R#vcard_search.locality)),
|
||||
?FIELD(<<"email">>, list_to_binary(R#vcard_search.email)),
|
||||
?FIELD(<<"orgname">>, list_to_binary(R#vcard_search.orgname)),
|
||||
?FIELD(<<"orgunit">>, list_to_binary(R#vcard_search.orgunit))
|
||||
]
|
||||
}.
|
||||
|
||||
|
@ -391,14 +391,14 @@ ldap_attribute_to_vcard(_, _) ->
|
||||
[#xmlel{ns = ?NS_SEARCH, name = 'instructions', children =
|
||||
[#xmlcdata{cdata = list_to_binary(translate:translate(Lang, "You need an x:data capable client to search"))}]},
|
||||
#xmlel{ns = ?NS_DATA_FORMS, name = 'x', attrs =
|
||||
[#xmlattr{name = 'type', value = "form"}], children =
|
||||
[#xmlattr{name = 'type', value = <<"form">>}], children =
|
||||
[#xmlel{ns = ?NS_DATA_FORMS, name = 'title', children =
|
||||
[#xmlcdata{cdata = list_to_binary(translate:translate(Lang, "Search users in ") ++
|
||||
exmpp_jid:jid_to_list(JID))}]},
|
||||
#xmlel{ns = ?NS_SEARCH, name = 'instructions', children =
|
||||
[#xmlcdata{cdata = list_to_binary(translate:translate(Lang, "Fill in fields to search "
|
||||
"for any matching Jabber User"))}]}
|
||||
] ++ lists:map(fun({X,Y}) -> ?TLFIELD("text-single", X, Y) end, SearchFields)}]).
|
||||
] ++ lists:map(fun({X,Y}) -> ?TLFIELD(<<"text-single">>, X, list_to_binary(Y)) end, SearchFields)}]).
|
||||
|
||||
do_route(State, From, To, Packet) ->
|
||||
spawn(?MODULE, route, [State, From, To, Packet]).
|
||||
@ -439,7 +439,7 @@ route(State, From, To, Packet) ->
|
||||
ns = ?NS_DATA_FORMS,
|
||||
name = 'x',
|
||||
attrs = [#xmlattr{name = 'type',
|
||||
value = "result"}],
|
||||
value = <<"result">>}],
|
||||
children = search_result(Lang, To, State, XData)}]},
|
||||
ResIQ = exmpp_iq:result(Packet,
|
||||
Result),
|
||||
@ -464,20 +464,20 @@ route(State, From, To, Packet) ->
|
||||
#xmlel{ns = ?NS_DISCO_INFO, name = 'identity',
|
||||
attrs = [
|
||||
#xmlattr{name = 'category',
|
||||
value = "directory"},
|
||||
value = <<"directory">>},
|
||||
#xmlattr{name = 'type',
|
||||
value = "user"},
|
||||
value = <<"user">>},
|
||||
#xmlattr{name = 'name',
|
||||
value = translate:translate(Lang,
|
||||
"vCard User Search")}]},
|
||||
value = list_to_binary(translate:translate(Lang,
|
||||
"vCard User Search"))}]},
|
||||
#xmlel{ns = ?NS_DISCO_INFO, name = 'feature',
|
||||
attrs = [
|
||||
#xmlattr{name = 'var',
|
||||
value = ?NS_SEARCH_s}]},
|
||||
value = list_to_binary(?NS_SEARCH_s)}]},
|
||||
#xmlel{ns = ?NS_DISCO_INFO, name = 'feature',
|
||||
attrs = [
|
||||
#xmlattr{name = 'var',
|
||||
value = ?NS_VCARD_s}]}
|
||||
value = list_to_binary(?NS_VCARD_s)}]}
|
||||
]},
|
||||
ResIQ = exmpp_iq:result(Packet, Result),
|
||||
ejabberd_router:route(To,
|
||||
@ -528,9 +528,9 @@ search_result(Lang, JID, State, Data) ->
|
||||
[#xmlcdata{cdata = list_to_binary(translate:translate(Lang, "Search Results for ") ++
|
||||
exmpp_jid:jid_to_list(JID))}]},
|
||||
#xmlel{ns = ?NS_DATA_FORMS, name = 'reported', children =
|
||||
[?TLFIELD("text-single", "Jabber ID", "jid")] ++
|
||||
[?TLFIELD(<<"text-single">>, "Jabber ID", <<"jid">>)] ++
|
||||
lists:map(
|
||||
fun({Name, Value}) -> ?TLFIELD("text-single", Name, Value) end,
|
||||
fun({Name, Value}) -> ?TLFIELD(<<"text-single">>, Name, list_to_binary(Value)) end,
|
||||
SearchReported)
|
||||
}],
|
||||
case search(State, Data) of
|
||||
@ -544,7 +544,7 @@ search_result(Lang, JID, State, Data) ->
|
||||
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs =
|
||||
[#xmlattr{name = 'var', value = Var}], children =
|
||||
[#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children =
|
||||
[#xmlcdata{cdata = list_to_binary(Val)}]}]}).
|
||||
[#xmlcdata{cdata = Val}]}]}).
|
||||
|
||||
search(State, Data) ->
|
||||
Base = State#state.base,
|
||||
@ -591,8 +591,8 @@ search_items(Entries, State) ->
|
||||
VCardMap,
|
||||
{Username, ?MYNAME})}
|
||||
end, SearchReported),
|
||||
Result = [?FIELD("jid", Username ++ "@" ++ LServer)] ++
|
||||
[?FIELD(Name, Value) || {Name, Value} <- RFields],
|
||||
Result = [?FIELD(<<"jid">>, list_to_binary(Username ++ "@" ++ LServer))] ++
|
||||
[?FIELD(list_to_binary(Name), list_to_binary(Value)) || {Name, Value} <- RFields],
|
||||
[#xmlel{ns = ?NS_DATA_FORMS, name = 'item', children = Result}];
|
||||
_ ->
|
||||
[]
|
||||
|
@ -250,7 +250,7 @@ set_vcard(User, LServer, VCARD) ->
|
||||
-define(TLFIELD(Type, Label, Var),
|
||||
#xmlel{ns = ?NS_VCARD, name = 'field', attrs = [
|
||||
#xmlattr{name = 'type', value = Type},
|
||||
#xmlattr{name = 'label', value = translate:translate(Lang, Label)},
|
||||
#xmlattr{name = 'label', value = list_to_binary(translate:translate(Lang, Label))},
|
||||
#xmlattr{name = 'var', value = Var}]}).
|
||||
|
||||
|
||||
@ -258,7 +258,7 @@ set_vcard(User, LServer, VCARD) ->
|
||||
[#xmlel{ns = ?NS_SEARCH, name = 'instructions', children =
|
||||
[#xmlcdata{cdata = list_to_binary(translate:translate(Lang, "You need an x:data capable client to search"))}]},
|
||||
#xmlel{ns = ?NS_DATA_FORMS, name = 'x', attrs =
|
||||
[#xmlattr{name = 'type', value = "form"}], children =
|
||||
[#xmlattr{name = 'type', value = <<"form">>}], children =
|
||||
[#xmlel{ns = ?NS_DATA_FORMS, name = 'title', children =
|
||||
[#xmlcdata{cdata = list_to_binary(translate:translate(Lang, "Search users in ") ++ exmpp_jid:jid_to_list(JID))}]},
|
||||
#xmlel{ns = ?NS_SEARCH, name = 'instructions', children =
|
||||
@ -267,18 +267,18 @@ set_vcard(User, LServer, VCARD) ->
|
||||
"for any matching Jabber User "
|
||||
"(Add * to the end of field to "
|
||||
"match substring)"))}]},
|
||||
?TLFIELD("text-single", "User", "user"),
|
||||
?TLFIELD("text-single", "Full Name", "fn"),
|
||||
?TLFIELD("text-single", "Name", "first"),
|
||||
?TLFIELD("text-single", "Middle Name", "middle"),
|
||||
?TLFIELD("text-single", "Family Name", "last"),
|
||||
?TLFIELD("text-single", "Nickname", "nick"),
|
||||
?TLFIELD("text-single", "Birthday", "bday"),
|
||||
?TLFIELD("text-single", "Country", "ctry"),
|
||||
?TLFIELD("text-single", "City", "locality"),
|
||||
?TLFIELD("text-single", "Email", "email"),
|
||||
?TLFIELD("text-single", "Organization Name", "orgname"),
|
||||
?TLFIELD("text-single", "Organization Unit", "orgunit")
|
||||
?TLFIELD(<<"text-single">>, "User", <<"user">>),
|
||||
?TLFIELD(<<"text-single">>, "Full Name", <<"fn">>),
|
||||
?TLFIELD(<<"text-single">>, "Name", <<"first">>),
|
||||
?TLFIELD(<<"text-single">>, "Middle Name", <<"middle">>),
|
||||
?TLFIELD(<<"text-single">>, "Family Name", <<"last">>),
|
||||
?TLFIELD(<<"text-single">>, "Nickname", <<"nick">>),
|
||||
?TLFIELD(<<"text-single">>, "Birthday", <<"bday">>),
|
||||
?TLFIELD(<<"text-single">>, "Country", <<"ctry">>),
|
||||
?TLFIELD(<<"text-single">>, "City", <<"locality">>),
|
||||
?TLFIELD(<<"text-single">>, "Email", <<"email">>),
|
||||
?TLFIELD(<<"text-single">>, "Organization Name", <<"orgname">>),
|
||||
?TLFIELD(<<"text-single">>, "Organization Unit", <<"orgunit">>)
|
||||
]}]).
|
||||
|
||||
do_route(ServerHost, From, To, Packet) ->
|
||||
@ -317,7 +317,7 @@ do_route(ServerHost, From, To, Packet) ->
|
||||
ns = ?NS_DATA_FORMS,
|
||||
name = 'x',
|
||||
attrs = [#xmlattr{name = 'type',
|
||||
value = "result"}],
|
||||
value = <<"result">>}],
|
||||
children = search_result(Lang,
|
||||
To, ServerHost, XData)}]},
|
||||
ResIQ = exmpp_iq:result(Packet,
|
||||
@ -342,20 +342,20 @@ do_route(ServerHost, From, To, Packet) ->
|
||||
#xmlel{ns = ?NS_DISCO_INFO, name = 'identity',
|
||||
attrs = [
|
||||
#xmlattr{name = 'category',
|
||||
value = "directory"},
|
||||
value = <<"directory">>},
|
||||
#xmlattr{name = 'type',
|
||||
value = "user"},
|
||||
value = <<"user">>},
|
||||
#xmlattr{name = 'name',
|
||||
value = translate:translate(Lang,
|
||||
"vCard User Search")}]},
|
||||
value = list_to_binary(translate:translate(Lang,
|
||||
"vCard User Search"))}]},
|
||||
#xmlel{ns = ?NS_DISCO_INFO, name = 'feature',
|
||||
attrs = [
|
||||
#xmlattr{name = 'var',
|
||||
value = ?NS_SEARCH_s}]},
|
||||
value = list_to_binary(?NS_SEARCH_s)}]},
|
||||
#xmlel{ns = ?NS_DISCO_INFO, name = 'feature',
|
||||
attrs = [
|
||||
#xmlattr{name = 'var',
|
||||
value = ?NS_VCARD_s}]}
|
||||
value = list_to_binary(?NS_VCARD_s)}]}
|
||||
]},
|
||||
ResIQ = exmpp_iq:result(Packet, Result),
|
||||
ejabberd_router:route(To,
|
||||
@ -416,18 +416,18 @@ search_result(Lang, JID, ServerHost, Data) ->
|
||||
translate:translate(Lang, "Search Results for ") ++
|
||||
exmpp_jid:jid_to_list(JID))}]},
|
||||
#xmlel{ns = ?NS_DATA_FORMS, name = 'reported', children =
|
||||
[?TLFIELD("text-single", "Jabber ID", "jid"),
|
||||
?TLFIELD("text-single", "Full Name", "fn"),
|
||||
?TLFIELD("text-single", "Name", "first"),
|
||||
?TLFIELD("text-single", "Middle Name", "middle"),
|
||||
?TLFIELD("text-single", "Family Name", "last"),
|
||||
?TLFIELD("text-single", "Nickname", "nick"),
|
||||
?TLFIELD("text-single", "Birthday", "bday"),
|
||||
?TLFIELD("text-single", "Country", "ctry"),
|
||||
?TLFIELD("text-single", "City", "locality"),
|
||||
?TLFIELD("text-single", "Email", "email"),
|
||||
?TLFIELD("text-single", "Organization Name", "orgname"),
|
||||
?TLFIELD("text-single", "Organization Unit", "orgunit")
|
||||
[?TLFIELD(<<"text-single">>, "Jabber ID", <<"jid">>),
|
||||
?TLFIELD(<<"text-single">>, "Full Name", <<"fn">>),
|
||||
?TLFIELD(<<"text-single">>, "Name", <<"first">>),
|
||||
?TLFIELD(<<"text-single">>, "Middle Name", <<"middle">>),
|
||||
?TLFIELD(<<"text-single">>, "Family Name", <<"last">>),
|
||||
?TLFIELD(<<"text-single">>, "Nickname", <<"nick">>),
|
||||
?TLFIELD(<<"text-single">>, "Birthday", <<"bday">>),
|
||||
?TLFIELD(<<"text-single">>, "Country", <<"ctry">>),
|
||||
?TLFIELD(<<"text-single">>, "City", <<"locality">>),
|
||||
?TLFIELD(<<"text-single">>, "Email", <<"email">>),
|
||||
?TLFIELD(<<"text-single">>, "Organization Name", <<"orgname">>),
|
||||
?TLFIELD(<<"text-single">>, "Organization Unit", <<"orgunit">>)
|
||||
]}] ++ lists:map(fun(R) -> record_to_item(ServerHost, R) end,
|
||||
search(ServerHost, Data)).
|
||||
|
||||
@ -435,7 +435,7 @@ search_result(Lang, JID, ServerHost, Data) ->
|
||||
#xmlel{ns = ?NS_DATA_FORMS, name = 'field', attrs =
|
||||
[#xmlattr{name = 'var', value = Var}], children =
|
||||
[#xmlel{ns = ?NS_DATA_FORMS, name = 'value', children =
|
||||
[#xmlcdata{cdata = list_to_binary(Val)}]}]}).
|
||||
[#xmlcdata{cdata = Val}]}]}).
|
||||
|
||||
|
||||
record_to_item(LServer, {Username, FN, Family, Given, Middle,
|
||||
@ -443,18 +443,18 @@ record_to_item(LServer, {Username, FN, Family, Given, Middle,
|
||||
EMail, OrgName, OrgUnit}) ->
|
||||
#xmlel{ns = ?NS_DATA_FORMS, name = 'item', children =
|
||||
[
|
||||
?FIELD("jid", Username ++ "@" ++ LServer),
|
||||
?FIELD("fn", FN),
|
||||
?FIELD("last", Family),
|
||||
?FIELD("first", Given),
|
||||
?FIELD("middle", Middle),
|
||||
?FIELD("nick", Nickname),
|
||||
?FIELD("bday", BDay),
|
||||
?FIELD("ctry", CTRY),
|
||||
?FIELD("locality", Locality),
|
||||
?FIELD("email", EMail),
|
||||
?FIELD("orgname", OrgName),
|
||||
?FIELD("orgunit", OrgUnit)
|
||||
?FIELD(<<"jid">>, list_to_binary(Username ++ "@" ++ LServer)),
|
||||
?FIELD(<<"fn">>, list_to_binary(FN)),
|
||||
?FIELD(<<"last">>, list_to_binary(Family)),
|
||||
?FIELD(<<"first">>, list_to_binary(Given)),
|
||||
?FIELD(<<"middle">>, list_to_binary(Middle)),
|
||||
?FIELD(<<"nick">>, list_to_binary(Nickname)),
|
||||
?FIELD(<<"bday">>, list_to_binary(BDay)),
|
||||
?FIELD(<<"ctry">>, list_to_binary(CTRY)),
|
||||
?FIELD(<<"locality">>, list_to_binary(Locality)),
|
||||
?FIELD(<<"email">>, list_to_binary(EMail)),
|
||||
?FIELD(<<"orgname">>, list_to_binary(OrgName)),
|
||||
?FIELD(<<"orgunit">>, list_to_binary(OrgUnit))
|
||||
]
|
||||
}.
|
||||
|
||||
|
@ -416,12 +416,12 @@ get_jid("from", ParsedPacket) ->
|
||||
undefined ->
|
||||
#jid{};
|
||||
From ->
|
||||
exmpp_jid:list_to_jid(From)
|
||||
exmpp_jid:binary_to_jid(From)
|
||||
end;
|
||||
get_jid("to", ParsedPacket) ->
|
||||
case exmpp_stanza:get_recipient(ParsedPacket) of
|
||||
undefined ->
|
||||
#jid{};
|
||||
From ->
|
||||
exmpp_jid:list_to_jid(From)
|
||||
exmpp_jid:binary_to_jid(From)
|
||||
end.
|
||||
|
Loading…
Reference in New Issue
Block a user