Mercurial > prosody-modules
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 |
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) |