Comparison

tools/ejabberdsql2prosody.lua @ 7568:4f7990902874

ejabberdsql2prosody: rename variable 't' to prevent shadowing upvalues [luacheck] Let's make the result of parseFile() have a more descriptive name.
author Anton Shestakov <av6@dwimlabs.net>
date Fri, 12 Aug 2016 13:51:38 +0800
parent 7567:495de404a8ae
child 13142:879a6a33c21b
comparison
equal deleted inserted replaced
7567:495de404a8ae 7568:4f7990902874
195 ["users"] = {"username", "password"}; 195 ["users"] = {"username", "password"};
196 ["vcard"] = {"username", "vcard"}; 196 ["vcard"] = {"username", "vcard"};
197 --["vcard_search"] = {}; 197 --["vcard_search"] = {};
198 } 198 }
199 local NULL = {}; 199 local NULL = {};
200 local t = parseFile(arg); 200 local parsed = parseFile(arg);
201 for name, data in pairs(t) do 201 for name, data in pairs(parsed) do
202 local m = map[name]; 202 local m = map[name];
203 if m then 203 if m then
204 if #data > 0 and #data[1] ~= #m then 204 if #data > 0 and #data[1] ~= #m then
205 print("[warning] expected "..#m.." columns for table `"..name.."`, found "..#data[1]); 205 print("[warning] expected "..#m.." columns for table `"..name.."`, found "..#data[1]);
206 end 206 end
213 end 213 end
214 end 214 end
215 end 215 end
216 --print(serialize(t)); 216 --print(serialize(t));
217 217
218 for _, row in ipairs(t["users"] or NULL) do 218 for _, row in ipairs(parsed["users"] or NULL) do
219 local node, password = row.username, row.password; 219 local node, password = row.username, row.password;
220 local ret, err = dm.store(node, hostname, "accounts", {password = password}); 220 local ret, err = dm.store(node, hostname, "accounts", {password = password});
221 print("["..(err or "success").."] accounts: "..node.."@"..hostname); 221 print("["..(err or "success").."] accounts: "..node.."@"..hostname);
222 end 222 end
223 223
252 stanza.attr.stamp = os.date("!%Y-%m-%dT%H:%M:%SZ", t); 252 stanza.attr.stamp = os.date("!%Y-%m-%dT%H:%M:%SZ", t);
253 stanza.attr.stamp_legacy = os.date("!%Y%m%dT%H:%M:%S", t); 253 stanza.attr.stamp_legacy = os.date("!%Y%m%dT%H:%M:%S", t);
254 local ret, err = dm.list_append(node, host, "offline", st.preserialize(stanza)); 254 local ret, err = dm.list_append(node, host, "offline", st.preserialize(stanza));
255 print("["..(err or "success").."] offline: " ..node.."@"..host.." - "..os.date("!%Y-%m-%dT%H:%M:%SZ", t)); 255 print("["..(err or "success").."] offline: " ..node.."@"..host.." - "..os.date("!%Y-%m-%dT%H:%M:%SZ", t));
256 end 256 end
257 for _, row in ipairs(t["rosterusers"] or NULL) do 257 for _, row in ipairs(parsed["rosterusers"] or NULL) do
258 local node, contact = row.username, row.jid; 258 local node, contact = row.username, row.jid;
259 local name = row.nick; 259 local name = row.nick;
260 if name == "" then name = nil; end 260 if name == "" then name = nil; end
261 local subscription = row.subscription; 261 local subscription = row.subscription;
262 if subscription == "N" then 262 if subscription == "N" then
281 ask = "subscribe"; 281 ask = "subscribe";
282 else error("Unknown ask type: "..ask); end 282 else error("Unknown ask type: "..ask); end
283 local item = {name = name, ask = ask, subscription = subscription, groups = {}}; 283 local item = {name = name, ask = ask, subscription = subscription, groups = {}};
284 roster(node, hostname, contact, item); 284 roster(node, hostname, contact, item);
285 end 285 end
286 for _, row in ipairs(t["rostergroups"] or NULL) do 286 for _, row in ipairs(parsed["rostergroups"] or NULL) do
287 roster_group(row.username, hostname, row.jid, row.grp); 287 roster_group(row.username, hostname, row.jid, row.grp);
288 end 288 end
289 for _, row in ipairs(t["vcard"] or NULL) do 289 for _, row in ipairs(parsed["vcard"] or NULL) do
290 local stanza, err = parse_xml(row.vcard); 290 local stanza, err = parse_xml(row.vcard);
291 if stanza then 291 if stanza then
292 local ret, err = dm.store(row.username, hostname, "vcard", st.preserialize(stanza)); 292 local ret, err = dm.store(row.username, hostname, "vcard", st.preserialize(stanza));
293 print("["..(err or "success").."] vCard: "..row.username.."@"..hostname); 293 print("["..(err or "success").."] vCard: "..row.username.."@"..hostname);
294 else 294 else
295 print("[error] vCard XML parse failed: "..row.username.."@"..hostname); 295 print("[error] vCard XML parse failed: "..row.username.."@"..hostname);
296 end 296 end
297 end 297 end
298 for _, row in ipairs(t["private_storage"] or NULL) do 298 for _, row in ipairs(parsed["private_storage"] or NULL) do
299 local stanza, err = parse_xml(row.data); 299 local stanza, err = parse_xml(row.data);
300 if stanza then 300 if stanza then
301 private_storage(row.username, hostname, row.namespace, stanza); 301 private_storage(row.username, hostname, row.namespace, stanza);
302 else 302 else
303 print("[error] Private XML parse failed: "..row.username.."@"..hostname); 303 print("[error] Private XML parse failed: "..row.username.."@"..hostname);
304 end 304 end
305 end 305 end
306 table.sort(t["spool"] or NULL, function(a,b) return a.seq < b.seq; end); -- sort by sequence number, just in case 306 table.sort(parsed["spool"] or NULL, function(a,b) return a.seq < b.seq; end); -- sort by sequence number, just in case
307 local time_offset = os.difftime(os.time(os.date("!*t")), os.time(os.date("*t"))) -- to deal with timezones 307 local time_offset = os.difftime(os.time(os.date("!*t")), os.time(os.date("*t"))) -- to deal with timezones
308 local date_parse = function(s) 308 local date_parse = function(s)
309 local year, month, day, hour, min, sec = s:match("(....)-?(..)-?(..)T(..):(..):(..)"); 309 local year, month, day, hour, min, sec = s:match("(....)-?(..)-?(..)T(..):(..):(..)");
310 return os.time({year=year, month=month, day=day, hour=hour, min=min, sec=sec-time_offset}); 310 return os.time({year=year, month=month, day=day, hour=hour, min=min, sec=sec-time_offset});
311 end 311 end
312 for _, row in ipairs(t["spool"] or NULL) do 312 for _, row in ipairs(parsed["spool"] or NULL) do
313 local stanza, err = parse_xml(row.xml); 313 local stanza, err = parse_xml(row.xml);
314 if stanza then 314 if stanza then
315 local last_child = stanza.tags[#stanza.tags]; 315 local last_child = stanza.tags[#stanza.tags];
316 if not last_child or last_child ~= stanza[#stanza] then error("Last child of offline message is not a tag"); end 316 if not last_child or last_child ~= stanza[#stanza] then error("Last child of offline message is not a tag"); end
317 if last_child.name ~= "x" and last_child.attr.xmlns ~= "jabber:x:delay" then error("Last child of offline message is not a timestamp"); end 317 if last_child.name ~= "x" and last_child.attr.xmlns ~= "jabber:x:delay" then error("Last child of offline message is not a timestamp"); end