Mercurial > prosody-modules
comparison mod_register_redirect/mod_register_redirect.lua @ 530:3cc17ef98be0
mod_register_redirect: stick to one code "punctuation" style.
author | Marco Cirillo <maranda@lightwitch.org> |
---|---|
date | Sat, 07 Jan 2012 18:11:39 +0000 |
parents | 7679b8f6b886 |
children | 5c7175be532b |
comparison
equal
deleted
inserted
replaced
529:84e992f70ba3 | 530:3cc17ef98be0 |
---|---|
3 -- | 3 -- |
4 -- Registration Redirect module for Prosody | 4 -- Registration Redirect module for Prosody |
5 -- | 5 -- |
6 -- Redirects IP addresses not in the whitelist to a web page or another method to complete the registration. | 6 -- Redirects IP addresses not in the whitelist to a web page or another method to complete the registration. |
7 | 7 |
8 local st = require "util.stanza"; | 8 local st = require "util.stanza" |
9 local cman = require "core.configmanager"; | 9 local cman = require "core.configmanager" |
10 | 10 |
11 function reg_redirect(event) | 11 function reg_redirect(event) |
12 local stanza, origin = event.stanza, event.origin; | 12 local stanza, origin = event.stanza, event.origin |
13 local ip_wl = module:get_option("registration_whitelist") or { "127.0.0.1" }; | 13 local ip_wl = module:get_option("registration_whitelist") or { "127.0.0.1" } |
14 local url = module:get_option_string("registration_url", nil); | 14 local url = module:get_option_string("registration_url", nil) |
15 local inst_text = module:get_option_string("registration_text", nil); | 15 local inst_text = module:get_option_string("registration_text", nil) |
16 local oob = module:get_option_boolean("registration_oob", true); | 16 local oob = module:get_option_boolean("registration_oob", true) |
17 local admins_g = cman.get("*", "core", "admins"); | 17 local admins_g = cman.get("*", "core", "admins") |
18 local admins_l = cman.get(module:get_host(), "core", "admins"); | 18 local admins_l = cman.get(module:get_host(), "core", "admins") |
19 local no_wl = module:get_option_boolean("no_registration_whitelist", false); | 19 local no_wl = module:get_option_boolean("no_registration_whitelist", false) |
20 local test_ip = false; | 20 local test_ip = false |
21 | 21 |
22 if type(admins_g) ~= "table" then admins_g = nil; end | 22 if type(admins_g) ~= "table" then admins_g = nil end |
23 if type(admins_l) ~= "table" then admins_l = nil; end | 23 if type(admins_l) ~= "table" then admins_l = nil end |
24 | 24 |
25 -- perform checks to set default responses and sanity checks. | 25 -- perform checks to set default responses and sanity checks. |
26 if not inst_text then | 26 if not inst_text then |
27 if url and oob then | 27 if url and oob then |
28 if url:match("^%w+[:].*$") then | 28 if url:match("^%w+[:].*$") then |
34 inst_text = "Please contact "..module:get_host().."'s server administrator via xmpp to register an account on this server at: "..url:match("^%w+[:](.*)$") | 34 inst_text = "Please contact "..module:get_host().."'s server administrator via xmpp to register an account on this server at: "..url:match("^%w+[:](.*)$") |
35 else | 35 else |
36 module:log("error", "This module supports only http/https, mailto or xmpp as URL formats.") | 36 module:log("error", "This module supports only http/https, mailto or xmpp as URL formats.") |
37 module:log("error", "If you want to use personalized instructions without an Out-Of-Band method,") | 37 module:log("error", "If you want to use personalized instructions without an Out-Of-Band method,") |
38 module:log("error", "specify: register_oob = false; -- in your configuration along your banner string (register_text).") | 38 module:log("error", "specify: register_oob = false; -- in your configuration along your banner string (register_text).") |
39 origin.send(st.error_reply(stanza, "wait", "internal-server-error")); return true -- bouncing request. | 39 origin.send(st.error_reply(stanza, "wait", "internal-server-error")) ; return true -- bouncing request. |
40 end | 40 end |
41 else | 41 else |
42 module:log("error", "Please check your configuration, the URL you specified is invalid") | 42 module:log("error", "Please check your configuration, the URL you specified is invalid") |
43 origin.send(st.error_reply(stanza, "wait", "internal-server-error")); return true -- bouncing request. | 43 origin.send(st.error_reply(stanza, "wait", "internal-server-error")) ; return true -- bouncing request. |
44 end | 44 end |
45 else | 45 else |
46 if admins_l then | 46 if admins_l then |
47 local ajid; for _,v in ipairs(admins_l) do ajid = v; break; end | 47 local ajid; for _,v in ipairs(admins_l) do ajid = v ; break end |
48 inst_text = "Please contact "..module:get_host().."'s server administrator via xmpp to register an account on this server at: "..ajid | 48 inst_text = "Please contact "..module:get_host().."'s server administrator via xmpp to register an account on this server at: "..ajid |
49 else | 49 else |
50 if admins_g then | 50 if admins_g then |
51 local ajid; for _,v in ipairs(admins_g) do ajid = v; break; end | 51 local ajid; for _,v in ipairs(admins_g) do ajid = v ; break end |
52 inst_text = "Please contact "..module:get_host().."'s server administrator via xmpp to register an account on this server at: "..ajid | 52 inst_text = "Please contact "..module:get_host().."'s server administrator via xmpp to register an account on this server at: "..ajid |
53 else | 53 else |
54 module:log("error", "Please be sure to, _at the very least_, configure one server administrator either global or hostwise...") | 54 module:log("error", "Please be sure to, _at the very least_, configure one server administrator either global or hostwise...") |
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") | 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") |
56 origin.send(st.error_reply(stanza, "wait", "internal-server-error")) -- bouncing request. | 56 origin.send(st.error_reply(stanza, "wait", "internal-server-error")) -- bouncing request. |
57 return true; | 57 return true |
58 end | 58 end |
59 end | 59 end |
60 end | 60 end |
61 elseif text and oob then | 61 elseif text and oob then |
62 if not url:match("^%w+[:].*$") then | 62 if not url:match("^%w+[:].*$") then |
65 end | 65 end |
66 end | 66 end |
67 | 67 |
68 if not no_wl then | 68 if not no_wl then |
69 for i,ip in ipairs(ip_wl) do | 69 for i,ip in ipairs(ip_wl) do |
70 if origin.ip == ip then test_ip = true; end | 70 if origin.ip == ip then test_ip = true end |
71 break; | 71 break |
72 end | 72 end |
73 end | 73 end |
74 | 74 |
75 -- Prepare replies. | 75 -- Prepare replies. |
76 local reply = st.reply(event.stanza); | 76 local reply = st.reply(event.stanza) |
77 if oob then | 77 if oob then |
78 reply:query("jabber:iq:register") | 78 reply:query("jabber:iq:register") |
79 :tag("instructions"):text(inst_text):up() | 79 :tag("instructions"):text(inst_text):up() |
80 :tag("x", {xmlns = "jabber:x:oob"}) | 80 :tag("x", {xmlns = "jabber:x:oob"}) |
81 :tag("url"):text(url); | 81 :tag("url"):text(url); |
83 reply:query("jabber:iq:register") | 83 reply:query("jabber:iq:register") |
84 :tag("instructions"):text(inst_text):up() | 84 :tag("instructions"):text(inst_text):up() |
85 end | 85 end |
86 | 86 |
87 if stanza.attr.type == "get" then | 87 if stanza.attr.type == "get" then |
88 origin.send(reply); | 88 origin.send(reply) |
89 return true; | 89 return true |
90 else | 90 else |
91 origin.send(st.error_reply(stanza, "cancel", "not-authorized")) | 91 origin.send(st.error_reply(stanza, "cancel", "not-authorized")) |
92 return true | 92 return true |
93 end | 93 end |
94 end | 94 end |
95 | 95 |
96 module:hook("stanza/iq/jabber:iq:register:query", reg_redirect, 10); | 96 module:hook("stanza/iq/jabber:iq:register:query", reg_redirect, 10) |