annotate mod_register_redirect/mod_register_redirect.lua @ 737:e4ea03b060ed

mod_archive: switch from/to The XEP-0136 is not very explicit about the meening of <from> and <to> elements, but the examples are clear: <from> means it comes from the user in the 'with' attribute of the collection. That is the opposite of what is currently implemented in that module. So for better compatibility with complient clients, this switch the 'from' and 'to' fields
author Olivier Goffart <ogoffart@woboq.com>
date Wed, 04 Jul 2012 14:08:43 +0200
parents 5c7175be532b
children 055b9ea7bd68
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
443
7679b8f6b886 mod_register_redirect: update authors info.
Marco Cirillo <maranda@lightwitch.org>
parents: 442
diff changeset
1 -- (C) 2010-2011 Marco Cirillo (LW.Org)
7679b8f6b886 mod_register_redirect: update authors info.
Marco Cirillo <maranda@lightwitch.org>
parents: 442
diff changeset
2 -- (C) 2011 Kim Alvefur
7679b8f6b886 mod_register_redirect: update authors info.
Marco Cirillo <maranda@lightwitch.org>
parents: 442
diff changeset
3 --
440
9a71493368de mod_register_redirect: initial commit.
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
4 -- Registration Redirect module for Prosody
9a71493368de mod_register_redirect: initial commit.
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
5 --
9a71493368de mod_register_redirect: initial commit.
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
6 -- Redirects IP addresses not in the whitelist to a web page or another method to complete the registration.
9a71493368de mod_register_redirect: initial commit.
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
7
530
3cc17ef98be0 mod_register_redirect: stick to one code "punctuation" style.
Marco Cirillo <maranda@lightwitch.org>
parents: 443
diff changeset
8 local st = require "util.stanza"
722
5c7175be532b mod_register_redirect: referenced configmanager from prosody's global space instead of requiring it (==).
Marco Cirillo <maranda@lightwitch.org>
parents: 530
diff changeset
9 local cman = configmanager
440
9a71493368de mod_register_redirect: initial commit.
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
10
9a71493368de mod_register_redirect: initial commit.
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
11 function reg_redirect(event)
530
3cc17ef98be0 mod_register_redirect: stick to one code "punctuation" style.
Marco Cirillo <maranda@lightwitch.org>
parents: 443
diff changeset
12 local stanza, origin = event.stanza, event.origin
3cc17ef98be0 mod_register_redirect: stick to one code "punctuation" style.
Marco Cirillo <maranda@lightwitch.org>
parents: 443
diff changeset
13 local ip_wl = module:get_option("registration_whitelist") or { "127.0.0.1" }
3cc17ef98be0 mod_register_redirect: stick to one code "punctuation" style.
Marco Cirillo <maranda@lightwitch.org>
parents: 443
diff changeset
14 local url = module:get_option_string("registration_url", nil)
3cc17ef98be0 mod_register_redirect: stick to one code "punctuation" style.
Marco Cirillo <maranda@lightwitch.org>
parents: 443
diff changeset
15 local inst_text = module:get_option_string("registration_text", nil)
3cc17ef98be0 mod_register_redirect: stick to one code "punctuation" style.
Marco Cirillo <maranda@lightwitch.org>
parents: 443
diff changeset
16 local oob = module:get_option_boolean("registration_oob", true)
3cc17ef98be0 mod_register_redirect: stick to one code "punctuation" style.
Marco Cirillo <maranda@lightwitch.org>
parents: 443
diff changeset
17 local admins_g = cman.get("*", "core", "admins")
3cc17ef98be0 mod_register_redirect: stick to one code "punctuation" style.
Marco Cirillo <maranda@lightwitch.org>
parents: 443
diff changeset
18 local admins_l = cman.get(module:get_host(), "core", "admins")
3cc17ef98be0 mod_register_redirect: stick to one code "punctuation" style.
Marco Cirillo <maranda@lightwitch.org>
parents: 443
diff changeset
19 local no_wl = module:get_option_boolean("no_registration_whitelist", false)
3cc17ef98be0 mod_register_redirect: stick to one code "punctuation" style.
Marco Cirillo <maranda@lightwitch.org>
parents: 443
diff changeset
20 local test_ip = false
440
9a71493368de mod_register_redirect: initial commit.
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
21
530
3cc17ef98be0 mod_register_redirect: stick to one code "punctuation" style.
Marco Cirillo <maranda@lightwitch.org>
parents: 443
diff changeset
22 if type(admins_g) ~= "table" then admins_g = nil end
3cc17ef98be0 mod_register_redirect: stick to one code "punctuation" style.
Marco Cirillo <maranda@lightwitch.org>
parents: 443
diff changeset
23 if type(admins_l) ~= "table" then admins_l = nil end
440
9a71493368de mod_register_redirect: initial commit.
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
24
9a71493368de mod_register_redirect: initial commit.
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
25 -- perform checks to set default responses and sanity checks.
9a71493368de mod_register_redirect: initial commit.
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
26 if not inst_text then
9a71493368de mod_register_redirect: initial commit.
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
27 if url and oob then
9a71493368de mod_register_redirect: initial commit.
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
28 if url:match("^%w+[:].*$") then
9a71493368de mod_register_redirect: initial commit.
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
29 if url:match("^(%w+)[:].*$") == "http" or url:match("^(%w+)[:].*$") == "https" then
9a71493368de mod_register_redirect: initial commit.
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
30 inst_text = "Please visit "..url.." to register an account on this server."
9a71493368de mod_register_redirect: initial commit.
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
31 elseif url:match("^(%w+)[:].*$") == "mailto" then
9a71493368de mod_register_redirect: initial commit.
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
32 inst_text = "Please send an e-mail at "..url:match("^%w+[:](.*)$").." to register an account on this server."
9a71493368de mod_register_redirect: initial commit.
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
33 elseif url:match("^(%w+)[:].*$") == "xmpp" then
442
761b7e1bb7ab mod_register_redirect: few mistake fixes to make it work.
Marco Cirillo <maranda@lightwitch.org>
parents: 441
diff changeset
34 inst_text = "Please contact "..module:get_host().."'s server administrator via xmpp to register an account on this server at: "..url:match("^%w+[:](.*)$")
440
9a71493368de mod_register_redirect: initial commit.
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
35 else
9a71493368de mod_register_redirect: initial commit.
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
36 module:log("error", "This module supports only http/https, mailto or xmpp as URL formats.")
9a71493368de mod_register_redirect: initial commit.
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
37 module:log("error", "If you want to use personalized instructions without an Out-Of-Band method,")
9a71493368de mod_register_redirect: initial commit.
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
38 module:log("error", "specify: register_oob = false; -- in your configuration along your banner string (register_text).")
530
3cc17ef98be0 mod_register_redirect: stick to one code "punctuation" style.
Marco Cirillo <maranda@lightwitch.org>
parents: 443
diff changeset
39 origin.send(st.error_reply(stanza, "wait", "internal-server-error")) ; return true -- bouncing request.
440
9a71493368de mod_register_redirect: initial commit.
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
40 end
9a71493368de mod_register_redirect: initial commit.
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
41 else
9a71493368de mod_register_redirect: initial commit.
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
42 module:log("error", "Please check your configuration, the URL you specified is invalid")
530
3cc17ef98be0 mod_register_redirect: stick to one code "punctuation" style.
Marco Cirillo <maranda@lightwitch.org>
parents: 443
diff changeset
43 origin.send(st.error_reply(stanza, "wait", "internal-server-error")) ; return true -- bouncing request.
440
9a71493368de mod_register_redirect: initial commit.
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
44 end
9a71493368de mod_register_redirect: initial commit.
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
45 else
9a71493368de mod_register_redirect: initial commit.
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
46 if admins_l then
530
3cc17ef98be0 mod_register_redirect: stick to one code "punctuation" style.
Marco Cirillo <maranda@lightwitch.org>
parents: 443
diff changeset
47 local ajid; for _,v in ipairs(admins_l) do ajid = v ; break end
442
761b7e1bb7ab mod_register_redirect: few mistake fixes to make it work.
Marco Cirillo <maranda@lightwitch.org>
parents: 441
diff changeset
48 inst_text = "Please contact "..module:get_host().."'s server administrator via xmpp to register an account on this server at: "..ajid
440
9a71493368de mod_register_redirect: initial commit.
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
49 else
9a71493368de mod_register_redirect: initial commit.
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
50 if admins_g then
530
3cc17ef98be0 mod_register_redirect: stick to one code "punctuation" style.
Marco Cirillo <maranda@lightwitch.org>
parents: 443
diff changeset
51 local ajid; for _,v in ipairs(admins_g) do ajid = v ; break end
442
761b7e1bb7ab mod_register_redirect: few mistake fixes to make it work.
Marco Cirillo <maranda@lightwitch.org>
parents: 441
diff changeset
52 inst_text = "Please contact "..module:get_host().."'s server administrator via xmpp to register an account on this server at: "..ajid
440
9a71493368de mod_register_redirect: initial commit.
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
53 else
9a71493368de mod_register_redirect: initial commit.
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
54 module:log("error", "Please be sure to, _at the very least_, configure one server administrator either global or hostwise...")
9a71493368de mod_register_redirect: initial commit.
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
55 module:log("error", "if you want to use this module, or read it's configuration wiki at: http://code.google.com/p/prosody-modules/wiki/mod_register_redirect")
9a71493368de mod_register_redirect: initial commit.
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
56 origin.send(st.error_reply(stanza, "wait", "internal-server-error")) -- bouncing request.
530
3cc17ef98be0 mod_register_redirect: stick to one code "punctuation" style.
Marco Cirillo <maranda@lightwitch.org>
parents: 443
diff changeset
57 return true
440
9a71493368de mod_register_redirect: initial commit.
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
58 end
9a71493368de mod_register_redirect: initial commit.
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
59 end
9a71493368de mod_register_redirect: initial commit.
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
60 end
9a71493368de mod_register_redirect: initial commit.
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
61 elseif text and oob then
9a71493368de mod_register_redirect: initial commit.
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
62 if not url:match("^%w+[:].*$") then
9a71493368de mod_register_redirect: initial commit.
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
63 module:log("error", "Please check your configuration, the URL specified is not valid.")
9a71493368de mod_register_redirect: initial commit.
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
64 origin.send(st.error_reply(stanza, "wait", "internal-server-error")) -- bouncing request.
9a71493368de mod_register_redirect: initial commit.
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
65 end
9a71493368de mod_register_redirect: initial commit.
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
66 end
9a71493368de mod_register_redirect: initial commit.
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
67
9a71493368de mod_register_redirect: initial commit.
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
68 if not no_wl then
9a71493368de mod_register_redirect: initial commit.
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
69 for i,ip in ipairs(ip_wl) do
530
3cc17ef98be0 mod_register_redirect: stick to one code "punctuation" style.
Marco Cirillo <maranda@lightwitch.org>
parents: 443
diff changeset
70 if origin.ip == ip then test_ip = true end
3cc17ef98be0 mod_register_redirect: stick to one code "punctuation" style.
Marco Cirillo <maranda@lightwitch.org>
parents: 443
diff changeset
71 break
440
9a71493368de mod_register_redirect: initial commit.
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
72 end
9a71493368de mod_register_redirect: initial commit.
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
73 end
9a71493368de mod_register_redirect: initial commit.
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
74
9a71493368de mod_register_redirect: initial commit.
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
75 -- Prepare replies.
530
3cc17ef98be0 mod_register_redirect: stick to one code "punctuation" style.
Marco Cirillo <maranda@lightwitch.org>
parents: 443
diff changeset
76 local reply = st.reply(event.stanza)
440
9a71493368de mod_register_redirect: initial commit.
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
77 if oob then
9a71493368de mod_register_redirect: initial commit.
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
78 reply:query("jabber:iq:register")
9a71493368de mod_register_redirect: initial commit.
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
79 :tag("instructions"):text(inst_text):up()
9a71493368de mod_register_redirect: initial commit.
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
80 :tag("x", {xmlns = "jabber:x:oob"})
9a71493368de mod_register_redirect: initial commit.
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
81 :tag("url"):text(url);
9a71493368de mod_register_redirect: initial commit.
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
82 else
9a71493368de mod_register_redirect: initial commit.
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
83 reply:query("jabber:iq:register")
9a71493368de mod_register_redirect: initial commit.
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
84 :tag("instructions"):text(inst_text):up()
9a71493368de mod_register_redirect: initial commit.
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
85 end
9a71493368de mod_register_redirect: initial commit.
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
86
9a71493368de mod_register_redirect: initial commit.
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
87 if stanza.attr.type == "get" then
530
3cc17ef98be0 mod_register_redirect: stick to one code "punctuation" style.
Marco Cirillo <maranda@lightwitch.org>
parents: 443
diff changeset
88 origin.send(reply)
3cc17ef98be0 mod_register_redirect: stick to one code "punctuation" style.
Marco Cirillo <maranda@lightwitch.org>
parents: 443
diff changeset
89 return true
440
9a71493368de mod_register_redirect: initial commit.
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
90 else
9a71493368de mod_register_redirect: initial commit.
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
91 origin.send(st.error_reply(stanza, "cancel", "not-authorized"))
9a71493368de mod_register_redirect: initial commit.
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
92 return true
9a71493368de mod_register_redirect: initial commit.
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
93 end
9a71493368de mod_register_redirect: initial commit.
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
94 end
9a71493368de mod_register_redirect: initial commit.
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
95
530
3cc17ef98be0 mod_register_redirect: stick to one code "punctuation" style.
Marco Cirillo <maranda@lightwitch.org>
parents: 443
diff changeset
96 module:hook("stanza/iq/jabber:iq:register:query", reg_redirect, 10)