Sun, 28 Nov 2010 15:02:56 +0500
mod_pep: Remove PEP subscriptions on getting a presence unsubscribe.
2678
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
1 | |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
2 | local st = require "util.stanza"; |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
3 | |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
4 | local function getXml(user, host) |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
5 | local jid = user.."@"..host; |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
6 | local path = "data/"..jid..".xml"; |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
7 | local f = io.open(path); |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
8 | if not f then return; end |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
9 | local s = f:read("*a"); |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
10 | return parse_xml_real(s); |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
11 | end |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
12 | local function setXml(user, host, xml) |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
13 | local jid = user.."@"..host; |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
14 | local path = "data/"..jid..".xml"; |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
15 | if xml then |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
16 | local f = io.open(path, "w"); |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
17 | if not f then return; end |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
18 | local s = tostring(xml); |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
19 | f:write(s); |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
20 | f:close(); |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
21 | return true; |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
22 | else |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
23 | return os.remove(path); |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
24 | end |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
25 | end |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
26 | local function getUserElement(xml) |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
27 | if xml and xml.name == "server-data" then |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
28 | local host = xml.tags[1]; |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
29 | if host and host.name == "host" then |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
30 | local user = host.tags[1]; |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
31 | if user and user.name == "user" then |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
32 | return user; |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
33 | end |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
34 | end |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
35 | end |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
36 | end |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
37 | local function createOuterXml(user, host) |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
38 | return st.stanza("server-data", {xmlns='http://www.xmpp.org/extensions/xep-0227.html#ns'}) |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
39 | :tag("host", {jid=host}) |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
40 | :tag("user", {name = user}); |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
41 | end |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
42 | local function removeFromArray(array, value) |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
43 | for i,item in ipairs(array) do |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
44 | if item == value then |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
45 | table.remove(array, i); |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
46 | return; |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
47 | end |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
48 | end |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
49 | end |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
50 | local function removeStanzaChild(s, child) |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
51 | removeFromArray(s.tags, child); |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
52 | removeFromArray(s, child); |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
53 | end |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
54 | |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
55 | local handlers = {}; |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
56 | |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
57 | handlers.accounts = { |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
58 | get = function(self, user) |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
59 | local user = getUserElement(getXml(user, self.host)); |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
60 | if user and user.attr.password then |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
61 | return { password = user.attr.password }; |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
62 | end |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
63 | end; |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
64 | set = function(self, user, data) |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
65 | if data and data.password then |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
66 | local xml = getXml(user, self.host); |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
67 | if not xml then xml = createOuterXml(user, self.host); end |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
68 | local usere = getUserElement(xml); |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
69 | usere.attr.password = data.password; |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
70 | return setXml(user, self.host, xml); |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
71 | else |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
72 | return setXml(user, self.host, nil); |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
73 | end |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
74 | end; |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
75 | }; |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
76 | handlers.vcard = { |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
77 | get = function(self, user) |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
78 | local user = getUserElement(getXml(user, self.host)); |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
79 | if user then |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
80 | local vcard = user:get_child("vCard", 'vcard-temp'); |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
81 | if vcard then |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
82 | return st.preserialize(vcard); |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
83 | end |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
84 | end |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
85 | end; |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
86 | set = function(self, user, data) |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
87 | local xml = getXml(user, self.host); |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
88 | local usere = xml and getUserElement(xml); |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
89 | if usere then |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
90 | local vcard = usere:get_child("vCard", 'vcard-temp'); |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
91 | if vcard then |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
92 | removeStanzaChild(usere, vcard); |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
93 | elseif not data then |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
94 | return true; |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
95 | end |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
96 | if data then |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
97 | vcard = st.deserialize(data); |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
98 | usere:add_child(vcard); |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
99 | end |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
100 | return setXml(user, self.host, xml); |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
101 | end |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
102 | return true; |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
103 | end; |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
104 | }; |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
105 | handlers.private = { |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
106 | get = function(self, user) |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
107 | local user = getUserElement(getXml(user, self.host)); |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
108 | if user then |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
109 | local private = user:get_child("query", "jabber:iq:private"); |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
110 | if private then |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
111 | local r = {}; |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
112 | for _, tag in ipairs(private.tags) do |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
113 | r[tag.name..":"..tag.attr.xmlns] = st.preserialize(tag); |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
114 | end |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
115 | return r; |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
116 | end |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
117 | end |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
118 | end; |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
119 | set = function(self, user, data) |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
120 | local xml = getXml(user, self.host); |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
121 | local usere = xml and getUserElement(xml); |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
122 | if usere then |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
123 | local private = usere:get_child("query", 'jabber:iq:private'); |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
124 | if private then removeStanzaChild(usere, private); end |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
125 | if data and next(data) ~= nil then |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
126 | private = st.stanza("query", {xmlns='jabber:iq:private'}); |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
127 | for _,tag in pairs(data) do |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
128 | private:add_child(st.deserialize(tag)); |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
129 | end |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
130 | usere:add_child(private); |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
131 | end |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
132 | return setXml(user, self.host, xml); |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
133 | end |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
134 | return true; |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
135 | end; |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
136 | }; |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
137 | |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
138 | ----------------------------- |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
139 | local driver = {}; |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
140 | driver.__index = driver; |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
141 | |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
142 | function driver:open(host, datastore, typ) |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
143 | local cache_key = host.." "..datastore; |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
144 | if self.ds_cache[cache_key] then return self.ds_cache[cache_key]; end |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
145 | local instance = setmetatable({}, self); |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
146 | instance.host = host; |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
147 | instance.datastore = datastore; |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
148 | local handler = handlers[datastore]; |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
149 | if not handler then return nil; end |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
150 | for key,val in pairs(handler) do |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
151 | instance[key] = val; |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
152 | end |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
153 | if instance.init then instance:init(); end |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
154 | self.ds_cache[cache_key] = instance; |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
155 | return instance; |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
156 | end |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
157 | |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
158 | ----------------------------- |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
159 | local _M = {}; |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
160 | |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
161 | function _M.new() |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
162 | local instance = setmetatable({}, driver); |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
163 | instance.__index = instance; |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
164 | instance.ds_cache = {}; |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
165 | return instance; |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
166 | end |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
167 | |
c5882e2e12b5
mod_storage, plus a bit of SQL and XML.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
168 | return _M; |