summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormk <mk@spline.de>2013-10-21 00:15:50 +0200
committermk <mk@spline.de>2013-10-21 00:15:50 +0200
commit12801a8e576e0a6aab4c777f583700a0fd849a41 (patch)
treeff2575ee7c05696e0abff545d327aff6b818b28b
downloadmod_register_refer-12801a8e576e0a6aab4c777f583700a0fd849a41.tar.gz
mod_register_refer-12801a8e576e0a6aab4c777f583700a0fd849a41.tar.bz2
mod_register_refer-12801a8e576e0a6aab4c777f583700a0fd849a41.zip
initial import
-rw-r--r--mod_register_refer.erl82
1 files changed, 82 insertions, 0 deletions
diff --git a/mod_register_refer.erl b/mod_register_refer.erl
new file mode 100644
index 0000000..a17d2e2
--- /dev/null
+++ b/mod_register_refer.erl
@@ -0,0 +1,82 @@
+%%%----------------------------------------------------------------------
+%%% File : mod_register_refer.erl
+%%% Author : Michael Krause <mk@spline.de>
+%%% Purpose : Refer Inband registrations to URL
+%%% Created : 20 Oct 2013 by Michael Krause <mk@spline.de>
+%%%
+%%%
+%%% ejabberd, Copyright (C) 2002-2013 ProcessOne
+%%%
+%%% This program is free software; you can redistribute it and/or
+%%% modify it under the terms of the GNU General Public License as
+%%% published by the Free Software Foundation; either version 2 of the
+%%% License, or (at your option) any later version.
+%%%
+%%% This program is distributed in the hope that it will be useful,
+%%% but WITHOUT ANY WARRANTY; without even the implied warranty of
+%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%%% General Public License for more details.
+%%%
+%%% You should have received a copy of the GNU General Public License
+%%% along with this program; if not, write to the Free Software
+%%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+%%% 02111-1307 USA
+%%%
+%%%----------------------------------------------------------------------
+
+-module(mod_register_refer).
+-author('mk@spline.de').
+
+-behaviour(gen_mod).
+
+-export( [ start/2,
+ stop/1,
+ stream_feature_register/2,
+ unauthenticated_iq_register/4 ] ).
+
+-include("ejabberd.hrl").
+-include("jlib.hrl").
+
+
+start(Host, _Opts) ->
+ ejabberd_hooks:add(c2s_stream_features, Host,
+ ?MODULE, stream_feature_register, 50),
+ ejabberd_hooks:add(c2s_unauthenticated_iq, Host,
+ ?MODULE, unauthenticated_iq_register, 50).
+
+stop(Host) ->
+ ejabberd_hooks:delete(c2s_stream_features, Host,
+ ?MODULE, stream_feature_register, 50),
+ ejabberd_hooks:delete(c2s_unauthenticated_iq, Host,
+ ?MODULE, unauthenticated_iq_register, 50).
+
+stream_feature_register(Acc, _Host) ->
+ [{xmlelement, "register",
+ [{"xmlns", ?NS_FEATURE_IQREGISTER}], []} | Acc].
+
+unauthenticated_iq_register(_Acc, Server, #iq{xmlns = ?NS_REGISTER } = IQ, _IP) ->
+ ?INFO_MSG("mod_register_refer: refering unauthenticated_iq_register ", []),
+ jlib:iq_to_xml( process_iq(IQ, Server) ).
+
+
+% protocol says, we may send a single instruction stanza to redirect
+% TODO handle unregister requests as well?
+process_iq(#iq{ lang = Lang } = IQ, Server) ->
+ case gen_mod:get_module_opt(Server, ?MODULE, url, []) of
+ [] ->
+ ?WARNING_MSG("mod_register_refer: No URL given, check your ejabberd.cfg",[]),
+ Url = "https://accounts.spline.de";
+ [ReferUrl] -> Url = ReferUrl
+ end,
+ IQ#iq{type = result,
+ sub_el = [{xmlelement,"query", [{"xmlns", "jabber:iq:register"}],
+ [ {xmlelement, "instructions", [],
+ [{xmlcdata, translate:translate(
+ Lang,
+ "Registration is handled at:"
+ "https://accounts.spline.de" )}]},
+ {xmlelement, "x", [{"xmlns","jabber:x:oob"}],
+ [{xmlelement, "url", [],
+ [{xmlcdata, Url }] }] }
+ ]}]}.
+