annotate mod_vjud/mod_vjud.lua @ 737:e4ea03b060ed

mod_archive: switch from/to The XEP-0136 is not very explicit about the meening of <from> and <to> elements, but the examples are clear: <from> means it comes from the user in the 'with' attribute of the collection. That is the opposite of what is currently implemented in that module. So for better compatibility with complient clients, this switch the 'from' and 'to' fields
author Olivier Goffart <ogoffart@woboq.com>
date Wed, 04 Jul 2012 14:08:43 +0200
parents 81de1e446bfe
children da8f561d79b4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
715
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
1 local dm_load = require "util.datamanager".load;
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
2 local dm_store = require "util.datamanager".store;
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
3
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
4 local usermanager = require "core.usermanager";
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
5 local dataforms_new = require "util.dataforms".new;
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
6 local jid_split = require "util.jid".prepped_split;
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
7 local vcard = module:require "vcard";
734
81de1e446bfe mod_vjud: Don't break on undefined properties.
Kim Alvefur <zash@zash.se>
parents: 733
diff changeset
8 local rawget, rawset = rawget, rawset;
715
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
9
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
10 local st = require "util.stanza";
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
11 local template = require "util.template";
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
12
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
13 local get_reply = template[[
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
14 <query xmlns="jabber:iq:search">
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
15 <instructions>Fill in one or more fields to search for any matching Jabber users.</instructions>
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
16 <first/>
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
17 <last/>
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
18 <nick/>
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
19 <email/>
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
20 </query>
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
21 ]].apply({});
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
22 local item_template = template[[
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
23 <item xmlns="jabber:iq:search" jid="{jid}">
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
24 <first>{first}</first>
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
25 <last>{last}</last>
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
26 <nick>{nick}</nick>
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
27 <email>{email}</email>
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
28 </item>
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
29 ]];
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
30
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
31 module:add_feature("jabber:iq:search");
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
32
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
33 local opted_in;
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
34 function module.load()
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
35 opted_in = dm_load(nil, module.host, "user_index") or {};
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
36 end
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
37 function module.unload()
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
38 dm_store(nil, module.host, "user_index", opted_in);
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
39 end
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
40
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
41 local opt_in_layout = dataforms_new{
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
42 title = "Search settings";
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
43 instructions = "Do you want to appear in search results?";
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
44 {
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
45 name = "searchable",
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
46 label = "Appear in search results?",
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
47 type = "boolean",
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
48 },
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
49 };
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
50 local vCard_mt = {
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
51 __index = function(t, k)
734
81de1e446bfe mod_vjud: Don't break on undefined properties.
Kim Alvefur <zash@zash.se>
parents: 733
diff changeset
52 if type(k) ~= "string" then return nil end
715
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
53 for i=1,#t do
734
81de1e446bfe mod_vjud: Don't break on undefined properties.
Kim Alvefur <zash@zash.se>
parents: 733
diff changeset
54 local t_i = rawget(t, i);
81de1e446bfe mod_vjud: Don't break on undefined properties.
Kim Alvefur <zash@zash.se>
parents: 733
diff changeset
55 if t_i and t_i.name == k then
81de1e446bfe mod_vjud: Don't break on undefined properties.
Kim Alvefur <zash@zash.se>
parents: 733
diff changeset
56 rawset(t, k, t_i);
81de1e446bfe mod_vjud: Don't break on undefined properties.
Kim Alvefur <zash@zash.se>
parents: 733
diff changeset
57 return t_i;
715
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
58 end
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
59 end
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
60 end
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
61 };
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
62
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
63 local function get_user_vcard(user)
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
64 local vCard = dm_load(user, module.host, "vcard");
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
65 if vCard then
734
81de1e446bfe mod_vjud: Don't break on undefined properties.
Kim Alvefur <zash@zash.se>
parents: 733
diff changeset
66 module:log("warn", require"util.serialization".serialize(vCard));
715
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
67 vCard = st.deserialize(vCard);
734
81de1e446bfe mod_vjud: Don't break on undefined properties.
Kim Alvefur <zash@zash.se>
parents: 733
diff changeset
68 module:log("warn", require"util.serialization".serialize(vCard));
732
317e142fe6f1 mod_vjud: Update util.vcard from verse
Kim Alvefur <zash@zash.se>
parents: 730
diff changeset
69 vCard = vcard.from_xep54(vCard);
734
81de1e446bfe mod_vjud: Don't break on undefined properties.
Kim Alvefur <zash@zash.se>
parents: 733
diff changeset
70 module:log("warn", require"util.serialization".serialize(vCard));
715
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
71 return setmetatable(vCard, vCard_mt);
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
72 end
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
73 end
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
74
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
75 local at_host = "@"..module.host;
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
76
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
77 module:hook("iq/host/jabber:iq:search:query", function(event)
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
78 local origin, stanza = event.origin, event.stanza;
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
79
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
80 if stanza.attr.type == "get" then
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
81 origin.send(st.reply(stanza):add_child(get_reply));
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
82 else -- type == "set"
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
83 local query = stanza.tags[1];
730
274bb1a96122 mod_vjud: Missing fields should not match everyone. (Thanks Pidgin)
Kim Alvefur <zash@zash.se>
parents: 715
diff changeset
84 local first, last, nick, email =
274bb1a96122 mod_vjud: Missing fields should not match everyone. (Thanks Pidgin)
Kim Alvefur <zash@zash.se>
parents: 715
diff changeset
85 (query:get_child_text"first" or false),
274bb1a96122 mod_vjud: Missing fields should not match everyone. (Thanks Pidgin)
Kim Alvefur <zash@zash.se>
parents: 715
diff changeset
86 (query:get_child_text"last" or false),
274bb1a96122 mod_vjud: Missing fields should not match everyone. (Thanks Pidgin)
Kim Alvefur <zash@zash.se>
parents: 715
diff changeset
87 (query:get_child_text"nick" or false),
274bb1a96122 mod_vjud: Missing fields should not match everyone. (Thanks Pidgin)
Kim Alvefur <zash@zash.se>
parents: 715
diff changeset
88 (query:get_child_text"email" or false);
274bb1a96122 mod_vjud: Missing fields should not match everyone. (Thanks Pidgin)
Kim Alvefur <zash@zash.se>
parents: 715
diff changeset
89
274bb1a96122 mod_vjud: Missing fields should not match everyone. (Thanks Pidgin)
Kim Alvefur <zash@zash.se>
parents: 715
diff changeset
90 if not ( first or last or nick or email ) then
274bb1a96122 mod_vjud: Missing fields should not match everyone. (Thanks Pidgin)
Kim Alvefur <zash@zash.se>
parents: 715
diff changeset
91 origin.send(st.error_reply(stanza, "modify", "not-acceptable", "All fields were empty"));
274bb1a96122 mod_vjud: Missing fields should not match everyone. (Thanks Pidgin)
Kim Alvefur <zash@zash.se>
parents: 715
diff changeset
92 return true;
274bb1a96122 mod_vjud: Missing fields should not match everyone. (Thanks Pidgin)
Kim Alvefur <zash@zash.se>
parents: 715
diff changeset
93 end
274bb1a96122 mod_vjud: Missing fields should not match everyone. (Thanks Pidgin)
Kim Alvefur <zash@zash.se>
parents: 715
diff changeset
94
715
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
95 local reply = st.reply(stanza):query("jabber:iq:search");
730
274bb1a96122 mod_vjud: Missing fields should not match everyone. (Thanks Pidgin)
Kim Alvefur <zash@zash.se>
parents: 715
diff changeset
96
715
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
97 local username, hostname = jid_split(email);
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
98 if hostname == module.host and username and usermanager.user_exists(username, hostname) then
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
99 local vCard = get_user_vcard(username);
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
100 if vCard then
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
101 reply:add_child(item_template.apply{
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
102 jid = username..at_host;
733
dd3b30c0dc8a mod_vjud: Switch first and last name in results to be correct.
Kim Alvefur <zash@zash.se>
parents: 732
diff changeset
103 first = vCard.N and vCard.N[2] or nil;
dd3b30c0dc8a mod_vjud: Switch first and last name in results to be correct.
Kim Alvefur <zash@zash.se>
parents: 732
diff changeset
104 last = vCard.N and vCard.N[1] or nil;
715
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
105 nick = vCard.NICKNAME and vCard.NICKNAME[1] or username;
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
106 email = vCard.EMAIL and vCard.EMAIL[1] or nil;
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
107 });
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
108 end
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
109 else
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
110 for username in pairs(opted_in) do
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
111 local vCard = get_user_vcard(username);
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
112 if vCard and (
730
274bb1a96122 mod_vjud: Missing fields should not match everyone. (Thanks Pidgin)
Kim Alvefur <zash@zash.se>
parents: 715
diff changeset
113 (vCard.N and vCard.N[2] == first) or
274bb1a96122 mod_vjud: Missing fields should not match everyone. (Thanks Pidgin)
Kim Alvefur <zash@zash.se>
parents: 715
diff changeset
114 (vCard.N and vCard.N[1] == last) or
274bb1a96122 mod_vjud: Missing fields should not match everyone. (Thanks Pidgin)
Kim Alvefur <zash@zash.se>
parents: 715
diff changeset
115 (vCard.NICKNAME and vCard.NICKNAME[1] == nick) or
274bb1a96122 mod_vjud: Missing fields should not match everyone. (Thanks Pidgin)
Kim Alvefur <zash@zash.se>
parents: 715
diff changeset
116 (vCard.EMAIL and vCard.EMAIL[1] == email)) then
715
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
117 reply:add_child(item_template.apply{
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
118 jid = username..at_host;
733
dd3b30c0dc8a mod_vjud: Switch first and last name in results to be correct.
Kim Alvefur <zash@zash.se>
parents: 732
diff changeset
119 first = vCard.N and vCard.N[2] or nil;
dd3b30c0dc8a mod_vjud: Switch first and last name in results to be correct.
Kim Alvefur <zash@zash.se>
parents: 732
diff changeset
120 last = vCard.N and vCard.N[1] or nil;
715
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
121 nick = vCard.NICKNAME and vCard.NICKNAME[1] or username;
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
122 email = vCard.EMAIL and vCard.EMAIL[1] or nil;
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
123 });
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
124 end
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
125 end
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
126 end
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
127 origin.send(reply);
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
128 end
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
129 return true;
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
130 end);
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
131
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
132 local function opt_in_handler(self, data, state)
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
133 local username, hostname = jid_split(data.from);
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
134 if state then -- the second return value
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
135 if data.action == "cancel" then
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
136 return { status = "canceled" };
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
137 end
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
138
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
139 if not username or not hostname or hostname ~= module.host then
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
140 return { status = "error", error = { type = "cancel",
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
141 condition = "forbidden", message = "Invalid user or hostname." } };
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
142 end
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
143
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
144 local fields = opt_in_layout:data(data.form);
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
145 opted_in[username] = fields.searchable or nil
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
146
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
147 return { status = "completed" }
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
148 else -- No state, send the form.
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
149 return { status = "executing", actions = { "complete" },
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
150 form = { layout = opt_in_layout, data = { searchable = opted_in[username] } } }, true;
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
151 end
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
152 end
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
153
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
154 local adhoc_new = module:require "adhoc".new;
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
155 local adhoc_vjudsetup = adhoc_new("Search settings", "vjudsetup", opt_in_handler);--, "self");-- and nil);
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
156 module:depends"adhoc";
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
157 module:provides("adhoc", adhoc_vjudsetup);
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
158