./ct_report/coverage/ejabberd_admin.COVER.html

1 %%%-------------------------------------------------------------------
2 %%% File : ejabberd_admin.erl
3 %%% Author : Mickael Remond <mremond@process-one.net>
4 %%% Purpose : Administrative functions and commands
5 %%% Created : 7 May 2006 by Mickael Remond <mremond@process-one.net>
6 %%%
7 %%%
8 %%% ejabberd, Copyright (C) 2002-2011 ProcessOne
9 %%%
10 %%% This program is free software; you can redistribute it and/or
11 %%% modify it under the terms of the GNU General Public License as
12 %%% published by the Free Software Foundation; either version 2 of the
13 %%% License, or (at your option) any later version.
14 %%%
15 %%% This program is distributed in the hope that it will be useful,
16 %%% but WITHOUT ANY WARRANTY; without even the implied warranty of
17 %%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 %%% General Public License for more details.
19 %%%
20 %%% You should have received a copy of the GNU General Public License
21 %%% along with this program; if not, write to the Free Software
22 %%% Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 %%%
24 %%%-------------------------------------------------------------------
25
26 -module(ejabberd_admin).
27 -author('mickael.remond@process-one.net').
28
29 -export([%% Server
30 status/0,
31 %% Accounts
32 register/3, register/2, unregister/2,
33 registered_users/1,
34 import_users/1,
35 %% Purge DB
36 delete_expired_messages/1, delete_old_messages/2,
37 remove_from_cluster/1]).
38
39 -ignore_xref([
40 backup_mnesia/1, delete_expired_messages/1, delete_old_messages/2,
41 dump_mnesia/1, dump_table/2,
42 import_users/1, install_fallback_mnesia/1,
43 load_mnesia/1, mnesia_change_nodename/4,
44 register/2, register/3, registered_users/1, remove_from_cluster/1,
45 restore_mnesia/1, status/0,
46 stop/0, unregister/2]).
47
48 -include("mongoose.hrl").
49
50 %%%
51 %%% Commands
52 %%%
53 -spec status() -> {ok, {boolean(), iolist()}}.
54 status() ->
55
:-(
{ok, {Status, Message, _}} = mongoose_server_api:status(),
56
:-(
{ok, {Status, Message}}.
57
58 %%%
59 %%% Server management
60 %%%
61 -spec remove_from_cluster(string()) -> {ok, string()} |
62 {node_is_alive, string()} |
63 {mnesia_error, string()} |
64 {rpc_error, string()}.
65 remove_from_cluster(NodeString) ->
66
:-(
Node = list_to_atom(NodeString),
67
:-(
IsNodeAlive = mongoose_cluster:is_node_alive(Node),
68
:-(
case IsNodeAlive of
69 true ->
70
:-(
remove_rpc_alive_node(Node);
71 false ->
72
:-(
remove_dead_node(Node)
73 end.
74
75 remove_dead_node(DeadNode) ->
76
:-(
try mongoose_cluster:remove_from_cluster(DeadNode) of
77 ok ->
78
:-(
String = io_lib:format("The dead node ~p has been removed from the cluster~n", [DeadNode]),
79
:-(
{ok, String}
80 catch
81 error:{node_is_alive, DeadNode} ->
82
:-(
String = io_lib:format("The node ~p is alive but shoud not be.~n", [DeadNode]),
83
:-(
{node_is_alive, String};
84 error:{del_table_copy_schema, R} ->
85
:-(
String = io_lib:format("Cannot delete table schema~n. Reason: ~p", [R]),
86
:-(
{mnesia_error, String}
87 end.
88
89 remove_rpc_alive_node(AliveNode) ->
90
:-(
case rpc:call(AliveNode, mongoose_cluster, leave, []) of
91 {badrpc, Reason} ->
92
:-(
String = io_lib:format("Cannot remove the node ~p~n. RPC Reason: ~p", [AliveNode, Reason]),
93
:-(
{rpc_error, String};
94 ok ->
95
:-(
String = io_lib:format("The node ~p has been removed from the cluster~n", [AliveNode]),
96
:-(
{ok, String};
97 Unknown ->
98
:-(
String = io_lib:format("Unknown error: ~p~n", [Unknown]),
99
:-(
{rpc_error, String}
100 end.
101
102
103 %%%
104 %%% Account management
105 %%%
106
107 -spec register(Host :: jid:server(),
108 Password :: binary()) -> mongoose_account_api:register_result().
109 register(Host, Password) ->
110
:-(
{Result, _} = mongoose_account_api:register_generated_user(Host, Password),
111
:-(
Result.
112
113 -spec register(User :: jid:user(),
114 Host :: jid:server(),
115 Password :: binary()) -> mongoose_account_api:register_result().
116 register(User, Host, Password) ->
117 4980 mongoose_account_api:register_user(User, Host, Password).
118
119 -spec unregister(User :: jid:user(),
120 Host :: jid:server()) -> mongoose_account_api:unregister_result().
121 unregister(User, Host) ->
122 4996 mongoose_account_api:unregister_user(User, Host).
123
124
125 -spec registered_users(Host :: jid:server()) -> mongoose_account_api:list_user_result().
126 registered_users(Host) ->
127
:-(
mongoose_account_api:list_users(Host).
128
129 -spec import_users(file:filename()) -> [{binary(), jid:user() | binary()}].
130 import_users(Filename) ->
131
:-(
{ok, Result} = mongoose_import_users:run(Filename),
132
:-(
maps:to_list(Result).
133
134 %%%
135 %%% Purge DB
136 %%%
137
138 -spec delete_expired_messages(binary()) -> {ok, iolist()} | {error, iolist()}.
139 delete_expired_messages(Domain) ->
140
:-(
case mod_offline_api:delete_expired_messages(jid:nameprep(Domain)) of
141
:-(
{ok, _} = Result -> Result;
142
:-(
{_, Message} -> {error, Message}
143 end.
144
145 -spec delete_old_messages(binary(), Days :: integer()) -> {ok, iolist()} | {error, iolist()}.
146 delete_old_messages(Domain, Days) ->
147
:-(
case mod_offline_api:delete_old_messages(jid:nameprep(Domain), Days) of
148
:-(
{ok, _} = Result -> Result;
149
:-(
{_, Message} -> {error, Message}
150 end.
Line Hits Source