comparison plugins/mod_storage_xep0227.lua @ 12082:e87563fefd85

mod_storage_xep0227: Replace custom tag-removal helpers with :remove_children()
author Matthew Wild <mwild1@gmail.com>
date Mon, 20 Dec 2021 15:39:26 +0000
parents 5e9e75c277a2
children 270047afa6af
comparison
equal deleted inserted replaced
12081:6cc3135138d7 12082:e87563fefd85
1 1
2 local ipairs, pairs = ipairs, pairs; 2 local ipairs, pairs = ipairs, pairs;
3 local setmetatable = setmetatable; 3 local setmetatable = setmetatable;
4 local tostring = tostring; 4 local tostring = tostring;
5 local next, unpack = next, table.unpack or unpack; --luacheck: ignore 113/unpack 5 local next, unpack = next, table.unpack or unpack; --luacheck: ignore 113/unpack
6 local t_remove = table.remove;
7 local os_remove = os.remove; 6 local os_remove = os.remove;
8 local io_open = io.open; 7 local io_open = io.open;
9 local jid_bare = require "util.jid".bare; 8 local jid_bare = require "util.jid".bare;
10 local jid_prep = require "util.jid".prep; 9 local jid_prep = require "util.jid".prep;
11 10
63 end 62 end
64 local function createOuterXml(user, host) 63 local function createOuterXml(user, host)
65 return st.stanza("server-data", {xmlns='urn:xmpp:pie:0'}) 64 return st.stanza("server-data", {xmlns='urn:xmpp:pie:0'})
66 :tag("host", {jid=host}) 65 :tag("host", {jid=host})
67 :tag("user", {name = user}); 66 :tag("user", {name = user});
68 end
69 local function removeFromArray(arr, value)
70 for i,item in ipairs(arr) do
71 if item == value then
72 t_remove(arr, i);
73 return;
74 end
75 end
76 end
77 local function removeStanzaChild(s, child)
78 removeFromArray(s.tags, child);
79 removeFromArray(s, child);
80 end 67 end
81 68
82 local function hex_to_base64(s) 69 local function hex_to_base64(s)
83 return base64.encode(hex.from(s)); 70 return base64.encode(hex.from(s));
84 end 71 end
169 end; 156 end;
170 set = function(self, user, data) 157 set = function(self, user, data)
171 local xml = getXml(user, self.host); 158 local xml = getXml(user, self.host);
172 local usere = xml and getUserElement(xml); 159 local usere = xml and getUserElement(xml);
173 if usere then 160 if usere then
174 local vcard = usere:get_child("vCard", 'vcard-temp'); 161 usere:remove_children("vCard", "vcard-temp");
175 if vcard then 162 if not data then
176 removeStanzaChild(usere, vcard); 163 -- No data to set, old one deleted, success
177 elseif not data then
178 return true; 164 return true;
179 end 165 end
180 if data then 166 local vcard = st.deserialize(data);
181 vcard = st.deserialize(data); 167 usere:add_child(vcard);
182 usere:add_child(vcard);
183 end
184 return setXml(user, self.host, xml); 168 return setXml(user, self.host, xml);
185 end 169 end
186 return true; 170 return true;
187 end; 171 end;
188 }; 172 };
202 end; 186 end;
203 set = function(self, user, data) 187 set = function(self, user, data)
204 local xml = getXml(user, self.host); 188 local xml = getXml(user, self.host);
205 local usere = xml and getUserElement(xml); 189 local usere = xml and getUserElement(xml);
206 if usere then 190 if usere then
207 local private = usere:get_child("query", 'jabber:iq:private'); 191 usere:remove_children("query", "jabber:iq:private");
208 if private then removeStanzaChild(usere, private); end
209 if data and next(data) ~= nil then 192 if data and next(data) ~= nil then
210 private = st.stanza("query", {xmlns='jabber:iq:private'}); 193 local private = st.stanza("query", {xmlns='jabber:iq:private'});
211 for _,tag in pairs(data) do 194 for _,tag in pairs(data) do
212 private:add_child(st.deserialize(tag)); 195 private:add_child(st.deserialize(tag));
213 end 196 end
214 usere:add_child(private); 197 usere:add_child(private);
215 end 198 end
252 end; 235 end;
253 set = function(self, user, data) 236 set = function(self, user, data)
254 local xml = getXml(user, self.host); 237 local xml = getXml(user, self.host);
255 local usere = xml and getUserElement(xml); 238 local usere = xml and getUserElement(xml);
256 if usere then 239 if usere then
257 local roster = usere:get_child("query", 'jabber:iq:roster'); 240 usere:remove_children("query", "jabber:iq:roster");
258 if roster then removeStanzaChild(usere, roster); end
259 usere:maptags(function (tag) 241 usere:maptags(function (tag)
260 if tag.attr.xmlns == "jabber:client" and tag.name == "presence" and tag.attr.type == "subscribe" then 242 if tag.attr.xmlns == "jabber:client" and tag.name == "presence" and tag.attr.type == "subscribe" then
261 return nil; 243 return nil;
262 end 244 end
263 return tag; 245 return tag;
264 end); 246 end);
265 if data and next(data) ~= nil then 247 if data and next(data) ~= nil then
266 roster = st.stanza("query", {xmlns='jabber:iq:roster'}); 248 local roster = st.stanza("query", {xmlns='jabber:iq:roster'});
267 usere:add_child(roster); 249 usere:add_child(roster);
268 for jid, item in pairs(data) do 250 for jid, item in pairs(data) do
269 if jid then 251 if jid then
270 roster:tag("item", { 252 roster:tag("item", {
271 jid = jid, 253 jid = jid,