85 { name = "FORM_TYPE", type = "hidden", value = "http://jabber.org/protocol/admin" }; |
83 { name = "FORM_TYPE", type = "hidden", value = "http://jabber.org/protocol/admin" }; |
86 { name = "subject", type = "text-single", label = "Subject" }; |
84 { name = "subject", type = "text-single", label = "Subject" }; |
87 { name = "announcement", type = "text-multi", required = true, label = "Announcement" }; |
85 { name = "announcement", type = "text-multi", required = true, label = "Announcement" }; |
88 }; |
86 }; |
89 |
87 |
90 function add_user_command_handler(self, data, sessid) |
88 function add_user_command_handler(self, data, state) |
91 if sessid and sessions[sessid] then |
89 if state then |
92 if data.action == "cancel" then |
90 if data.action == "cancel" then |
93 sessions[sessid] = nil; |
91 return { status = "canceled" }; |
94 return { status = "canceled" }, sessid; |
|
95 end |
92 end |
96 local fields = add_user_layout:data(data.form); |
93 local fields = add_user_layout:data(data.form); |
97 local username, host, resource = jid.split(fields.accountjid); |
94 local username, host, resource = jid.split(fields.accountjid); |
98 if (fields["password"] == fields["password-verify"]) and username and host and host == data.to then |
95 if (fields["password"] == fields["password-verify"]) and username and host and host == data.to then |
99 if usermanager_user_exists(username, host) then |
96 if usermanager_user_exists(username, host) then |
100 sessions[sessid] = nil; |
97 return { status = "error", error = { type = "cancel", condition = "conflict", message = "Account already exists" } }; |
101 return { status = "error", error = { type = "cancel", condition = "conflict", message = "Account already exists" } }, sessid; |
|
102 else |
98 else |
103 if usermanager_create_user(username, fields.password, host) then |
99 if usermanager_create_user(username, fields.password, host) then |
104 sessions[sessid] = nil; |
|
105 module:log("info", "Created new account " .. username.."@"..host); |
100 module:log("info", "Created new account " .. username.."@"..host); |
106 return { status = "completed", info = "Account successfully created" }, sessid; |
101 return { status = "completed", info = "Account successfully created" }; |
107 else |
102 else |
108 sessions[sessid] = nil; |
|
109 return { status = "error", error = { type = "wait", condition = "internal-server-error", |
103 return { status = "error", error = { type = "wait", condition = "internal-server-error", |
110 message = "Failed to write data to disk" } }, sessid; |
104 message = "Failed to write data to disk" } }; |
111 end |
105 end |
112 end |
106 end |
113 else |
107 else |
114 module:log("debug", fields.accountjid .. " " .. fields.password .. " " .. fields["password-verify"]); |
108 module:log("debug", fields.accountjid .. " " .. fields.password .. " " .. fields["password-verify"]); |
115 sessions[sessid] = nil; |
|
116 return { status = "error", error = { type = "cancel", condition = "conflict", |
109 return { status = "error", error = { type = "cancel", condition = "conflict", |
117 message = "Invalid data.\nPassword mismatch, or empty username" } }, sessid; |
110 message = "Invalid data.\nPassword mismatch, or empty username" } }; |
118 end |
111 end |
119 else |
112 else |
120 local sessionid=uuid.generate(); |
113 return { status = "executing", form = add_user_layout }, "executing"; |
121 sessions[sessionid] = "executing"; |
114 end |
122 return { status = "executing", form = add_user_layout }, sessionid; |
115 end |
123 end |
116 |
124 end |
117 function change_user_password_command_handler(self, data, state) |
125 |
118 if state then |
126 function change_user_password_command_handler(self, data, sessid) |
119 if data.action == "cancel" then |
127 if sessid and sessions[sessid] then |
120 return { status = "canceled" }; |
128 if data.action == "cancel" then |
|
129 sessions[sessid] = nil; |
|
130 return { status = "canceled" }, sessid; |
|
131 end |
121 end |
132 local fields = change_user_password_layout:data(data.form); |
122 local fields = change_user_password_layout:data(data.form); |
133 local username, host, resource = jid.split(fields.accountjid); |
123 local username, host, resource = jid.split(fields.accountjid); |
134 if usermanager_user_exists(username, host) and usermanager_create_user(username, fields.password, host) then |
124 if usermanager_user_exists(username, host) and usermanager_create_user(username, fields.password, host) then |
135 return { status = "completed", info = "Password successfully changed" }, sessid; |
125 return { status = "completed", info = "Password successfully changed" }; |
136 else |
126 else |
137 sessions[sessid] = nil; |
127 return { status = "error", error = { type = "cancel", condition = "item-not-found", message = "User does not exist" } }; |
138 return { status = "error", error = { type = "cancel", condition = "item-not-found", message = "User does not exist" } }, sessid; |
128 end |
139 end |
129 else |
140 sessions[sessid] = nil; |
130 return { status = "executing", form = change_user_password_layout }, "executing"; |
141 return { status = "canceled" }, sessid; |
131 end |
142 else |
132 end |
143 local sessionid=uuid.generate(); |
133 |
144 sessions[sessionid] = "executing"; |
134 function delete_user_command_handler(self, data, state) |
145 return { status = "executing", form = change_user_password_layout }, sessionid; |
135 if state then |
146 end |
136 if data.action == "cancel" then |
147 end |
137 return { status = "canceled" }; |
148 |
|
149 function delete_user_command_handler(self, data, sessid) |
|
150 if sessid and sessions[sessid] then |
|
151 if data.action == "cancel" then |
|
152 sessions[sessid] = nil; |
|
153 return { status = "canceled" }, sessid; |
|
154 end |
138 end |
155 local fields = delete_user_layout:data(data.form); |
139 local fields = delete_user_layout:data(data.form); |
156 local failed = {}; |
140 local failed = {}; |
157 local succeeded = {}; |
141 local succeeded = {}; |
158 for _, aJID in ipairs(fields.accountjids) do |
142 for _, aJID in ipairs(fields.accountjids) do |
163 else |
147 else |
164 module:log("debug", "Tried to delete non-existant user "..aJID); |
148 module:log("debug", "Tried to delete non-existant user "..aJID); |
165 failed[#failed+1] = aJID; |
149 failed[#failed+1] = aJID; |
166 end |
150 end |
167 end |
151 end |
168 sessions[sessid] = nil; |
|
169 return {status = "completed", info = (#succeeded ~= 0 and |
152 return {status = "completed", info = (#succeeded ~= 0 and |
170 "The following accounts were successfully deleted:\n"..t_concat(succeeded, "\n").."\n" or "").. |
153 "The following accounts were successfully deleted:\n"..t_concat(succeeded, "\n").."\n" or "").. |
171 (#failed ~= 0 and |
154 (#failed ~= 0 and |
172 "The following accounts could not be deleted:\n"..t_concat(failed, "\n") or "") }, sessid; |
155 "The following accounts could not be deleted:\n"..t_concat(failed, "\n") or "") }; |
173 else |
156 else |
174 local sessionid=uuid.generate(); |
157 return { status = "executing", form = delete_user_layout }, "executing"; |
175 sessions[sessionid] = "executing"; |
158 end |
176 return { status = "executing", form = delete_user_layout }, sessionid; |
159 end |
177 end |
160 |
178 end |
161 function get_user_password_handler(self, data, state) |
179 |
162 if state then |
180 function get_user_password_handler(self, data, sessid) |
163 if data.action == "cancel" then |
181 if sessid and sessions[sessid] then |
164 return { status = "canceled" }; |
182 if data.action == "cancel" then |
|
183 sessions[sessid] = nil; |
|
184 return { status = "canceled" }, sessid; |
|
185 end |
165 end |
186 local fields = get_user_password_layout:data(data.form); |
166 local fields = get_user_password_layout:data(data.form); |
187 local user, host, resource = jid.split(fields.accountjid); |
167 local user, host, resource = jid.split(fields.accountjid); |
188 local accountjid = ""; |
168 local accountjid = ""; |
189 local password = ""; |
169 local password = ""; |
190 if usermanager_user_exists(user, host) then |
170 if usermanager_user_exists(user, host) then |
191 accountjid = fields.accountjid; |
171 accountjid = fields.accountjid; |
192 password = usermanager_get_password(user, host); |
172 password = usermanager_get_password(user, host); |
193 else |
173 else |
194 sessions[sessid] = nil; |
174 return { status = "error", error = { type = "cancel", condition = "item-not-found", message = "User does not exist" } }; |
195 return { status = "error", error = { type = "cancel", condition = "item-not-found", message = "User does not exist" } }, sessid; |
175 end |
196 end |
176 return { status = "completed", result = { layout = get_user_password_result_layout, data = {accountjid = accountjid, password = password} } }; |
197 sessions[sessid] = nil; |
177 else |
198 return { status = "completed", result = { layout = get_user_password_result_layout, data = {accountjid = accountjid, password = password} } }, sessid; |
178 return { status = "executing", form = get_user_password_layout }, "executing"; |
199 else |
179 end |
200 local sessionid=uuid.generate(); |
180 end |
201 sessions[sessionid] = "executing"; |
181 |
202 return { status = "executing", form = get_user_password_layout }, sessionid; |
182 function get_online_users_command_handler(self, data, state) |
203 end |
183 if state then |
204 end |
184 if data.action == "cancel" then |
205 |
185 return { status = "canceled" }; |
206 function get_online_users_command_handler(self, data, sessid) |
|
207 if sessid and sessions[sessid] then |
|
208 if data.action == "cancel" then |
|
209 sessions[sessid] = nil; |
|
210 return { status = "canceled" }, sessid; |
|
211 end |
186 end |
212 |
187 |
213 local fields = add_user_layout:data(data.form); |
188 local fields = add_user_layout:data(data.form); |
214 |
189 |
215 local max_items = nil |
190 local max_items = nil |
223 break; |
198 break; |
224 end |
199 end |
225 users = ((users and users.."\n") or "")..(username.."@"..data.to); |
200 users = ((users and users.."\n") or "")..(username.."@"..data.to); |
226 count = count + 1; |
201 count = count + 1; |
227 end |
202 end |
228 sessions[sessid] = nil; |
203 return { status = "completed", result = {layout = get_online_users_result_layout, data = {onlineuserjids=users}} }; |
229 return { status = "completed", result = {layout = get_online_users_result_layout, data = {onlineuserjids=users}} }, sessid; |
204 else |
230 else |
205 return { status = "executing", form = get_online_users_layout }, "executing"; |
231 local sessionid=uuid.generate(); |
206 end |
232 sessions[sessionid] = "executing"; |
207 end |
233 return { status = "executing", form = get_online_users_layout }, sessionid; |
208 |
234 end |
209 function announce_handler(self, data, state) |
235 end |
210 if state then |
236 |
211 if data.action == "cancel" then |
237 function announce_handler(self, data, sessid) |
212 return { status = "canceled" }; |
238 if sessid and sessions[sessid] then |
|
239 if data.action == "cancel" then |
|
240 sessions[sessid] = nil; |
|
241 return { status = "canceled" }, sessid; |
|
242 end |
213 end |
243 |
214 |
244 local fields = announce_layout:data(data.form); |
215 local fields = announce_layout:data(data.form); |
245 |
216 |
246 module:log("info", "Sending server announcement to all online users"); |
217 module:log("info", "Sending server announcement to all online users"); |