annotate mod_register_json/mod_register_json.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 c26652d055b5
children 836e4e110c71
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
355
a5da789b2e7d mod_register_json: First commit (needs tests).
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
1 -- Expose a simple servlet to handle user registrations from web pages
a5da789b2e7d mod_register_json: First commit (needs tests).
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
2 -- via JSON.
a5da789b2e7d mod_register_json: First commit (needs tests).
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
3 --
a5da789b2e7d mod_register_json: First commit (needs tests).
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
4 -- A Good chunk of the code is from mod_data_access.lua by Kim Alvefur
a5da789b2e7d mod_register_json: First commit (needs tests).
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
5 -- aka Zash.
a5da789b2e7d mod_register_json: First commit (needs tests).
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
6
529
84e992f70ba3 mod_register_json: stick to one code "punctuation" style.
Marco Cirillo <maranda@lightwitch.org>
parents: 430
diff changeset
7 local jid_prep = require "util.jid".prep
84e992f70ba3 mod_register_json: stick to one code "punctuation" style.
Marco Cirillo <maranda@lightwitch.org>
parents: 430
diff changeset
8 local jid_split = require "util.jid".split
723
c26652d055b5 mod_register_json: moved throttling logic so that if there's a failure during nick registration the user can retry and referenced usermanager from prosody's _G instead of req. it.
Marco Cirillo <maranda@lightwitch.org>
parents: 721
diff changeset
9 local usermanager = usermanager
529
84e992f70ba3 mod_register_json: stick to one code "punctuation" style.
Marco Cirillo <maranda@lightwitch.org>
parents: 430
diff changeset
10 local b64_decode = require "util.encodings".base64.decode
84e992f70ba3 mod_register_json: stick to one code "punctuation" style.
Marco Cirillo <maranda@lightwitch.org>
parents: 430
diff changeset
11 local json_decode = require "util.json".decode
84e992f70ba3 mod_register_json: stick to one code "punctuation" style.
Marco Cirillo <maranda@lightwitch.org>
parents: 430
diff changeset
12 local os_time = os.time
84e992f70ba3 mod_register_json: stick to one code "punctuation" style.
Marco Cirillo <maranda@lightwitch.org>
parents: 430
diff changeset
13 local nodeprep = require "util.encodings".stringprep.nodeprep
355
a5da789b2e7d mod_register_json: First commit (needs tests).
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
14
648
6f0e0d6790a7 mod_register_json: updated to current HTTP API.
Marco Cirillo <maranda@lightwitch.org>
parents: 607
diff changeset
15 module:depends("http")
355
a5da789b2e7d mod_register_json: First commit (needs tests).
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
16
359
5d22ebcb9ec5 mod_register_json: Changed log levels, added a few primitive throttling/whitelist/blacklist options
Marco Cirillo <maranda@lightwitch.org>
parents: 358
diff changeset
17 -- Pick up configuration.
5d22ebcb9ec5 mod_register_json: Changed log levels, added a few primitive throttling/whitelist/blacklist options
Marco Cirillo <maranda@lightwitch.org>
parents: 358
diff changeset
18
651
78a23a7dc613 mod_register_json: fixed typo, added https/http switch and default value to it.
Marco Cirillo <maranda@lightwitch.org>
parents: 648
diff changeset
19 local secure = module:get_option_boolean("reg_servlet_secure", true)
560
b62f5e38f865 mod_register_json: added auto-cleanup logic to the module so it can at least be unloaded and reloaded without fuss. (Experimental: works with server_select and trunk)
Marco Cirillo <maranda@lightwitch.org>
parents: 553
diff changeset
20 local set_realm_name = module:get_option_string("reg_servlet_realm", "Restricted")
648
6f0e0d6790a7 mod_register_json: updated to current HTTP API.
Marco Cirillo <maranda@lightwitch.org>
parents: 607
diff changeset
21 local base_path = module:get_option_string("reg_servlet_base", "/register_account/")
560
b62f5e38f865 mod_register_json: added auto-cleanup logic to the module so it can at least be unloaded and reloaded without fuss. (Experimental: works with server_select and trunk)
Marco Cirillo <maranda@lightwitch.org>
parents: 553
diff changeset
22 local throttle_time = module:get_option_number("reg_servlet_ttime", nil)
550
d8143f627f9f mod_register_json: modified code to employ get_option_set for true sets, and contains meta method
Marco Cirillo <maranda@lightwitch.org>
parents: 548
diff changeset
23 local whitelist = module:get_option_set("reg_servlet_wl", {})
d8143f627f9f mod_register_json: modified code to employ get_option_set for true sets, and contains meta method
Marco Cirillo <maranda@lightwitch.org>
parents: 548
diff changeset
24 local blacklist = module:get_option_set("reg_servlet_bl", {})
529
84e992f70ba3 mod_register_json: stick to one code "punctuation" style.
Marco Cirillo <maranda@lightwitch.org>
parents: 430
diff changeset
25 local recent_ips = {}
359
5d22ebcb9ec5 mod_register_json: Changed log levels, added a few primitive throttling/whitelist/blacklist options
Marco Cirillo <maranda@lightwitch.org>
parents: 358
diff changeset
26
5d22ebcb9ec5 mod_register_json: Changed log levels, added a few primitive throttling/whitelist/blacklist options
Marco Cirillo <maranda@lightwitch.org>
parents: 358
diff changeset
27 -- Begin
5d22ebcb9ec5 mod_register_json: Changed log levels, added a few primitive throttling/whitelist/blacklist options
Marco Cirillo <maranda@lightwitch.org>
parents: 358
diff changeset
28
648
6f0e0d6790a7 mod_register_json: updated to current HTTP API.
Marco Cirillo <maranda@lightwitch.org>
parents: 607
diff changeset
29 local function http_response(event, code, message, headers)
6f0e0d6790a7 mod_register_json: updated to current HTTP API.
Marco Cirillo <maranda@lightwitch.org>
parents: 607
diff changeset
30 local response = event.response
6f0e0d6790a7 mod_register_json: updated to current HTTP API.
Marco Cirillo <maranda@lightwitch.org>
parents: 607
diff changeset
31
6f0e0d6790a7 mod_register_json: updated to current HTTP API.
Marco Cirillo <maranda@lightwitch.org>
parents: 607
diff changeset
32 if headers then
6f0e0d6790a7 mod_register_json: updated to current HTTP API.
Marco Cirillo <maranda@lightwitch.org>
parents: 607
diff changeset
33 for header, data in pairs(headers) do response.headers[header] = data end
6f0e0d6790a7 mod_register_json: updated to current HTTP API.
Marco Cirillo <maranda@lightwitch.org>
parents: 607
diff changeset
34 end
6f0e0d6790a7 mod_register_json: updated to current HTTP API.
Marco Cirillo <maranda@lightwitch.org>
parents: 607
diff changeset
35
6f0e0d6790a7 mod_register_json: updated to current HTTP API.
Marco Cirillo <maranda@lightwitch.org>
parents: 607
diff changeset
36 response.headers.content_type = "application/json"
6f0e0d6790a7 mod_register_json: updated to current HTTP API.
Marco Cirillo <maranda@lightwitch.org>
parents: 607
diff changeset
37 response.status_code = code
6f0e0d6790a7 mod_register_json: updated to current HTTP API.
Marco Cirillo <maranda@lightwitch.org>
parents: 607
diff changeset
38 response:send(message)
355
a5da789b2e7d mod_register_json: First commit (needs tests).
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
39 end
a5da789b2e7d mod_register_json: First commit (needs tests).
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
40
648
6f0e0d6790a7 mod_register_json: updated to current HTTP API.
Marco Cirillo <maranda@lightwitch.org>
parents: 607
diff changeset
41 local function handle_req(event)
6f0e0d6790a7 mod_register_json: updated to current HTTP API.
Marco Cirillo <maranda@lightwitch.org>
parents: 607
diff changeset
42 local request = event.request
6f0e0d6790a7 mod_register_json: updated to current HTTP API.
Marco Cirillo <maranda@lightwitch.org>
parents: 607
diff changeset
43 local body = request.body
6f0e0d6790a7 mod_register_json: updated to current HTTP API.
Marco Cirillo <maranda@lightwitch.org>
parents: 607
diff changeset
44
355
a5da789b2e7d mod_register_json: First commit (needs tests).
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
45 if request.method ~= "POST" then
648
6f0e0d6790a7 mod_register_json: updated to current HTTP API.
Marco Cirillo <maranda@lightwitch.org>
parents: 607
diff changeset
46 return http_response(event, 405, "Bad method...", {["Allow"] = "POST"})
355
a5da789b2e7d mod_register_json: First commit (needs tests).
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
47 end
a5da789b2e7d mod_register_json: First commit (needs tests).
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
48 if not request.headers["authorization"] then
648
6f0e0d6790a7 mod_register_json: updated to current HTTP API.
Marco Cirillo <maranda@lightwitch.org>
parents: 607
diff changeset
49 return http_response(event, 401, "No... No...", {["WWW-Authenticate"]='Basic realm="'.. set_realm_name ..'"'})
355
a5da789b2e7d mod_register_json: First commit (needs tests).
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
50 end
a5da789b2e7d mod_register_json: First commit (needs tests).
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
51
529
84e992f70ba3 mod_register_json: stick to one code "punctuation" style.
Marco Cirillo <maranda@lightwitch.org>
parents: 430
diff changeset
52 local user, password = b64_decode(request.headers.authorization:match("[^ ]*$") or ""):match("([^:]*):(.*)")
84e992f70ba3 mod_register_json: stick to one code "punctuation" style.
Marco Cirillo <maranda@lightwitch.org>
parents: 430
diff changeset
53 user = jid_prep(user)
648
6f0e0d6790a7 mod_register_json: updated to current HTTP API.
Marco Cirillo <maranda@lightwitch.org>
parents: 607
diff changeset
54 if not user or not password then return http_response(event, 400, "What's this..?") end
355
a5da789b2e7d mod_register_json: First commit (needs tests).
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
55 local user_node, user_host = jid_split(user)
648
6f0e0d6790a7 mod_register_json: updated to current HTTP API.
Marco Cirillo <maranda@lightwitch.org>
parents: 607
diff changeset
56 if not hosts[user_host] then return http_response(event, 401, "Negative.") end
355
a5da789b2e7d mod_register_json: First commit (needs tests).
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
57
359
5d22ebcb9ec5 mod_register_json: Changed log levels, added a few primitive throttling/whitelist/blacklist options
Marco Cirillo <maranda@lightwitch.org>
parents: 358
diff changeset
58 module:log("warn", "%s is authing to submit a new user registration data", user)
355
a5da789b2e7d mod_register_json: First commit (needs tests).
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
59 if not usermanager.test_password(user_node, user_host, password) then
359
5d22ebcb9ec5 mod_register_json: Changed log levels, added a few primitive throttling/whitelist/blacklist options
Marco Cirillo <maranda@lightwitch.org>
parents: 358
diff changeset
60 module:log("warn", "%s failed authentication", user)
648
6f0e0d6790a7 mod_register_json: updated to current HTTP API.
Marco Cirillo <maranda@lightwitch.org>
parents: 607
diff changeset
61 return http_response(event, 401, "Who the hell are you?! Guards!")
355
a5da789b2e7d mod_register_json: First commit (needs tests).
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
62 end
a5da789b2e7d mod_register_json: First commit (needs tests).
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
63
529
84e992f70ba3 mod_register_json: stick to one code "punctuation" style.
Marco Cirillo <maranda@lightwitch.org>
parents: 430
diff changeset
64 local req_body
361
146496a3be78 mod_register_json: Failed at JSON successful decode check, fixed with a code refactor.
Marco Cirillo <maranda@lightwitch.org>
parents: 360
diff changeset
65 -- We check that what we have is valid JSON wise else we throw an error...
146496a3be78 mod_register_json: Failed at JSON successful decode check, fixed with a code refactor.
Marco Cirillo <maranda@lightwitch.org>
parents: 360
diff changeset
66 if not pcall(function() req_body = json_decode(body) end) then
529
84e992f70ba3 mod_register_json: stick to one code "punctuation" style.
Marco Cirillo <maranda@lightwitch.org>
parents: 430
diff changeset
67 module:log("debug", "JSON data submitted for user registration by %s failed to Decode.", user)
648
6f0e0d6790a7 mod_register_json: updated to current HTTP API.
Marco Cirillo <maranda@lightwitch.org>
parents: 607
diff changeset
68 return http_response(event, 400, "JSON Decoding failed.")
355
a5da789b2e7d mod_register_json: First commit (needs tests).
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
69 else
363
72a5778579c5 mod_register_json: Let's call it the first commit, fixed all code errors (aka it works).
Marco Cirillo <maranda@lightwitch.org>
parents: 362
diff changeset
70 -- Decode JSON data and check that all bits are there else throw an error
529
84e992f70ba3 mod_register_json: stick to one code "punctuation" style.
Marco Cirillo <maranda@lightwitch.org>
parents: 430
diff changeset
71 req_body = json_decode(body)
363
72a5778579c5 mod_register_json: Let's call it the first commit, fixed all code errors (aka it works).
Marco Cirillo <maranda@lightwitch.org>
parents: 362
diff changeset
72 if req_body["username"] == nil or req_body["password"] == nil or req_body["host"] == nil or req_body["ip"] == nil then
529
84e992f70ba3 mod_register_json: stick to one code "punctuation" style.
Marco Cirillo <maranda@lightwitch.org>
parents: 430
diff changeset
73 module:log("debug", "%s supplied an insufficent number of elements or wrong elements for the JSON registration", user)
648
6f0e0d6790a7 mod_register_json: updated to current HTTP API.
Marco Cirillo <maranda@lightwitch.org>
parents: 607
diff changeset
74 return http_response(event, 400, "Invalid syntax.")
363
72a5778579c5 mod_register_json: Let's call it the first commit, fixed all code errors (aka it works).
Marco Cirillo <maranda@lightwitch.org>
parents: 362
diff changeset
75 end
361
146496a3be78 mod_register_json: Failed at JSON successful decode check, fixed with a code refactor.
Marco Cirillo <maranda@lightwitch.org>
parents: 360
diff changeset
76 -- Check if user is an admin of said host
146496a3be78 mod_register_json: Failed at JSON successful decode check, fixed with a code refactor.
Marco Cirillo <maranda@lightwitch.org>
parents: 360
diff changeset
77 if not usermanager.is_admin(user, req_body["host"]) then
529
84e992f70ba3 mod_register_json: stick to one code "punctuation" style.
Marco Cirillo <maranda@lightwitch.org>
parents: 430
diff changeset
78 module:log("warn", "%s tried to submit registration data for %s but he's not an admin", user, req_body["host"])
648
6f0e0d6790a7 mod_register_json: updated to current HTTP API.
Marco Cirillo <maranda@lightwitch.org>
parents: 607
diff changeset
79 return http_response(event, 401, "I obey only to my masters... Have a nice day.")
361
146496a3be78 mod_register_json: Failed at JSON successful decode check, fixed with a code refactor.
Marco Cirillo <maranda@lightwitch.org>
parents: 360
diff changeset
80 else
723
c26652d055b5 mod_register_json: moved throttling logic so that if there's a failure during nick registration the user can retry and referenced usermanager from prosody's _G instead of req. it.
Marco Cirillo <maranda@lightwitch.org>
parents: 721
diff changeset
81 -- Blacklist can be checked here.
550
d8143f627f9f mod_register_json: modified code to employ get_option_set for true sets, and contains meta method
Marco Cirillo <maranda@lightwitch.org>
parents: 548
diff changeset
82 if blacklist:contains(req_body["ip"]) then module:log("warn", "Attempt of reg. submission to the JSON servlet from blacklisted address: %s", req_body["ip"]) ; return http_response(403, "The specified address is blacklisted, sorry sorry.") end
361
146496a3be78 mod_register_json: Failed at JSON successful decode check, fixed with a code refactor.
Marco Cirillo <maranda@lightwitch.org>
parents: 360
diff changeset
83
146496a3be78 mod_register_json: Failed at JSON successful decode check, fixed with a code refactor.
Marco Cirillo <maranda@lightwitch.org>
parents: 360
diff changeset
84 -- We first check if the supplied username for registration is already there.
430
f0fafd19fd72 mod_register_json: changed pestered code to something less pestered. (added nodeprep)
Marco Cirillo <maranda@lightwitch.org>
parents: 429
diff changeset
85 -- And nodeprep the username
529
84e992f70ba3 mod_register_json: stick to one code "punctuation" style.
Marco Cirillo <maranda@lightwitch.org>
parents: 430
diff changeset
86 local username = nodeprep(req_body["username"])
721
9080b0898b6f mod_register_json: modify logic to prevent an unnecessary call to usermanager.
Marco Cirillo <maranda@lightwitch.org>
parents: 710
diff changeset
87 if not username then
9080b0898b6f mod_register_json: modify logic to prevent an unnecessary call to usermanager.
Marco Cirillo <maranda@lightwitch.org>
parents: 710
diff changeset
88 module:log("debug", "%s supplied an username containing invalid characters: %s", user, username)
9080b0898b6f mod_register_json: modify logic to prevent an unnecessary call to usermanager.
Marco Cirillo <maranda@lightwitch.org>
parents: 710
diff changeset
89 return http_response(event, 406, "Supplied username contains invalid characters, see RFC 6122.")
9080b0898b6f mod_register_json: modify logic to prevent an unnecessary call to usermanager.
Marco Cirillo <maranda@lightwitch.org>
parents: 710
diff changeset
90 else
9080b0898b6f mod_register_json: modify logic to prevent an unnecessary call to usermanager.
Marco Cirillo <maranda@lightwitch.org>
parents: 710
diff changeset
91 if not usermanager.user_exists(username, req_body["host"]) then
723
c26652d055b5 mod_register_json: moved throttling logic so that if there's a failure during nick registration the user can retry and referenced usermanager from prosody's _G instead of req. it.
Marco Cirillo <maranda@lightwitch.org>
parents: 721
diff changeset
92 -- if username fails to register successive requests shouldn't be throttled until one is successful.
c26652d055b5 mod_register_json: moved throttling logic so that if there's a failure during nick registration the user can retry and referenced usermanager from prosody's _G instead of req. it.
Marco Cirillo <maranda@lightwitch.org>
parents: 721
diff changeset
93 if throttle_time and not whitelist:contains(req_body["ip"]) then
c26652d055b5 mod_register_json: moved throttling logic so that if there's a failure during nick registration the user can retry and referenced usermanager from prosody's _G instead of req. it.
Marco Cirillo <maranda@lightwitch.org>
parents: 721
diff changeset
94 if not recent_ips[req_body["ip"]] then
c26652d055b5 mod_register_json: moved throttling logic so that if there's a failure during nick registration the user can retry and referenced usermanager from prosody's _G instead of req. it.
Marco Cirillo <maranda@lightwitch.org>
parents: 721
diff changeset
95 recent_ips[req_body["ip"]] = os_time()
c26652d055b5 mod_register_json: moved throttling logic so that if there's a failure during nick registration the user can retry and referenced usermanager from prosody's _G instead of req. it.
Marco Cirillo <maranda@lightwitch.org>
parents: 721
diff changeset
96 else
c26652d055b5 mod_register_json: moved throttling logic so that if there's a failure during nick registration the user can retry and referenced usermanager from prosody's _G instead of req. it.
Marco Cirillo <maranda@lightwitch.org>
parents: 721
diff changeset
97 if os_time() - recent_ips[req_body["ip"]] < throttle_time then
c26652d055b5 mod_register_json: moved throttling logic so that if there's a failure during nick registration the user can retry and referenced usermanager from prosody's _G instead of req. it.
Marco Cirillo <maranda@lightwitch.org>
parents: 721
diff changeset
98 recent_ips[req_body["ip"]] = os_time()
c26652d055b5 mod_register_json: moved throttling logic so that if there's a failure during nick registration the user can retry and referenced usermanager from prosody's _G instead of req. it.
Marco Cirillo <maranda@lightwitch.org>
parents: 721
diff changeset
99 module:log("warn", "JSON Registration request from %s has been throttled.", req_body["ip"])
c26652d055b5 mod_register_json: moved throttling logic so that if there's a failure during nick registration the user can retry and referenced usermanager from prosody's _G instead of req. it.
Marco Cirillo <maranda@lightwitch.org>
parents: 721
diff changeset
100 return http_response(event, 503, "Woah... How many users you want to register..? Request throttled, wait a bit and try again.")
c26652d055b5 mod_register_json: moved throttling logic so that if there's a failure during nick registration the user can retry and referenced usermanager from prosody's _G instead of req. it.
Marco Cirillo <maranda@lightwitch.org>
parents: 721
diff changeset
101 end
c26652d055b5 mod_register_json: moved throttling logic so that if there's a failure during nick registration the user can retry and referenced usermanager from prosody's _G instead of req. it.
Marco Cirillo <maranda@lightwitch.org>
parents: 721
diff changeset
102 recent_ips[req_body["ip"]] = os_time()
c26652d055b5 mod_register_json: moved throttling logic so that if there's a failure during nick registration the user can retry and referenced usermanager from prosody's _G instead of req. it.
Marco Cirillo <maranda@lightwitch.org>
parents: 721
diff changeset
103 end
c26652d055b5 mod_register_json: moved throttling logic so that if there's a failure during nick registration the user can retry and referenced usermanager from prosody's _G instead of req. it.
Marco Cirillo <maranda@lightwitch.org>
parents: 721
diff changeset
104 end
c26652d055b5 mod_register_json: moved throttling logic so that if there's a failure during nick registration the user can retry and referenced usermanager from prosody's _G instead of req. it.
Marco Cirillo <maranda@lightwitch.org>
parents: 721
diff changeset
105
553
7310ceb7564f mod_register_json: checking out if the user creation succeeded or not is good practice.
Marco Cirillo <maranda@lightwitch.org>
parents: 551
diff changeset
106 local ok, error = usermanager.create_user(username, req_body["password"], req_body["host"])
7310ceb7564f mod_register_json: checking out if the user creation succeeded or not is good practice.
Marco Cirillo <maranda@lightwitch.org>
parents: 551
diff changeset
107 if ok then
7310ceb7564f mod_register_json: checking out if the user creation succeeded or not is good practice.
Marco Cirillo <maranda@lightwitch.org>
parents: 551
diff changeset
108 hosts[req_body["host"]].events.fire_event("user-registered", { username = username, host = req_body["host"], source = "mod_register_json", session = { ip = req_body["ip"] } })
7310ceb7564f mod_register_json: checking out if the user creation succeeded or not is good practice.
Marco Cirillo <maranda@lightwitch.org>
parents: 551
diff changeset
109 module:log("debug", "%s registration data submission for %s@%s is successful", user, username, req_body["host"])
648
6f0e0d6790a7 mod_register_json: updated to current HTTP API.
Marco Cirillo <maranda@lightwitch.org>
parents: 607
diff changeset
110 return http_response(event, 200, "Done.")
553
7310ceb7564f mod_register_json: checking out if the user creation succeeded or not is good practice.
Marco Cirillo <maranda@lightwitch.org>
parents: 551
diff changeset
111 else
7310ceb7564f mod_register_json: checking out if the user creation succeeded or not is good practice.
Marco Cirillo <maranda@lightwitch.org>
parents: 551
diff changeset
112 module:log("error", "user creation failed: "..error)
651
78a23a7dc613 mod_register_json: fixed typo, added https/http switch and default value to it.
Marco Cirillo <maranda@lightwitch.org>
parents: 648
diff changeset
113 return http_response(event, 500, "Encountered server error while creating the user: "..error)
553
7310ceb7564f mod_register_json: checking out if the user creation succeeded or not is good practice.
Marco Cirillo <maranda@lightwitch.org>
parents: 551
diff changeset
114 end
721
9080b0898b6f mod_register_json: modify logic to prevent an unnecessary call to usermanager.
Marco Cirillo <maranda@lightwitch.org>
parents: 710
diff changeset
115 else
9080b0898b6f mod_register_json: modify logic to prevent an unnecessary call to usermanager.
Marco Cirillo <maranda@lightwitch.org>
parents: 710
diff changeset
116 module:log("debug", "%s registration data submission for %s failed (user already exists)", user, username)
9080b0898b6f mod_register_json: modify logic to prevent an unnecessary call to usermanager.
Marco Cirillo <maranda@lightwitch.org>
parents: 710
diff changeset
117 return http_response(event, 409, "User already exists.")
429
ea6641deec12 mod_register_json: added check for invalid characters in the username.
Marco Cirillo <maranda@lightwitch.org>
parents: 370
diff changeset
118 end
361
146496a3be78 mod_register_json: Failed at JSON successful decode check, fixed with a code refactor.
Marco Cirillo <maranda@lightwitch.org>
parents: 360
diff changeset
119 end
355
a5da789b2e7d mod_register_json: First commit (needs tests).
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
120 end
a5da789b2e7d mod_register_json: First commit (needs tests).
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
121 end
a5da789b2e7d mod_register_json: First commit (needs tests).
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
122 end
a5da789b2e7d mod_register_json: First commit (needs tests).
Marco Cirillo <maranda@lightwitch.org>
parents:
diff changeset
123
359
5d22ebcb9ec5 mod_register_json: Changed log levels, added a few primitive throttling/whitelist/blacklist options
Marco Cirillo <maranda@lightwitch.org>
parents: 358
diff changeset
124 -- Set it up!
560
b62f5e38f865 mod_register_json: added auto-cleanup logic to the module so it can at least be unloaded and reloaded without fuss. (Experimental: works with server_select and trunk)
Marco Cirillo <maranda@lightwitch.org>
parents: 553
diff changeset
125
655
81d269f97ea2 mod_register_json: revert change, it's not needed (providing http provides https as well)
Marco Cirillo <maranda@lightwitch.org>
parents: 651
diff changeset
126 module:provides("http", {
648
6f0e0d6790a7 mod_register_json: updated to current HTTP API.
Marco Cirillo <maranda@lightwitch.org>
parents: 607
diff changeset
127 default_path = base_path,
6f0e0d6790a7 mod_register_json: updated to current HTTP API.
Marco Cirillo <maranda@lightwitch.org>
parents: 607
diff changeset
128 route = {
6f0e0d6790a7 mod_register_json: updated to current HTTP API.
Marco Cirillo <maranda@lightwitch.org>
parents: 607
diff changeset
129 ["GET /"] = handle_req,
6f0e0d6790a7 mod_register_json: updated to current HTTP API.
Marco Cirillo <maranda@lightwitch.org>
parents: 607
diff changeset
130 ["POST /"] = handle_req
6f0e0d6790a7 mod_register_json: updated to current HTTP API.
Marco Cirillo <maranda@lightwitch.org>
parents: 607
diff changeset
131 }
6f0e0d6790a7 mod_register_json: updated to current HTTP API.
Marco Cirillo <maranda@lightwitch.org>
parents: 607
diff changeset
132 })