3 -- This file is MIT/X11 licensed. Please see the |
3 -- This file is MIT/X11 licensed. Please see the |
4 -- COPYING file in the source package for more information. |
4 -- COPYING file in the source package for more information. |
5 -- |
5 -- |
6 |
6 |
7 local st, jid, uuid = require "util.stanza", require "util.jid", require "util.uuid"; |
7 local st, jid, uuid = require "util.stanza", require "util.jid", require "util.uuid"; |
|
8 local dataforms_new = require "util.dataforms".new; |
8 local usermanager_user_exists = require "core.usermanager".user_exists; |
9 local usermanager_user_exists = require "core.usermanager".user_exists; |
9 local usermanager_create_user = require "core.usermanager".create_user; |
10 local usermanager_create_user = require "core.usermanager".create_user; |
10 |
11 |
11 local is_admin = require "core.usermanager".is_admin; |
12 local is_admin = require "core.usermanager".is_admin; |
12 local admins = set.new(config.get(module:get_host(), "core", "admins")); |
13 local admins = set.new(config.get(module:get_host(), "core", "admins")); |
34 if tag.name == "x" and tag.attr.xmlns == "jabber:x:data" then |
35 if tag.name == "x" and tag.attr.xmlns == "jabber:x:data" then |
35 form = tag; |
36 form = tag; |
36 break; |
37 break; |
37 end |
38 end |
38 end |
39 end |
39 local fields = {}; |
40 local layout = { |
40 for _, field in ipairs(form.tags) do |
41 { name = "accountjid", type = "jid-single" }; |
41 if field.name == "field" and field.attr.var then |
42 { name = "password", type = "text-private" }; |
42 for i, tag in ipairs(field.tags) do |
43 { name = "password-verify", type = "text-private" }; |
43 if tag.name == "value" and #tag.tags == 0 then |
44 }; |
44 fields[field.attr.var] = tag[1] or ""; |
45 dataforms_new(layout); |
45 end |
46 local fields = layout:data(form); |
46 end |
|
47 end |
|
48 end |
|
49 local username, host, resource = jid.split(fields.accountjid); |
47 local username, host, resource = jid.split(fields.accountjid); |
50 if (fields.password == fields["password-verify"]) and username and host and host == stanza.attr.to then |
48 if (fields.password == fields["password-verify"]) and username and host and host == stanza.attr.to then |
51 if usermanager_user_exists(username, host) then |
49 if usermanager_user_exists(username, host) then |
52 origin.send(st.error_reply(stanza, "cancel", "conflict", "Account already exists"):up() |
50 origin.send(st.error_reply(stanza, "cancel", "conflict", "Account already exists"):up() |
53 :tag("command", {xmlns="http://jabber.org/protocol/commands", |
51 :tag("command", {xmlns="http://jabber.org/protocol/commands", |