clix/export.lua

Wed, 01 Dec 2021 17:25:25 +0100

author
Kim Alvefur <zash@zash.se>
date
Wed, 01 Dec 2021 17:25:25 +0100
changeset 164
fafdcde2e2eb
parent 60
1537dabc5df8
child 168
75e8ca131178
permissions
-rw-r--r--

clix: Import Verse where needed

In the olden days of `module()` this would have been a global, but that
is no longer the convention nor the case.

164
fafdcde2e2eb clix: Import Verse where needed
Kim Alvefur <zash@zash.se>
parents: 60
diff changeset
1 local verse = require "verse";
50
e5cdd8e93e05 clix.export: XEP-0227 format account exporter
Kim Alvefur <zash@zash.se>
parents:
diff changeset
2 short_opts.i = "interactive";
e5cdd8e93e05 clix.export: XEP-0227 format account exporter
Kim Alvefur <zash@zash.se>
parents:
diff changeset
3 local split_jid = require "util.jid".split;
e5cdd8e93e05 clix.export: XEP-0227 format account exporter
Kim Alvefur <zash@zash.se>
parents:
diff changeset
4 local timer = require "util.timer";
e5cdd8e93e05 clix.export: XEP-0227 format account exporter
Kim Alvefur <zash@zash.se>
parents:
diff changeset
5
e5cdd8e93e05 clix.export: XEP-0227 format account exporter
Kim Alvefur <zash@zash.se>
parents:
diff changeset
6 local xmlns_pie = "urn:xmpp:pie:0";
e5cdd8e93e05 clix.export: XEP-0227 format account exporter
Kim Alvefur <zash@zash.se>
parents:
diff changeset
7 local xmlns_nodes = {
e5cdd8e93e05 clix.export: XEP-0227 format account exporter
Kim Alvefur <zash@zash.se>
parents:
diff changeset
8 { "query", "jabber:iq:roster" },
e5cdd8e93e05 clix.export: XEP-0227 format account exporter
Kim Alvefur <zash@zash.se>
parents:
diff changeset
9 { "query", "jabber:iq:privacy" },
e5cdd8e93e05 clix.export: XEP-0227 format account exporter
Kim Alvefur <zash@zash.se>
parents:
diff changeset
10 { "vCard", "vcard-temp" },
e5cdd8e93e05 clix.export: XEP-0227 format account exporter
Kim Alvefur <zash@zash.se>
parents:
diff changeset
11 }
e5cdd8e93e05 clix.export: XEP-0227 format account exporter
Kim Alvefur <zash@zash.se>
parents:
diff changeset
12 local xmlns_private = "jabber:iq:private";
e5cdd8e93e05 clix.export: XEP-0227 format account exporter
Kim Alvefur <zash@zash.se>
parents:
diff changeset
13 local xmlns_private_nodes = {
e5cdd8e93e05 clix.export: XEP-0227 format account exporter
Kim Alvefur <zash@zash.se>
parents:
diff changeset
14 { "storage", "storage:bookmarks" },
e5cdd8e93e05 clix.export: XEP-0227 format account exporter
Kim Alvefur <zash@zash.se>
parents:
diff changeset
15 }
e5cdd8e93e05 clix.export: XEP-0227 format account exporter
Kim Alvefur <zash@zash.se>
parents:
diff changeset
16
e5cdd8e93e05 clix.export: XEP-0227 format account exporter
Kim Alvefur <zash@zash.se>
parents:
diff changeset
17 local function on_connect(conn)
e5cdd8e93e05 clix.export: XEP-0227 format account exporter
Kim Alvefur <zash@zash.se>
parents:
diff changeset
18 local export = verse.stanza("server-data", { xmlns = xmlns_pie })
e5cdd8e93e05 clix.export: XEP-0227 format account exporter
Kim Alvefur <zash@zash.se>
parents:
diff changeset
19 :tag("host", { jid = conn.host })
e5cdd8e93e05 clix.export: XEP-0227 format account exporter
Kim Alvefur <zash@zash.se>
parents:
diff changeset
20 :tag("user", { name = conn.username, password = conn.password });
e5cdd8e93e05 clix.export: XEP-0227 format account exporter
Kim Alvefur <zash@zash.se>
parents:
diff changeset
21 local out = 0;
e5cdd8e93e05 clix.export: XEP-0227 format account exporter
Kim Alvefur <zash@zash.se>
parents:
diff changeset
22
e5cdd8e93e05 clix.export: XEP-0227 format account exporter
Kim Alvefur <zash@zash.se>
parents:
diff changeset
23 for i = 1,#xmlns_nodes do
e5cdd8e93e05 clix.export: XEP-0227 format account exporter
Kim Alvefur <zash@zash.se>
parents:
diff changeset
24 out = out + 1;
e5cdd8e93e05 clix.export: XEP-0227 format account exporter
Kim Alvefur <zash@zash.se>
parents:
diff changeset
25 local node = xmlns_nodes[i];
53
bfc53225a38f clix.export: Use verses debug()
Kim Alvefur <zash@zash.se>
parents: 50
diff changeset
26 conn:debug("requesting %s*%s", node[2], node[1]);
50
e5cdd8e93e05 clix.export: XEP-0227 format account exporter
Kim Alvefur <zash@zash.se>
parents:
diff changeset
27 conn:send_iq(verse.iq{type="get"}
e5cdd8e93e05 clix.export: XEP-0227 format account exporter
Kim Alvefur <zash@zash.se>
parents:
diff changeset
28 :tag(node[1], { xmlns = node[2] })
e5cdd8e93e05 clix.export: XEP-0227 format account exporter
Kim Alvefur <zash@zash.se>
parents:
diff changeset
29 , function(stanza)
53
bfc53225a38f clix.export: Use verses debug()
Kim Alvefur <zash@zash.se>
parents: 50
diff changeset
30 conn:debug("got %s*%s", node[2], node[1]);
50
e5cdd8e93e05 clix.export: XEP-0227 format account exporter
Kim Alvefur <zash@zash.se>
parents:
diff changeset
31 local query = stanza:get_child(node[1], node[2]);
e5cdd8e93e05 clix.export: XEP-0227 format account exporter
Kim Alvefur <zash@zash.se>
parents:
diff changeset
32 if query then
54
1c589502da76 clix.export: Remove unneeded up()
Kim Alvefur <zash@zash.se>
parents: 53
diff changeset
33 export:add_child(query);
50
e5cdd8e93e05 clix.export: XEP-0227 format account exporter
Kim Alvefur <zash@zash.se>
parents:
diff changeset
34 end
e5cdd8e93e05 clix.export: XEP-0227 format account exporter
Kim Alvefur <zash@zash.se>
parents:
diff changeset
35 out = out - 1;
e5cdd8e93e05 clix.export: XEP-0227 format account exporter
Kim Alvefur <zash@zash.se>
parents:
diff changeset
36 end);
e5cdd8e93e05 clix.export: XEP-0227 format account exporter
Kim Alvefur <zash@zash.se>
parents:
diff changeset
37 end
e5cdd8e93e05 clix.export: XEP-0227 format account exporter
Kim Alvefur <zash@zash.se>
parents:
diff changeset
38
e5cdd8e93e05 clix.export: XEP-0227 format account exporter
Kim Alvefur <zash@zash.se>
parents:
diff changeset
39 for i = 1,#xmlns_private_nodes do
e5cdd8e93e05 clix.export: XEP-0227 format account exporter
Kim Alvefur <zash@zash.se>
parents:
diff changeset
40 out = out + 1;
e5cdd8e93e05 clix.export: XEP-0227 format account exporter
Kim Alvefur <zash@zash.se>
parents:
diff changeset
41 local node = xmlns_private_nodes[i];
53
bfc53225a38f clix.export: Use verses debug()
Kim Alvefur <zash@zash.se>
parents: 50
diff changeset
42 conn:debug("requesting private node %s*%s", node[2], node[1]);
50
e5cdd8e93e05 clix.export: XEP-0227 format account exporter
Kim Alvefur <zash@zash.se>
parents:
diff changeset
43 conn:send_iq(verse.iq{type="get"}
e5cdd8e93e05 clix.export: XEP-0227 format account exporter
Kim Alvefur <zash@zash.se>
parents:
diff changeset
44 :tag("query", { xmlns = xmlns_private })
e5cdd8e93e05 clix.export: XEP-0227 format account exporter
Kim Alvefur <zash@zash.se>
parents:
diff changeset
45 :tag(node[1], { xmlns = node[2] })
e5cdd8e93e05 clix.export: XEP-0227 format account exporter
Kim Alvefur <zash@zash.se>
parents:
diff changeset
46 , function(stanza)
53
bfc53225a38f clix.export: Use verses debug()
Kim Alvefur <zash@zash.se>
parents: 50
diff changeset
47 conn:debug("got private %s*%s", node[2], node[1]);
50
e5cdd8e93e05 clix.export: XEP-0227 format account exporter
Kim Alvefur <zash@zash.se>
parents:
diff changeset
48 local query = stanza:get_child("query", xmlns_private);
60
1537dabc5df8 clix.export: Don't add empty iq:private nodes.
Kim Alvefur <zash@zash.se>
parents: 55
diff changeset
49 if query and #query > 0 then
55
a3f86df6f359 clix.export: Remove another up()
Kim Alvefur <zash@zash.se>
parents: 54
diff changeset
50 export:add_child(query);
50
e5cdd8e93e05 clix.export: XEP-0227 format account exporter
Kim Alvefur <zash@zash.se>
parents:
diff changeset
51 end
e5cdd8e93e05 clix.export: XEP-0227 format account exporter
Kim Alvefur <zash@zash.se>
parents:
diff changeset
52 out = out - 1;
e5cdd8e93e05 clix.export: XEP-0227 format account exporter
Kim Alvefur <zash@zash.se>
parents:
diff changeset
53 end);
e5cdd8e93e05 clix.export: XEP-0227 format account exporter
Kim Alvefur <zash@zash.se>
parents:
diff changeset
54 end
e5cdd8e93e05 clix.export: XEP-0227 format account exporter
Kim Alvefur <zash@zash.se>
parents:
diff changeset
55
e5cdd8e93e05 clix.export: XEP-0227 format account exporter
Kim Alvefur <zash@zash.se>
parents:
diff changeset
56 timer.add_task(1, function ()
e5cdd8e93e05 clix.export: XEP-0227 format account exporter
Kim Alvefur <zash@zash.se>
parents:
diff changeset
57 if out > 0 then
e5cdd8e93e05 clix.export: XEP-0227 format account exporter
Kim Alvefur <zash@zash.se>
parents:
diff changeset
58 return 1
e5cdd8e93e05 clix.export: XEP-0227 format account exporter
Kim Alvefur <zash@zash.se>
parents:
diff changeset
59 end
e5cdd8e93e05 clix.export: XEP-0227 format account exporter
Kim Alvefur <zash@zash.se>
parents:
diff changeset
60 print("<?xml version='1.0' encoding='UTF-8'?>");
e5cdd8e93e05 clix.export: XEP-0227 format account exporter
Kim Alvefur <zash@zash.se>
parents:
diff changeset
61 print(export);
e5cdd8e93e05 clix.export: XEP-0227 format account exporter
Kim Alvefur <zash@zash.se>
parents:
diff changeset
62 conn:close();
e5cdd8e93e05 clix.export: XEP-0227 format account exporter
Kim Alvefur <zash@zash.se>
parents:
diff changeset
63 end)
e5cdd8e93e05 clix.export: XEP-0227 format account exporter
Kim Alvefur <zash@zash.se>
parents:
diff changeset
64 end
e5cdd8e93e05 clix.export: XEP-0227 format account exporter
Kim Alvefur <zash@zash.se>
parents:
diff changeset
65
e5cdd8e93e05 clix.export: XEP-0227 format account exporter
Kim Alvefur <zash@zash.se>
parents:
diff changeset
66 return function (opts, arg)
e5cdd8e93e05 clix.export: XEP-0227 format account exporter
Kim Alvefur <zash@zash.se>
parents:
diff changeset
67 if opts.short_help then
e5cdd8e93e05 clix.export: XEP-0227 format account exporter
Kim Alvefur <zash@zash.se>
parents:
diff changeset
68 print("Export your account");
e5cdd8e93e05 clix.export: XEP-0227 format account exporter
Kim Alvefur <zash@zash.se>
parents:
diff changeset
69 return;
e5cdd8e93e05 clix.export: XEP-0227 format account exporter
Kim Alvefur <zash@zash.se>
parents:
diff changeset
70 end
e5cdd8e93e05 clix.export: XEP-0227 format account exporter
Kim Alvefur <zash@zash.se>
parents:
diff changeset
71 if opts.help then
e5cdd8e93e05 clix.export: XEP-0227 format account exporter
Kim Alvefur <zash@zash.se>
parents:
diff changeset
72 return 0;
e5cdd8e93e05 clix.export: XEP-0227 format account exporter
Kim Alvefur <zash@zash.se>
parents:
diff changeset
73 end
e5cdd8e93e05 clix.export: XEP-0227 format account exporter
Kim Alvefur <zash@zash.se>
parents:
diff changeset
74 clix_connect(opts, on_connect);
e5cdd8e93e05 clix.export: XEP-0227 format account exporter
Kim Alvefur <zash@zash.se>
parents:
diff changeset
75 end
e5cdd8e93e05 clix.export: XEP-0227 format account exporter
Kim Alvefur <zash@zash.se>
parents:
diff changeset
76

mercurial