Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/processone/ejabberd.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlexey Shchepin <alexey@process-one.net>2003-10-19 20:19:55 +0400
committerAlexey Shchepin <alexey@process-one.net>2003-10-19 20:19:55 +0400
commitf594dd0746d9f40360134329f2ede8460222fb0c (patch)
treee5326775550c4410a49627c909dc94dc30479f23 /src
parenta704f9760d4b8e3445276e08166fed58c935b18c (diff)
* src/ejabberd_local.erl: Added support for announce/online
messages * src/ejabberd.cfg.example: Updated * src/mod_register.erl: Added support for sending registration notifications SVN Revision: 154
Diffstat (limited to 'src')
-rw-r--r--src/ejabberd.cfg.example16
-rw-r--r--src/ejabberd_local.erl42
-rw-r--r--src/mod_register.erl28
3 files changed, 68 insertions, 18 deletions
diff --git a/src/ejabberd.cfg.example b/src/ejabberd.cfg.example
index b2d90b773..f1d915c4e 100644
--- a/src/ejabberd.cfg.example
+++ b/src/ejabberd.cfg.example
@@ -33,6 +33,13 @@
% Replace them with 'none' if you don't want to send such message:
%{welcome_message, none}.
+% List of people who will get notifications about registered users
+%{registration_watchers, ["admin1@localhost",
+% "admin2@localhost"]}.
+
+% Only admins can send announcement messages:
+{access, announce, [{allow, admin}]}.
+
% Only non-blocked users can use c2s connections:
{access, c2s, [{deny, blocked},
@@ -58,12 +65,13 @@
{5223, ejabberd_c2s, [{access, c2s},
{ssl, [{certfile, "./ssl.pem"}]}]},
{5269, ejabberd_s2s_in, []},
- {8888, ejabberd_service, [{host,
- "conference.e.localhost",
- [{password, "asdqwe"}]}]}
+ {8888, ejabberd_service, [{hosts,
+ ["conference.e.localhost",
+ "muc.e.localhost"],
+ [{password, "secret"}]}]}
]}.
-% If SRV lookup fails, then port 5269 used to communicate with other servers
+% If SRV lookup fails, then port 5269 is used to communicate with remote server
{outgoing_s2s_port, 5269}.
diff --git a/src/ejabberd_local.erl b/src/ejabberd_local.erl
index d4517f35b..039389a02 100644
--- a/src/ejabberd_local.erl
+++ b/src/ejabberd_local.erl
@@ -72,7 +72,7 @@ do_route(State, From, To, Packet) ->
[From, To, Packet, 8]),
case To of
#jid{luser = "", lresource = ""} ->
- {xmlelement, Name, Attrs, Els} = Packet,
+ {xmlelement, Name, Attrs, _Els} = Packet,
case Name of
"iq" ->
process_iq(State, From, To, Packet);
@@ -83,15 +83,20 @@ do_route(State, From, To, Packet) ->
_ ->
ok
end;
- #jid{luser = ""} ->
- {xmlelement, _Name, Attrs, _Els} = Packet,
+ #jid{luser = "", lresource = Res} ->
+ {xmlelement, Name, Attrs, _Els} = Packet,
case xml:get_attr_s("type", Attrs) of
"error" -> ok;
"result" -> ok;
_ ->
- Err = jlib:make_error_reply(Packet, ?ERR_ITEM_NOT_FOUND),
- ejabberd_router:route(
- jlib:make_jid("", State#state.mydomain, ""), From, Err)
+ case {Res, Name} of
+ {"announce/online", "message"} ->
+ announce_online(From, To, Packet);
+ _ ->
+ Err = jlib:make_error_reply(
+ Packet, ?ERR_ITEM_NOT_FOUND),
+ ejabberd_router:route(To, From, Err)
+ end
end;
_ ->
ejabberd_sm ! {route, From, To, Packet}
@@ -100,7 +105,7 @@ do_route(State, From, To, Packet) ->
process_iq(State, From, To, Packet) ->
IQ = jlib:iq_query_info(Packet),
case IQ of
- {iq, ID, Type, XMLNS, SubEl} ->
+ {iq, _ID, Type, XMLNS, _SubEl} ->
case jlib:is_iq_request_type(Type) of
true ->
case ets:lookup(State#state.iqtable, XMLNS) of
@@ -121,10 +126,7 @@ process_iq(State, From, To, Packet) ->
[] ->
Err = jlib:make_error_reply(
Packet, ?ERR_FEATURE_NOT_IMPLEMENTED),
- ejabberd_router ! {route,
- {"", State#state.mydomain, ""},
- From,
- Err}
+ ejabberd_router:route(To, From, Err)
end;
_ ->
ok
@@ -133,8 +135,7 @@ process_iq(State, From, To, Packet) ->
ok;
_ ->
Err = jlib:make_error_reply(Packet, ?ERR_BAD_REQUEST),
- ejabberd_router ! {route,
- {"", State#state.mydomain, ""}, From, Err},
+ ejabberd_router:route(To, From, Err),
ok
end.
@@ -147,3 +148,18 @@ register_iq_handler(XMLNS, Module, Fun, Opts) ->
unregister_iq_handler(XMLNS) ->
ejabberd_local ! {unregister_iq_handler, XMLNS}.
+
+announce_online(From, To, Packet) ->
+ case acl:match_rule(announce, From) of
+ deny ->
+ Err = jlib:make_error_reply(Packet, ?ERR_NOT_ALLOWED),
+ ejabberd_router:route(To, From, Err);
+ allow ->
+ Local = jlib:make_jid("", ?MYNAME, ""),
+ lists:foreach(
+ fun({U, R}) ->
+ Dest = jlib:make_jid(U, ?MYNAME, R),
+ ejabberd_router:route(Local, Dest, Packet)
+ end, ejabberd_sm:dirty_get_sessions_list())
+ end.
+
diff --git a/src/mod_register.erl b/src/mod_register.erl
index f19a608a3..298464378 100644
--- a/src/mod_register.erl
+++ b/src/mod_register.erl
@@ -28,7 +28,7 @@ start(Opts) ->
init() ->
ok.
-process_iq(From, To, {iq, ID, Type, XMLNS, SubEl}) ->
+process_iq(From, _To, {iq, ID, Type, XMLNS, SubEl}) ->
case Type of
set ->
UTag = xml:get_subtag(SubEl, "username"),
@@ -124,6 +124,7 @@ try_register(User, Password) ->
case ejabberd_auth:try_register(User, Password) of
{atomic, ok} ->
send_welcome_message(JID),
+ send_registration_notifications(JID),
ok;
{atomic, exists} ->
{error, ?ERR_CONFLICT};
@@ -149,3 +150,28 @@ send_welcome_message(JID) ->
ok
end.
+send_registration_notifications(UJID) ->
+ case ejabberd_config:get_local_option(registration_watchers) of
+ [] -> ok;
+ JIDs when is_list(JIDs) ->
+ Body = lists:flatten(
+ io_lib:format(
+ "The user '~s' was just created on node ~w.",
+ [jlib:jid_to_string(UJID), node()])),
+ lists:foreach(
+ fun(S) ->
+ case jlib:string_to_jid(S) of
+ error -> ok;
+ JID ->
+ ejabberd_router:route(
+ jlib:make_jid("", ?MYNAME, ""),
+ JID,
+ {xmlelement, "message", [{"type", "chat"}],
+ [{xmlelement, "body", [],
+ [{xmlcdata, Body}]}]})
+ end
+ end, JIDs);
+ _ ->
+ ok
+ end.
+