Software /
code /
prosody
Annotate
tools/ejabberdsql2prosody.lua @ 6909:494938dec5d8
MUC: Reject muc:admin query with missing <item> child
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Sun, 18 Oct 2015 14:00:15 +0200 |
parent | 5993:ef11b8bab405 |
child | 7565:2ef93ba18336 |
rev | line source |
---|---|
1592
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
1 #!/usr/bin/env lua |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
2 -- Prosody IM |
2923
b7049746bd29
Update copyright headers for 2010
Matthew Wild <mwild1@gmail.com>
parents:
2688
diff
changeset
|
3 -- Copyright (C) 2008-2010 Matthew Wild |
b7049746bd29
Update copyright headers for 2010
Matthew Wild <mwild1@gmail.com>
parents:
2688
diff
changeset
|
4 -- Copyright (C) 2008-2010 Waqas Hussain |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5696
diff
changeset
|
5 -- |
1592
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
6 -- This project is MIT/X11 licensed. Please see the |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
7 -- COPYING file in the source package for more information. |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
8 -- |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
9 |
3541
a72b88953bf2
ejabberdsql2prosody: Added a global 'prosody' table to fix a traceback.
Waqas Hussain <waqas20@gmail.com>
parents:
2923
diff
changeset
|
10 prosody = {}; |
a72b88953bf2
ejabberdsql2prosody: Added a global 'prosody' table to fix a traceback.
Waqas Hussain <waqas20@gmail.com>
parents:
2923
diff
changeset
|
11 |
1592
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
12 package.path = package.path ..";../?.lua"; |
5696
9fba74a28e0c
package{,c}path fixes for migration tools
Vadim Misbakh-Soloviov <mva@mva.name>
parents:
5215
diff
changeset
|
13 |
9fba74a28e0c
package{,c}path fixes for migration tools
Vadim Misbakh-Soloviov <mva@mva.name>
parents:
5215
diff
changeset
|
14 local my_name = arg[0]; |
9fba74a28e0c
package{,c}path fixes for migration tools
Vadim Misbakh-Soloviov <mva@mva.name>
parents:
5215
diff
changeset
|
15 if my_name:match("[/\\]") then |
9fba74a28e0c
package{,c}path fixes for migration tools
Vadim Misbakh-Soloviov <mva@mva.name>
parents:
5215
diff
changeset
|
16 package.path = package.path..";"..my_name:gsub("[^/\\]+$", "../?.lua"); |
9fba74a28e0c
package{,c}path fixes for migration tools
Vadim Misbakh-Soloviov <mva@mva.name>
parents:
5215
diff
changeset
|
17 package.cpath = package.cpath..";"..my_name:gsub("[^/\\]+$", "../?.so"); |
9fba74a28e0c
package{,c}path fixes for migration tools
Vadim Misbakh-Soloviov <mva@mva.name>
parents:
5215
diff
changeset
|
18 end |
9fba74a28e0c
package{,c}path fixes for migration tools
Vadim Misbakh-Soloviov <mva@mva.name>
parents:
5215
diff
changeset
|
19 |
9fba74a28e0c
package{,c}path fixes for migration tools
Vadim Misbakh-Soloviov <mva@mva.name>
parents:
5215
diff
changeset
|
20 |
1592
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
21 local serialize = require "util.serialization".serialize; |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
22 local st = require "util.stanza"; |
5215
b3d837c1ccf1
tools/ejabberdsql2prosody: Use util.xml.
Waqas Hussain <waqas20@gmail.com>
parents:
4496
diff
changeset
|
23 local parse_xml = require "util.xml".parse; |
1592
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
24 package.loaded["util.logger"] = {init = function() return function() end; end} |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
25 local dm = require "util.datamanager" |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
26 dm.set_data_path("data"); |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
27 |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
28 function parseFile(filename) |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
29 ------ |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
30 |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
31 local file = nil; |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
32 local last = nil; |
4384
7fbcb7e6a6a0
tools/ejabberdsql2prosody: Track current line for error reporting
Matthew Wild <mwild1@gmail.com>
parents:
3541
diff
changeset
|
33 local line = 1; |
1592
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
34 local function read(expected) |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
35 local ch; |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
36 if last then |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
37 ch = last; last = nil; |
4384
7fbcb7e6a6a0
tools/ejabberdsql2prosody: Track current line for error reporting
Matthew Wild <mwild1@gmail.com>
parents:
3541
diff
changeset
|
38 else |
7fbcb7e6a6a0
tools/ejabberdsql2prosody: Track current line for error reporting
Matthew Wild <mwild1@gmail.com>
parents:
3541
diff
changeset
|
39 ch = file:read(1); |
7fbcb7e6a6a0
tools/ejabberdsql2prosody: Track current line for error reporting
Matthew Wild <mwild1@gmail.com>
parents:
3541
diff
changeset
|
40 if ch == "\n" then line = line + 1; end |
7fbcb7e6a6a0
tools/ejabberdsql2prosody: Track current line for error reporting
Matthew Wild <mwild1@gmail.com>
parents:
3541
diff
changeset
|
41 end |
7fbcb7e6a6a0
tools/ejabberdsql2prosody: Track current line for error reporting
Matthew Wild <mwild1@gmail.com>
parents:
3541
diff
changeset
|
42 if expected and ch ~= expected then error("expected: "..expected.."; got: "..(ch or "nil").." on line "..line); end |
1592
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
43 return ch; |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
44 end |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
45 local function pushback(ch) |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
46 if last then error(); end |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
47 last = ch; |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
48 end |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
49 local function peek() |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
50 if not last then last = read(); end |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
51 return last; |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
52 end |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
53 |
1599
308986a3e66a
ejabberdsql2prosody: Added support for all mysql escape sequences
Waqas Hussain <waqas20@gmail.com>
parents:
1598
diff
changeset
|
54 local escapes = { |
308986a3e66a
ejabberdsql2prosody: Added support for all mysql escape sequences
Waqas Hussain <waqas20@gmail.com>
parents:
1598
diff
changeset
|
55 ["\\0"] = "\0"; |
308986a3e66a
ejabberdsql2prosody: Added support for all mysql escape sequences
Waqas Hussain <waqas20@gmail.com>
parents:
1598
diff
changeset
|
56 ["\\'"] = "'"; |
308986a3e66a
ejabberdsql2prosody: Added support for all mysql escape sequences
Waqas Hussain <waqas20@gmail.com>
parents:
1598
diff
changeset
|
57 ["\\\""] = "\""; |
308986a3e66a
ejabberdsql2prosody: Added support for all mysql escape sequences
Waqas Hussain <waqas20@gmail.com>
parents:
1598
diff
changeset
|
58 ["\\b"] = "\b"; |
308986a3e66a
ejabberdsql2prosody: Added support for all mysql escape sequences
Waqas Hussain <waqas20@gmail.com>
parents:
1598
diff
changeset
|
59 ["\\n"] = "\n"; |
308986a3e66a
ejabberdsql2prosody: Added support for all mysql escape sequences
Waqas Hussain <waqas20@gmail.com>
parents:
1598
diff
changeset
|
60 ["\\r"] = "\r"; |
308986a3e66a
ejabberdsql2prosody: Added support for all mysql escape sequences
Waqas Hussain <waqas20@gmail.com>
parents:
1598
diff
changeset
|
61 ["\\t"] = "\t"; |
308986a3e66a
ejabberdsql2prosody: Added support for all mysql escape sequences
Waqas Hussain <waqas20@gmail.com>
parents:
1598
diff
changeset
|
62 ["\\Z"] = "\26"; |
308986a3e66a
ejabberdsql2prosody: Added support for all mysql escape sequences
Waqas Hussain <waqas20@gmail.com>
parents:
1598
diff
changeset
|
63 ["\\\\"] = "\\"; |
308986a3e66a
ejabberdsql2prosody: Added support for all mysql escape sequences
Waqas Hussain <waqas20@gmail.com>
parents:
1598
diff
changeset
|
64 ["\\%"] = "%"; |
308986a3e66a
ejabberdsql2prosody: Added support for all mysql escape sequences
Waqas Hussain <waqas20@gmail.com>
parents:
1598
diff
changeset
|
65 ["\\_"] = "_"; |
308986a3e66a
ejabberdsql2prosody: Added support for all mysql escape sequences
Waqas Hussain <waqas20@gmail.com>
parents:
1598
diff
changeset
|
66 } |
1592
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
67 local function unescape(s) |
1599
308986a3e66a
ejabberdsql2prosody: Added support for all mysql escape sequences
Waqas Hussain <waqas20@gmail.com>
parents:
1598
diff
changeset
|
68 return escapes[s] or error("Unknown escape sequence: "..s); |
1592
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
69 end |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
70 local function readString() |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
71 read("'"); |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
72 local s = ""; |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
73 while true do |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
74 local ch = peek(); |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
75 if ch == "\\" then |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
76 s = s..unescape(read()..read()); |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
77 elseif ch == "'" then |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
78 break; |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
79 else |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
80 s = s..read(); |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
81 end |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
82 end |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
83 read("'"); |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
84 return s; |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
85 end |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
86 local function readNonString() |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
87 local s = ""; |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
88 while true do |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
89 if peek() == "," or peek() == ")" then |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
90 break; |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
91 else |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
92 s = s..read(); |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
93 end |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
94 end |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
95 return tonumber(s); |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
96 end |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
97 local function readItem() |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
98 if peek() == "'" then |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
99 return readString(); |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
100 else |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
101 return readNonString(); |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
102 end |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
103 end |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
104 local function readTuple() |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
105 local items = {} |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
106 read("("); |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
107 while peek() ~= ")" do |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
108 table.insert(items, readItem()); |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
109 if peek() == ")" then break; end |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
110 read(","); |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
111 end |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
112 read(")"); |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
113 return items; |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
114 end |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
115 local function readTuples() |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
116 if peek() ~= "(" then read("("); end |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
117 local tuples = {}; |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
118 while true do |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
119 table.insert(tuples, readTuple()); |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
120 if peek() == "," then read() end |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
121 if peek() == ";" then break; end |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
122 end |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
123 return tuples; |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
124 end |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
125 local function readTableName() |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
126 local tname = ""; |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
127 while peek() ~= "`" do tname = tname..read(); end |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
128 return tname; |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
129 end |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
130 local function readInsert() |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
131 if peek() == nil then return nil; end |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
132 for ch in ("INSERT INTO `"):gmatch(".") do -- find line starting with this |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
133 if peek() == ch then |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
134 read(); -- found |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
135 else -- match failed, skip line |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
136 while peek() and read() ~= "\n" do end |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
137 return nil; |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
138 end |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
139 end |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
140 local tname = readTableName(); |
4496
11983a1e92c0
tools/ejabberdsql2prosody: Handle INSERT statement form where column list is specified (by skipping the column list).
Waqas Hussain <waqas20@gmail.com>
parents:
4384
diff
changeset
|
141 read("`"); read(" ") -- expect this |
11983a1e92c0
tools/ejabberdsql2prosody: Handle INSERT statement form where column list is specified (by skipping the column list).
Waqas Hussain <waqas20@gmail.com>
parents:
4384
diff
changeset
|
142 if peek() == "(" then -- skip column list |
11983a1e92c0
tools/ejabberdsql2prosody: Handle INSERT statement form where column list is specified (by skipping the column list).
Waqas Hussain <waqas20@gmail.com>
parents:
4384
diff
changeset
|
143 repeat until read() == ")"; |
11983a1e92c0
tools/ejabberdsql2prosody: Handle INSERT statement form where column list is specified (by skipping the column list).
Waqas Hussain <waqas20@gmail.com>
parents:
4384
diff
changeset
|
144 read(" "); |
11983a1e92c0
tools/ejabberdsql2prosody: Handle INSERT statement form where column list is specified (by skipping the column list).
Waqas Hussain <waqas20@gmail.com>
parents:
4384
diff
changeset
|
145 end |
11983a1e92c0
tools/ejabberdsql2prosody: Handle INSERT statement form where column list is specified (by skipping the column list).
Waqas Hussain <waqas20@gmail.com>
parents:
4384
diff
changeset
|
146 for ch in ("VALUES "):gmatch(".") do read(ch); end -- expect this |
1592
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
147 local tuples = readTuples(); |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
148 read(";"); read("\n"); |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
149 return tname, tuples; |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
150 end |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
151 |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
152 local function readFile(filename) |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
153 file = io.open(filename); |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
154 if not file then error("File not found: "..filename); os.exit(0); end |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
155 local t = {}; |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
156 while true do |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
157 local tname, tuples = readInsert(); |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
158 if tname then |
1647
066cd784d97b
ejabberdsql2prosody: Fix access of undefined global
Waqas Hussain <waqas20@gmail.com>
parents:
1630
diff
changeset
|
159 if t[tname] then |
066cd784d97b
ejabberdsql2prosody: Fix access of undefined global
Waqas Hussain <waqas20@gmail.com>
parents:
1630
diff
changeset
|
160 local t_name = t[tname]; |
1611
e20f90743863
ejabberdsql2prosody: Allow for multiple INSERTs to the same table
Waqas Hussain <waqas20@gmail.com>
parents:
1603
diff
changeset
|
161 for i=1,#tuples do |
e20f90743863
ejabberdsql2prosody: Allow for multiple INSERTs to the same table
Waqas Hussain <waqas20@gmail.com>
parents:
1603
diff
changeset
|
162 table.insert(t_name, tuples[i]); |
e20f90743863
ejabberdsql2prosody: Allow for multiple INSERTs to the same table
Waqas Hussain <waqas20@gmail.com>
parents:
1603
diff
changeset
|
163 end |
e20f90743863
ejabberdsql2prosody: Allow for multiple INSERTs to the same table
Waqas Hussain <waqas20@gmail.com>
parents:
1603
diff
changeset
|
164 else |
e20f90743863
ejabberdsql2prosody: Allow for multiple INSERTs to the same table
Waqas Hussain <waqas20@gmail.com>
parents:
1603
diff
changeset
|
165 t[tname] = tuples; |
e20f90743863
ejabberdsql2prosody: Allow for multiple INSERTs to the same table
Waqas Hussain <waqas20@gmail.com>
parents:
1603
diff
changeset
|
166 end |
1592
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
167 elseif peek() == nil then |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
168 break; |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
169 end |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
170 end |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
171 return t; |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
172 end |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
173 |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
174 return readFile(filename); |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
175 |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
176 ------ |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
177 end |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
178 |
1594
6e639a34e503
ejabberdsql2prosody: Added a second required command line parameter: hostname
Waqas Hussain <waqas20@gmail.com>
parents:
1593
diff
changeset
|
179 local arg, host = ...; |
1592
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
180 local help = "/? -? ? /h -h /help -help --help"; |
1594
6e639a34e503
ejabberdsql2prosody: Added a second required command line parameter: hostname
Waqas Hussain <waqas20@gmail.com>
parents:
1593
diff
changeset
|
181 if not(arg and host) or help:find(arg, 1, true) then |
1593
4e44aa858a4c
ejabberdsql2prosody: Improved help message
Waqas Hussain <waqas20@gmail.com>
parents:
1592
diff
changeset
|
182 print([[ejabberd SQL DB dump importer for Prosody |
1592
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
183 |
1594
6e639a34e503
ejabberdsql2prosody: Added a second required command line parameter: hostname
Waqas Hussain <waqas20@gmail.com>
parents:
1593
diff
changeset
|
184 Usage: ejabberdsql2prosody.lua filename.txt hostname |
1592
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
185 |
1593
4e44aa858a4c
ejabberdsql2prosody: Improved help message
Waqas Hussain <waqas20@gmail.com>
parents:
1592
diff
changeset
|
186 The file can be generated using mysqldump: |
1594
6e639a34e503
ejabberdsql2prosody: Added a second required command line parameter: hostname
Waqas Hussain <waqas20@gmail.com>
parents:
1593
diff
changeset
|
187 mysqldump db_name > filename.txt]]); |
1592
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
188 os.exit(1); |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
189 end |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
190 local map = { |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
191 ["last"] = {"username", "seconds", "state"}; |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
192 ["privacy_default_list"] = {"username", "name"}; |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
193 ["privacy_list"] = {"username", "name", "id"}; |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
194 ["privacy_list_data"] = {"id", "t", "value", "action", "ord", "match_all", "match_iq", "match_message", "match_presence_in", "match_presence_out"}; |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
195 ["private_storage"] = {"username", "namespace", "data"}; |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
196 ["rostergroups"] = {"username", "jid", "grp"}; |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
197 ["rosterusers"] = {"username", "jid", "nick", "subscription", "ask", "askmessage", "server", "subscribe", "type"}; |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
198 ["spool"] = {"username", "xml", "seq"}; |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
199 ["users"] = {"username", "password"}; |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
200 ["vcard"] = {"username", "vcard"}; |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
201 --["vcard_search"] = {}; |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
202 } |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
203 local NULL = {}; |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
204 local t = parseFile(arg); |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
205 for name, data in pairs(t) do |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
206 local m = map[name]; |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
207 if m then |
1601
a3ffc27b6207
ejabberdsql2prosody: Fix typo, and improve the warning message
Waqas Hussain <waqas20@gmail.com>
parents:
1600
diff
changeset
|
208 if #data > 0 and #data[1] ~= #m then |
a3ffc27b6207
ejabberdsql2prosody: Fix typo, and improve the warning message
Waqas Hussain <waqas20@gmail.com>
parents:
1600
diff
changeset
|
209 print("[warning] expected "..#m.." columns for table `"..name.."`, found "..#data[1]); |
a3ffc27b6207
ejabberdsql2prosody: Fix typo, and improve the warning message
Waqas Hussain <waqas20@gmail.com>
parents:
1600
diff
changeset
|
210 end |
1592
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
211 for i=1,#data do |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
212 local row = data[i]; |
1601
a3ffc27b6207
ejabberdsql2prosody: Fix typo, and improve the warning message
Waqas Hussain <waqas20@gmail.com>
parents:
1600
diff
changeset
|
213 for j=1,#m do |
a3ffc27b6207
ejabberdsql2prosody: Fix typo, and improve the warning message
Waqas Hussain <waqas20@gmail.com>
parents:
1600
diff
changeset
|
214 row[m[j]] = row[j]; |
a3ffc27b6207
ejabberdsql2prosody: Fix typo, and improve the warning message
Waqas Hussain <waqas20@gmail.com>
parents:
1600
diff
changeset
|
215 row[j] = nil; |
1592
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
216 end |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
217 end |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
218 end |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
219 end |
1595
9551055b5344
ejabberdsql2prosody: Added support for rosters
Waqas Hussain <waqas20@gmail.com>
parents:
1594
diff
changeset
|
220 --print(serialize(t)); |
1592
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
221 |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
222 for i, row in ipairs(t["users"] or NULL) do |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
223 local node, password = row.username, row.password; |
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
224 local ret, err = dm.store(node, host, "accounts", {password = password}); |
2688
95d665f20c71
ejabberdsql2prosody: Don't print password of imported accounts (thanks azerttyu)
Matthew Wild <mwild1@gmail.com>
parents:
1649
diff
changeset
|
225 print("["..(err or "success").."] accounts: "..node.."@"..host); |
1592
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
226 end |
1595
9551055b5344
ejabberdsql2prosody: Added support for rosters
Waqas Hussain <waqas20@gmail.com>
parents:
1594
diff
changeset
|
227 |
9551055b5344
ejabberdsql2prosody: Added support for rosters
Waqas Hussain <waqas20@gmail.com>
parents:
1594
diff
changeset
|
228 function roster(node, host, jid, item) |
9551055b5344
ejabberdsql2prosody: Added support for rosters
Waqas Hussain <waqas20@gmail.com>
parents:
1594
diff
changeset
|
229 local roster = dm.load(node, host, "roster") or {}; |
9551055b5344
ejabberdsql2prosody: Added support for rosters
Waqas Hussain <waqas20@gmail.com>
parents:
1594
diff
changeset
|
230 roster[jid] = item; |
9551055b5344
ejabberdsql2prosody: Added support for rosters
Waqas Hussain <waqas20@gmail.com>
parents:
1594
diff
changeset
|
231 local ret, err = dm.store(node, host, "roster", roster); |
9551055b5344
ejabberdsql2prosody: Added support for rosters
Waqas Hussain <waqas20@gmail.com>
parents:
1594
diff
changeset
|
232 print("["..(err or "success").."] roster: " ..node.."@"..host.." - "..jid); |
9551055b5344
ejabberdsql2prosody: Added support for rosters
Waqas Hussain <waqas20@gmail.com>
parents:
1594
diff
changeset
|
233 end |
9551055b5344
ejabberdsql2prosody: Added support for rosters
Waqas Hussain <waqas20@gmail.com>
parents:
1594
diff
changeset
|
234 function roster_pending(node, host, jid) |
9551055b5344
ejabberdsql2prosody: Added support for rosters
Waqas Hussain <waqas20@gmail.com>
parents:
1594
diff
changeset
|
235 local roster = dm.load(node, host, "roster") or {}; |
9551055b5344
ejabberdsql2prosody: Added support for rosters
Waqas Hussain <waqas20@gmail.com>
parents:
1594
diff
changeset
|
236 roster.pending = roster.pending or {}; |
9551055b5344
ejabberdsql2prosody: Added support for rosters
Waqas Hussain <waqas20@gmail.com>
parents:
1594
diff
changeset
|
237 roster.pending[jid] = true; |
9551055b5344
ejabberdsql2prosody: Added support for rosters
Waqas Hussain <waqas20@gmail.com>
parents:
1594
diff
changeset
|
238 local ret, err = dm.store(node, host, "roster", roster); |
1596
4fcb2df97141
ejabberdsql2prosody: Fixed: pending-in subscriptions could halt processing
Waqas Hussain <waqas20@gmail.com>
parents:
1595
diff
changeset
|
239 print("["..(err or "success").."] roster-pending: " ..node.."@"..host.." - "..jid); |
1595
9551055b5344
ejabberdsql2prosody: Added support for rosters
Waqas Hussain <waqas20@gmail.com>
parents:
1594
diff
changeset
|
240 end |
9551055b5344
ejabberdsql2prosody: Added support for rosters
Waqas Hussain <waqas20@gmail.com>
parents:
1594
diff
changeset
|
241 function roster_group(node, host, jid, group) |
9551055b5344
ejabberdsql2prosody: Added support for rosters
Waqas Hussain <waqas20@gmail.com>
parents:
1594
diff
changeset
|
242 local roster = dm.load(node, host, "roster") or {}; |
9551055b5344
ejabberdsql2prosody: Added support for rosters
Waqas Hussain <waqas20@gmail.com>
parents:
1594
diff
changeset
|
243 local item = roster[jid]; |
1603
d11606859400
ejabberdsql2prosody: Fixed a nil global access error
Waqas Hussain <waqas20@gmail.com>
parents:
1602
diff
changeset
|
244 if not item then print("Warning: No roster item "..jid.." for user "..node..", can't put in group "..group); return; end |
1595
9551055b5344
ejabberdsql2prosody: Added support for rosters
Waqas Hussain <waqas20@gmail.com>
parents:
1594
diff
changeset
|
245 item.groups[group] = true; |
9551055b5344
ejabberdsql2prosody: Added support for rosters
Waqas Hussain <waqas20@gmail.com>
parents:
1594
diff
changeset
|
246 local ret, err = dm.store(node, host, "roster", roster); |
1596
4fcb2df97141
ejabberdsql2prosody: Fixed: pending-in subscriptions could halt processing
Waqas Hussain <waqas20@gmail.com>
parents:
1595
diff
changeset
|
247 print("["..(err or "success").."] roster-group: " ..node.."@"..host.." - "..jid.." - "..group); |
1592
a7c140fc672b
ejabberdsql2prosody: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
248 end |
1630
cb3d937dd1da
ejabberdsql2prosody: Added support for Private XML Storage
Waqas Hussain <waqas20@gmail.com>
parents:
1629
diff
changeset
|
249 function private_storage(node, host, xmlns, stanza) |
cb3d937dd1da
ejabberdsql2prosody: Added support for Private XML Storage
Waqas Hussain <waqas20@gmail.com>
parents:
1629
diff
changeset
|
250 local private = dm.load(node, host, "private") or {}; |
cb3d937dd1da
ejabberdsql2prosody: Added support for Private XML Storage
Waqas Hussain <waqas20@gmail.com>
parents:
1629
diff
changeset
|
251 private[stanza.name..":"..xmlns] = st.preserialize(stanza); |
cb3d937dd1da
ejabberdsql2prosody: Added support for Private XML Storage
Waqas Hussain <waqas20@gmail.com>
parents:
1629
diff
changeset
|
252 local ret, err = dm.store(node, host, "private", private); |
cb3d937dd1da
ejabberdsql2prosody: Added support for Private XML Storage
Waqas Hussain <waqas20@gmail.com>
parents:
1629
diff
changeset
|
253 print("["..(err or "success").."] private: " ..node.."@"..host.." - "..xmlns); |
cb3d937dd1da
ejabberdsql2prosody: Added support for Private XML Storage
Waqas Hussain <waqas20@gmail.com>
parents:
1629
diff
changeset
|
254 end |
1648
b05371e6f058
ejabberdsql2prosody: Added support for offline messages
Waqas Hussain <waqas20@gmail.com>
parents:
1647
diff
changeset
|
255 function offline_msg(node, host, t, stanza) |
b05371e6f058
ejabberdsql2prosody: Added support for offline messages
Waqas Hussain <waqas20@gmail.com>
parents:
1647
diff
changeset
|
256 stanza.attr.stamp = os.date("!%Y-%m-%dT%H:%M:%SZ", t); |
b05371e6f058
ejabberdsql2prosody: Added support for offline messages
Waqas Hussain <waqas20@gmail.com>
parents:
1647
diff
changeset
|
257 stanza.attr.stamp_legacy = os.date("!%Y%m%dT%H:%M:%S", t); |
b05371e6f058
ejabberdsql2prosody: Added support for offline messages
Waqas Hussain <waqas20@gmail.com>
parents:
1647
diff
changeset
|
258 local ret, err = dm.list_append(node, host, "offline", st.preserialize(stanza)); |
b05371e6f058
ejabberdsql2prosody: Added support for offline messages
Waqas Hussain <waqas20@gmail.com>
parents:
1647
diff
changeset
|
259 print("["..(err or "success").."] offline: " ..node.."@"..host.." - "..os.date("!%Y-%m-%dT%H:%M:%SZ", t)); |
b05371e6f058
ejabberdsql2prosody: Added support for offline messages
Waqas Hussain <waqas20@gmail.com>
parents:
1647
diff
changeset
|
260 end |
1595
9551055b5344
ejabberdsql2prosody: Added support for rosters
Waqas Hussain <waqas20@gmail.com>
parents:
1594
diff
changeset
|
261 for i, row in ipairs(t["rosterusers"] or NULL) do |
9551055b5344
ejabberdsql2prosody: Added support for rosters
Waqas Hussain <waqas20@gmail.com>
parents:
1594
diff
changeset
|
262 local node, contact = row.username, row.jid; |
9551055b5344
ejabberdsql2prosody: Added support for rosters
Waqas Hussain <waqas20@gmail.com>
parents:
1594
diff
changeset
|
263 local name = row.nick; |
9551055b5344
ejabberdsql2prosody: Added support for rosters
Waqas Hussain <waqas20@gmail.com>
parents:
1594
diff
changeset
|
264 if name == "" then name = nil; end |
9551055b5344
ejabberdsql2prosody: Added support for rosters
Waqas Hussain <waqas20@gmail.com>
parents:
1594
diff
changeset
|
265 local subscription = row.subscription; |
9551055b5344
ejabberdsql2prosody: Added support for rosters
Waqas Hussain <waqas20@gmail.com>
parents:
1594
diff
changeset
|
266 if subscription == "N" then |
9551055b5344
ejabberdsql2prosody: Added support for rosters
Waqas Hussain <waqas20@gmail.com>
parents:
1594
diff
changeset
|
267 subscription = "none" |
9551055b5344
ejabberdsql2prosody: Added support for rosters
Waqas Hussain <waqas20@gmail.com>
parents:
1594
diff
changeset
|
268 elseif subscription == "B" then |
9551055b5344
ejabberdsql2prosody: Added support for rosters
Waqas Hussain <waqas20@gmail.com>
parents:
1594
diff
changeset
|
269 subscription = "both" |
9551055b5344
ejabberdsql2prosody: Added support for rosters
Waqas Hussain <waqas20@gmail.com>
parents:
1594
diff
changeset
|
270 elseif subscription == "F" then |
9551055b5344
ejabberdsql2prosody: Added support for rosters
Waqas Hussain <waqas20@gmail.com>
parents:
1594
diff
changeset
|
271 subscription = "from" |
9551055b5344
ejabberdsql2prosody: Added support for rosters
Waqas Hussain <waqas20@gmail.com>
parents:
1594
diff
changeset
|
272 elseif subscription == "T" then |
9551055b5344
ejabberdsql2prosody: Added support for rosters
Waqas Hussain <waqas20@gmail.com>
parents:
1594
diff
changeset
|
273 subscription = "to" |
9551055b5344
ejabberdsql2prosody: Added support for rosters
Waqas Hussain <waqas20@gmail.com>
parents:
1594
diff
changeset
|
274 else error("Unknown subscription type: "..subscription) end; |
9551055b5344
ejabberdsql2prosody: Added support for rosters
Waqas Hussain <waqas20@gmail.com>
parents:
1594
diff
changeset
|
275 local ask = row.ask; |
9551055b5344
ejabberdsql2prosody: Added support for rosters
Waqas Hussain <waqas20@gmail.com>
parents:
1594
diff
changeset
|
276 if ask == "N" then |
9551055b5344
ejabberdsql2prosody: Added support for rosters
Waqas Hussain <waqas20@gmail.com>
parents:
1594
diff
changeset
|
277 ask = nil; |
9551055b5344
ejabberdsql2prosody: Added support for rosters
Waqas Hussain <waqas20@gmail.com>
parents:
1594
diff
changeset
|
278 elseif ask == "O" then |
9551055b5344
ejabberdsql2prosody: Added support for rosters
Waqas Hussain <waqas20@gmail.com>
parents:
1594
diff
changeset
|
279 ask = "subscribe"; |
9551055b5344
ejabberdsql2prosody: Added support for rosters
Waqas Hussain <waqas20@gmail.com>
parents:
1594
diff
changeset
|
280 elseif ask == "I" then |
9551055b5344
ejabberdsql2prosody: Added support for rosters
Waqas Hussain <waqas20@gmail.com>
parents:
1594
diff
changeset
|
281 roster_pending(node, host, contact); |
1597
84328a4df655
ejabberdsql2prosody: Fixed: 'ask' value should be nil for pending-in subscriptions
Waqas Hussain <waqas20@gmail.com>
parents:
1596
diff
changeset
|
282 ask = nil; |
1602
1056369a29df
ejabberdsql2prosody: Add support for rosterusers.ask == "B" (both pending in and out subscriptions)
Waqas Hussain <waqas20@gmail.com>
parents:
1601
diff
changeset
|
283 elseif ask == "B" then |
1056369a29df
ejabberdsql2prosody: Add support for rosterusers.ask == "B" (both pending in and out subscriptions)
Waqas Hussain <waqas20@gmail.com>
parents:
1601
diff
changeset
|
284 roster_pending(node, host, contact); |
1056369a29df
ejabberdsql2prosody: Add support for rosterusers.ask == "B" (both pending in and out subscriptions)
Waqas Hussain <waqas20@gmail.com>
parents:
1601
diff
changeset
|
285 ask = "subscribe"; |
1595
9551055b5344
ejabberdsql2prosody: Added support for rosters
Waqas Hussain <waqas20@gmail.com>
parents:
1594
diff
changeset
|
286 else error("Unknown ask type: "..ask); end |
9551055b5344
ejabberdsql2prosody: Added support for rosters
Waqas Hussain <waqas20@gmail.com>
parents:
1594
diff
changeset
|
287 local item = {name = name, ask = ask, subscription = subscription, groups = {}}; |
9551055b5344
ejabberdsql2prosody: Added support for rosters
Waqas Hussain <waqas20@gmail.com>
parents:
1594
diff
changeset
|
288 roster(node, host, contact, item); |
9551055b5344
ejabberdsql2prosody: Added support for rosters
Waqas Hussain <waqas20@gmail.com>
parents:
1594
diff
changeset
|
289 end |
9551055b5344
ejabberdsql2prosody: Added support for rosters
Waqas Hussain <waqas20@gmail.com>
parents:
1594
diff
changeset
|
290 for i, row in ipairs(t["rostergroups"] or NULL) do |
9551055b5344
ejabberdsql2prosody: Added support for rosters
Waqas Hussain <waqas20@gmail.com>
parents:
1594
diff
changeset
|
291 roster_group(row.username, host, row.jid, row.grp); |
9551055b5344
ejabberdsql2prosody: Added support for rosters
Waqas Hussain <waqas20@gmail.com>
parents:
1594
diff
changeset
|
292 end |
1629
f6af348cf497
ejabberdsql2prosody: Added support for vCards
Waqas Hussain <waqas20@gmail.com>
parents:
1628
diff
changeset
|
293 for i, row in ipairs(t["vcard"] or NULL) do |
5991
a4b4b152a7d6
tools/ejabberdsql2prosody: Skip invalid XML in data, and print out errors.
Waqas Hussain <waqas20@gmail.com>
parents:
5696
diff
changeset
|
294 local stanza, err = parse_xml(row.vcard); |
a4b4b152a7d6
tools/ejabberdsql2prosody: Skip invalid XML in data, and print out errors.
Waqas Hussain <waqas20@gmail.com>
parents:
5696
diff
changeset
|
295 if stanza then |
a4b4b152a7d6
tools/ejabberdsql2prosody: Skip invalid XML in data, and print out errors.
Waqas Hussain <waqas20@gmail.com>
parents:
5696
diff
changeset
|
296 local ret, err = dm.store(row.username, host, "vcard", st.preserialize(stanza)); |
a4b4b152a7d6
tools/ejabberdsql2prosody: Skip invalid XML in data, and print out errors.
Waqas Hussain <waqas20@gmail.com>
parents:
5696
diff
changeset
|
297 print("["..(err or "success").."] vCard: "..row.username.."@"..host); |
a4b4b152a7d6
tools/ejabberdsql2prosody: Skip invalid XML in data, and print out errors.
Waqas Hussain <waqas20@gmail.com>
parents:
5696
diff
changeset
|
298 else |
a4b4b152a7d6
tools/ejabberdsql2prosody: Skip invalid XML in data, and print out errors.
Waqas Hussain <waqas20@gmail.com>
parents:
5696
diff
changeset
|
299 print("[error] vCard XML parse failed: "..row.username.."@"..host); |
a4b4b152a7d6
tools/ejabberdsql2prosody: Skip invalid XML in data, and print out errors.
Waqas Hussain <waqas20@gmail.com>
parents:
5696
diff
changeset
|
300 end |
1629
f6af348cf497
ejabberdsql2prosody: Added support for vCards
Waqas Hussain <waqas20@gmail.com>
parents:
1628
diff
changeset
|
301 end |
1630
cb3d937dd1da
ejabberdsql2prosody: Added support for Private XML Storage
Waqas Hussain <waqas20@gmail.com>
parents:
1629
diff
changeset
|
302 for i, row in ipairs(t["private_storage"] or NULL) do |
5991
a4b4b152a7d6
tools/ejabberdsql2prosody: Skip invalid XML in data, and print out errors.
Waqas Hussain <waqas20@gmail.com>
parents:
5696
diff
changeset
|
303 local stanza, err = parse_xml(row.data); |
a4b4b152a7d6
tools/ejabberdsql2prosody: Skip invalid XML in data, and print out errors.
Waqas Hussain <waqas20@gmail.com>
parents:
5696
diff
changeset
|
304 if stanza then |
a4b4b152a7d6
tools/ejabberdsql2prosody: Skip invalid XML in data, and print out errors.
Waqas Hussain <waqas20@gmail.com>
parents:
5696
diff
changeset
|
305 private_storage(row.username, host, row.namespace, stanza); |
a4b4b152a7d6
tools/ejabberdsql2prosody: Skip invalid XML in data, and print out errors.
Waqas Hussain <waqas20@gmail.com>
parents:
5696
diff
changeset
|
306 else |
a4b4b152a7d6
tools/ejabberdsql2prosody: Skip invalid XML in data, and print out errors.
Waqas Hussain <waqas20@gmail.com>
parents:
5696
diff
changeset
|
307 print("[error] Private XML parse failed: "..row.username.."@"..host); |
a4b4b152a7d6
tools/ejabberdsql2prosody: Skip invalid XML in data, and print out errors.
Waqas Hussain <waqas20@gmail.com>
parents:
5696
diff
changeset
|
308 end |
1630
cb3d937dd1da
ejabberdsql2prosody: Added support for Private XML Storage
Waqas Hussain <waqas20@gmail.com>
parents:
1629
diff
changeset
|
309 end |
1648
b05371e6f058
ejabberdsql2prosody: Added support for offline messages
Waqas Hussain <waqas20@gmail.com>
parents:
1647
diff
changeset
|
310 table.sort(t["spool"] or NULL, function(a,b) return a.seq < b.seq; end); -- sort by sequence number, just in case |
b05371e6f058
ejabberdsql2prosody: Added support for offline messages
Waqas Hussain <waqas20@gmail.com>
parents:
1647
diff
changeset
|
311 local time_offset = os.difftime(os.time(os.date("!*t")), os.time(os.date("*t"))) -- to deal with timezones |
b05371e6f058
ejabberdsql2prosody: Added support for offline messages
Waqas Hussain <waqas20@gmail.com>
parents:
1647
diff
changeset
|
312 local date_parse = function(s) |
b05371e6f058
ejabberdsql2prosody: Added support for offline messages
Waqas Hussain <waqas20@gmail.com>
parents:
1647
diff
changeset
|
313 local year, month, day, hour, min, sec = s:match("(....)-?(..)-?(..)T(..):(..):(..)"); |
b05371e6f058
ejabberdsql2prosody: Added support for offline messages
Waqas Hussain <waqas20@gmail.com>
parents:
1647
diff
changeset
|
314 return os.time({year=year, month=month, day=day, hour=hour, min=min, sec=sec-time_offset}); |
b05371e6f058
ejabberdsql2prosody: Added support for offline messages
Waqas Hussain <waqas20@gmail.com>
parents:
1647
diff
changeset
|
315 end |
b05371e6f058
ejabberdsql2prosody: Added support for offline messages
Waqas Hussain <waqas20@gmail.com>
parents:
1647
diff
changeset
|
316 for i, row in ipairs(t["spool"] or NULL) do |
5991
a4b4b152a7d6
tools/ejabberdsql2prosody: Skip invalid XML in data, and print out errors.
Waqas Hussain <waqas20@gmail.com>
parents:
5696
diff
changeset
|
317 local stanza, err = parse_xml(row.xml); |
a4b4b152a7d6
tools/ejabberdsql2prosody: Skip invalid XML in data, and print out errors.
Waqas Hussain <waqas20@gmail.com>
parents:
5696
diff
changeset
|
318 if stanza then |
a4b4b152a7d6
tools/ejabberdsql2prosody: Skip invalid XML in data, and print out errors.
Waqas Hussain <waqas20@gmail.com>
parents:
5696
diff
changeset
|
319 local last_child = stanza.tags[#stanza.tags]; |
a4b4b152a7d6
tools/ejabberdsql2prosody: Skip invalid XML in data, and print out errors.
Waqas Hussain <waqas20@gmail.com>
parents:
5696
diff
changeset
|
320 if not last_child or last_child ~= stanza[#stanza] then error("Last child of offline message is not a tag"); end |
a4b4b152a7d6
tools/ejabberdsql2prosody: Skip invalid XML in data, and print out errors.
Waqas Hussain <waqas20@gmail.com>
parents:
5696
diff
changeset
|
321 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 |
a4b4b152a7d6
tools/ejabberdsql2prosody: Skip invalid XML in data, and print out errors.
Waqas Hussain <waqas20@gmail.com>
parents:
5696
diff
changeset
|
322 stanza[#stanza], stanza.tags[#stanza.tags] = nil, nil; |
a4b4b152a7d6
tools/ejabberdsql2prosody: Skip invalid XML in data, and print out errors.
Waqas Hussain <waqas20@gmail.com>
parents:
5696
diff
changeset
|
323 local t = date_parse(last_child.attr.stamp); |
a4b4b152a7d6
tools/ejabberdsql2prosody: Skip invalid XML in data, and print out errors.
Waqas Hussain <waqas20@gmail.com>
parents:
5696
diff
changeset
|
324 offline_msg(row.username, host, t, stanza); |
a4b4b152a7d6
tools/ejabberdsql2prosody: Skip invalid XML in data, and print out errors.
Waqas Hussain <waqas20@gmail.com>
parents:
5696
diff
changeset
|
325 else |
a4b4b152a7d6
tools/ejabberdsql2prosody: Skip invalid XML in data, and print out errors.
Waqas Hussain <waqas20@gmail.com>
parents:
5696
diff
changeset
|
326 print("[error] Offline message XML parsing failed: "..row.username.."@"..host); |
a4b4b152a7d6
tools/ejabberdsql2prosody: Skip invalid XML in data, and print out errors.
Waqas Hussain <waqas20@gmail.com>
parents:
5696
diff
changeset
|
327 end |
1648
b05371e6f058
ejabberdsql2prosody: Added support for offline messages
Waqas Hussain <waqas20@gmail.com>
parents:
1647
diff
changeset
|
328 end |