annotate mod_vjud/mod_vjud.lua @ 1310:2df312eb816d

mod_seclabels: Avoid tracebacks about indexing nil stanza
author Vadim Misbakh-Soloviov <mva@mva.name>
date Wed, 19 Feb 2014 17:59:17 +0700
parents b1a92a87309c
children 5d49dc72b732
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;
880
312602605269 mod_vjud: Do case-insensitive matching
Kim Alvefur <zash@zash.se>
parents: 879
diff changeset
9 local s_lower = string.lower;
312602605269 mod_vjud: Do case-insensitive matching
Kim Alvefur <zash@zash.se>
parents: 879
diff changeset
10 local s_find = string.find;
715
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
11
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
12 local st = require "util.stanza";
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
13 local template = require "util.template";
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
14
1296
b1a92a87309c mod_vjud: Move instructions into a config option
Kim Alvefur <zash@zash.se>
parents: 882
diff changeset
15 local instructions = module:get_option_string("vjud_instructions", "Fill in one or more fields to search for any matching Jabber users.");
b1a92a87309c mod_vjud: Move instructions into a config option
Kim Alvefur <zash@zash.se>
parents: 882
diff changeset
16
715
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
17 local get_reply = template[[
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
18 <query xmlns="jabber:iq:search">
1296
b1a92a87309c mod_vjud: Move instructions into a config option
Kim Alvefur <zash@zash.se>
parents: 882
diff changeset
19 <instructions>{instructions}</instructions>
715
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
20 <first/>
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
21 <last/>
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
22 <nick/>
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
23 <email/>
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
24 </query>
1296
b1a92a87309c mod_vjud: Move instructions into a config option
Kim Alvefur <zash@zash.se>
parents: 882
diff changeset
25 ]].apply({ instructions = instructions });
715
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
26 local item_template = template[[
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
27 <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
28 <first>{first}</first>
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
29 <last>{last}</last>
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
30 <nick>{nick}</nick>
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
31 <email>{email}</email>
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
32 </item>
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
33 ]];
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
34
881
4b06d6c79b15 mod_vjud: Add non-default mode where we search all users
Kim Alvefur <zash@zash.se>
parents: 880
diff changeset
35 local search_mode = module:get_option_string("vjud_mode", "opt-in");
882
4939788a47ea mod_vjud: Disallow searching from remote hosts by default in search-all-users mode
Kim Alvefur <zash@zash.se>
parents: 881
diff changeset
36 local allow_remote = module:get_option_boolean("allow_remote_searches", search_mode ~= "all");
789
7e40d6680093 mod_vjud: Allow working as a component, in which case the parent domain is searched.
Kim Alvefur <zash@zash.se>
parents: 787
diff changeset
37 local base_host = module:get_option_string("vjud_search_domain",
7e40d6680093 mod_vjud: Allow working as a component, in which case the parent domain is searched.
Kim Alvefur <zash@zash.se>
parents: 787
diff changeset
38 module:get_host_type() == "component"
7e40d6680093 mod_vjud: Allow working as a component, in which case the parent domain is searched.
Kim Alvefur <zash@zash.se>
parents: 787
diff changeset
39 and module.host:gsub("^[^.]+%.","")
7e40d6680093 mod_vjud: Allow working as a component, in which case the parent domain is searched.
Kim Alvefur <zash@zash.se>
parents: 787
diff changeset
40 or module.host);
7e40d6680093 mod_vjud: Allow working as a component, in which case the parent domain is searched.
Kim Alvefur <zash@zash.se>
parents: 787
diff changeset
41
7e40d6680093 mod_vjud: Allow working as a component, in which case the parent domain is searched.
Kim Alvefur <zash@zash.se>
parents: 787
diff changeset
42 module:depends"disco";
715
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
43 module:add_feature("jabber:iq:search");
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 local vCard_mt = {
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
46 __index = function(t, k)
734
81de1e446bfe mod_vjud: Don't break on undefined properties.
Kim Alvefur <zash@zash.se>
parents: 733
diff changeset
47 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
48 for i=1,#t do
734
81de1e446bfe mod_vjud: Don't break on undefined properties.
Kim Alvefur <zash@zash.se>
parents: 733
diff changeset
49 local t_i = rawget(t, i);
81de1e446bfe mod_vjud: Don't break on undefined properties.
Kim Alvefur <zash@zash.se>
parents: 733
diff changeset
50 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
51 rawset(t, k, t_i);
81de1e446bfe mod_vjud: Don't break on undefined properties.
Kim Alvefur <zash@zash.se>
parents: 733
diff changeset
52 return t_i;
715
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
53 end
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
54 end
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
55 end
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
56 };
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
57
789
7e40d6680093 mod_vjud: Allow working as a component, in which case the parent domain is searched.
Kim Alvefur <zash@zash.se>
parents: 787
diff changeset
58 local function get_user_vcard(user, host)
7e40d6680093 mod_vjud: Allow working as a component, in which case the parent domain is searched.
Kim Alvefur <zash@zash.se>
parents: 787
diff changeset
59 local vCard = dm_load(user, host or base_host, "vcard");
715
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
60 if vCard then
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
61 vCard = st.deserialize(vCard);
732
317e142fe6f1 mod_vjud: Update util.vcard from verse
Kim Alvefur <zash@zash.se>
parents: 730
diff changeset
62 vCard = vcard.from_xep54(vCard);
715
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
63 return setmetatable(vCard, vCard_mt);
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
64 end
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
65 end
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
66
789
7e40d6680093 mod_vjud: Allow working as a component, in which case the parent domain is searched.
Kim Alvefur <zash@zash.se>
parents: 787
diff changeset
67 local at_host = "@"..base_host;
715
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
68
881
4b06d6c79b15 mod_vjud: Add non-default mode where we search all users
Kim Alvefur <zash@zash.se>
parents: 880
diff changeset
69 local users; -- The user iterator
4b06d6c79b15 mod_vjud: Add non-default mode where we search all users
Kim Alvefur <zash@zash.se>
parents: 880
diff changeset
70
715
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
71 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
72 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
73
882
4939788a47ea mod_vjud: Disallow searching from remote hosts by default in search-all-users mode
Kim Alvefur <zash@zash.se>
parents: 881
diff changeset
74 if not (allow_remote or origin.type == "c2s") then
4939788a47ea mod_vjud: Disallow searching from remote hosts by default in search-all-users mode
Kim Alvefur <zash@zash.se>
parents: 881
diff changeset
75 origin.send(st.error_reply(stanza, "cancel", "not-allowed"))
4939788a47ea mod_vjud: Disallow searching from remote hosts by default in search-all-users mode
Kim Alvefur <zash@zash.se>
parents: 881
diff changeset
76 return true;
4939788a47ea mod_vjud: Disallow searching from remote hosts by default in search-all-users mode
Kim Alvefur <zash@zash.se>
parents: 881
diff changeset
77 end
4939788a47ea mod_vjud: Disallow searching from remote hosts by default in search-all-users mode
Kim Alvefur <zash@zash.se>
parents: 881
diff changeset
78
715
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
79 if stanza.attr.type == "get" then
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
80 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
81 else -- type == "set"
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
82 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
83 local first, last, nick, email =
879
3a17fc0127b1 mod_vjud: Enforce minimal length of search parameters
Kim Alvefur <zash@zash.se>
parents: 789
diff changeset
84 s_lower(query:get_child_text"first" or ""),
3a17fc0127b1 mod_vjud: Enforce minimal length of search parameters
Kim Alvefur <zash@zash.se>
parents: 789
diff changeset
85 s_lower(query:get_child_text"last" or ""),
3a17fc0127b1 mod_vjud: Enforce minimal length of search parameters
Kim Alvefur <zash@zash.se>
parents: 789
diff changeset
86 s_lower(query:get_child_text"nick" or ""),
3a17fc0127b1 mod_vjud: Enforce minimal length of search parameters
Kim Alvefur <zash@zash.se>
parents: 789
diff changeset
87 s_lower(query:get_child_text"email" or "");
730
274bb1a96122 mod_vjud: Missing fields should not match everyone. (Thanks Pidgin)
Kim Alvefur <zash@zash.se>
parents: 715
diff changeset
88
879
3a17fc0127b1 mod_vjud: Enforce minimal length of search parameters
Kim Alvefur <zash@zash.se>
parents: 789
diff changeset
89 first = #first >= 2 and first;
3a17fc0127b1 mod_vjud: Enforce minimal length of search parameters
Kim Alvefur <zash@zash.se>
parents: 789
diff changeset
90 last = #last >= 2 and last;
3a17fc0127b1 mod_vjud: Enforce minimal length of search parameters
Kim Alvefur <zash@zash.se>
parents: 789
diff changeset
91 nick = #nick >= 2 and nick;
3a17fc0127b1 mod_vjud: Enforce minimal length of search parameters
Kim Alvefur <zash@zash.se>
parents: 789
diff changeset
92 email = #email >= 2 and email;
730
274bb1a96122 mod_vjud: Missing fields should not match everyone. (Thanks Pidgin)
Kim Alvefur <zash@zash.se>
parents: 715
diff changeset
93 if not ( first or last or nick or email ) then
879
3a17fc0127b1 mod_vjud: Enforce minimal length of search parameters
Kim Alvefur <zash@zash.se>
parents: 789
diff changeset
94 origin.send(st.error_reply(stanza, "modify", "not-acceptable", "All fields were empty or too short"));
730
274bb1a96122 mod_vjud: Missing fields should not match everyone. (Thanks Pidgin)
Kim Alvefur <zash@zash.se>
parents: 715
diff changeset
95 return true;
274bb1a96122 mod_vjud: Missing fields should not match everyone. (Thanks Pidgin)
Kim Alvefur <zash@zash.se>
parents: 715
diff changeset
96 end
274bb1a96122 mod_vjud: Missing fields should not match everyone. (Thanks Pidgin)
Kim Alvefur <zash@zash.se>
parents: 715
diff changeset
97
715
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
98 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
99
715
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
100 local username, hostname = jid_split(email);
789
7e40d6680093 mod_vjud: Allow working as a component, in which case the parent domain is searched.
Kim Alvefur <zash@zash.se>
parents: 787
diff changeset
101 if hostname == base_host and username and usermanager.user_exists(username, hostname) then
715
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
102 local vCard = get_user_vcard(username);
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
103 if vCard then
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
104 reply:add_child(item_template.apply{
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
105 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
106 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
107 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
108 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
109 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
110 });
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
111 end
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
112 else
881
4b06d6c79b15 mod_vjud: Add non-default mode where we search all users
Kim Alvefur <zash@zash.se>
parents: 880
diff changeset
113 for username in users() do
715
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
114 local vCard = get_user_vcard(username);
880
312602605269 mod_vjud: Do case-insensitive matching
Kim Alvefur <zash@zash.se>
parents: 879
diff changeset
115 if vCard
312602605269 mod_vjud: Do case-insensitive matching
Kim Alvefur <zash@zash.se>
parents: 879
diff changeset
116 and ((first and vCard.N and s_find(s_lower(vCard.N[2]), first, nil, true))
312602605269 mod_vjud: Do case-insensitive matching
Kim Alvefur <zash@zash.se>
parents: 879
diff changeset
117 or (last and vCard.N and s_find(s_lower(vCard.N[1]), last, nil, true))
312602605269 mod_vjud: Do case-insensitive matching
Kim Alvefur <zash@zash.se>
parents: 879
diff changeset
118 or (nick and vCard.NICKNAME and s_find(s_lower(vCard.NICKNAME[1]), nick, nil, true))
312602605269 mod_vjud: Do case-insensitive matching
Kim Alvefur <zash@zash.se>
parents: 879
diff changeset
119 or (email and vCard.EMAIL and s_find(s_lower(vCard.EMAIL[1]), email, nil, true))) then
715
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
120 reply:add_child(item_template.apply{
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
121 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
122 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
123 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
124 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
125 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
126 });
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
127 end
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 end
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
130 origin.send(reply);
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
131 end
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
132 return true;
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
133 end);
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
134
881
4b06d6c79b15 mod_vjud: Add non-default mode where we search all users
Kim Alvefur <zash@zash.se>
parents: 880
diff changeset
135 if search_mode == "all" then
4b06d6c79b15 mod_vjud: Add non-default mode where we search all users
Kim Alvefur <zash@zash.se>
parents: 880
diff changeset
136 function users()
4b06d6c79b15 mod_vjud: Add non-default mode where we search all users
Kim Alvefur <zash@zash.se>
parents: 880
diff changeset
137 return usermanager.users(base_host);
4b06d6c79b15 mod_vjud: Add non-default mode where we search all users
Kim Alvefur <zash@zash.se>
parents: 880
diff changeset
138 end
4b06d6c79b15 mod_vjud: Add non-default mode where we search all users
Kim Alvefur <zash@zash.se>
parents: 880
diff changeset
139 else -- if "opt-in", default
4b06d6c79b15 mod_vjud: Add non-default mode where we search all users
Kim Alvefur <zash@zash.se>
parents: 880
diff changeset
140 local opted_in;
4b06d6c79b15 mod_vjud: Add non-default mode where we search all users
Kim Alvefur <zash@zash.se>
parents: 880
diff changeset
141 function module.load()
4b06d6c79b15 mod_vjud: Add non-default mode where we search all users
Kim Alvefur <zash@zash.se>
parents: 880
diff changeset
142 opted_in = dm_load(nil, module.host, "user_index") or {};
4b06d6c79b15 mod_vjud: Add non-default mode where we search all users
Kim Alvefur <zash@zash.se>
parents: 880
diff changeset
143 end
4b06d6c79b15 mod_vjud: Add non-default mode where we search all users
Kim Alvefur <zash@zash.se>
parents: 880
diff changeset
144 function module.unload()
4b06d6c79b15 mod_vjud: Add non-default mode where we search all users
Kim Alvefur <zash@zash.se>
parents: 880
diff changeset
145 dm_store(nil, module.host, "user_index", opted_in);
4b06d6c79b15 mod_vjud: Add non-default mode where we search all users
Kim Alvefur <zash@zash.se>
parents: 880
diff changeset
146 end
4b06d6c79b15 mod_vjud: Add non-default mode where we search all users
Kim Alvefur <zash@zash.se>
parents: 880
diff changeset
147 function users()
4b06d6c79b15 mod_vjud: Add non-default mode where we search all users
Kim Alvefur <zash@zash.se>
parents: 880
diff changeset
148 return pairs(opted_in);
4b06d6c79b15 mod_vjud: Add non-default mode where we search all users
Kim Alvefur <zash@zash.se>
parents: 880
diff changeset
149 end
4b06d6c79b15 mod_vjud: Add non-default mode where we search all users
Kim Alvefur <zash@zash.se>
parents: 880
diff changeset
150 local opt_in_layout = dataforms_new{
4b06d6c79b15 mod_vjud: Add non-default mode where we search all users
Kim Alvefur <zash@zash.se>
parents: 880
diff changeset
151 title = "Search settings";
4b06d6c79b15 mod_vjud: Add non-default mode where we search all users
Kim Alvefur <zash@zash.se>
parents: 880
diff changeset
152 instructions = "Do you want to appear in search results?";
4b06d6c79b15 mod_vjud: Add non-default mode where we search all users
Kim Alvefur <zash@zash.se>
parents: 880
diff changeset
153 {
4b06d6c79b15 mod_vjud: Add non-default mode where we search all users
Kim Alvefur <zash@zash.se>
parents: 880
diff changeset
154 name = "searchable",
4b06d6c79b15 mod_vjud: Add non-default mode where we search all users
Kim Alvefur <zash@zash.se>
parents: 880
diff changeset
155 label = "Appear in search results?",
4b06d6c79b15 mod_vjud: Add non-default mode where we search all users
Kim Alvefur <zash@zash.se>
parents: 880
diff changeset
156 type = "boolean",
4b06d6c79b15 mod_vjud: Add non-default mode where we search all users
Kim Alvefur <zash@zash.se>
parents: 880
diff changeset
157 },
4b06d6c79b15 mod_vjud: Add non-default mode where we search all users
Kim Alvefur <zash@zash.se>
parents: 880
diff changeset
158 };
4b06d6c79b15 mod_vjud: Add non-default mode where we search all users
Kim Alvefur <zash@zash.se>
parents: 880
diff changeset
159 local function opt_in_handler(self, data, state)
4b06d6c79b15 mod_vjud: Add non-default mode where we search all users
Kim Alvefur <zash@zash.se>
parents: 880
diff changeset
160 local username, hostname = jid_split(data.from);
4b06d6c79b15 mod_vjud: Add non-default mode where we search all users
Kim Alvefur <zash@zash.se>
parents: 880
diff changeset
161 if state then -- the second return value
4b06d6c79b15 mod_vjud: Add non-default mode where we search all users
Kim Alvefur <zash@zash.se>
parents: 880
diff changeset
162 if data.action == "cancel" then
4b06d6c79b15 mod_vjud: Add non-default mode where we search all users
Kim Alvefur <zash@zash.se>
parents: 880
diff changeset
163 return { status = "canceled" };
4b06d6c79b15 mod_vjud: Add non-default mode where we search all users
Kim Alvefur <zash@zash.se>
parents: 880
diff changeset
164 end
715
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
165
881
4b06d6c79b15 mod_vjud: Add non-default mode where we search all users
Kim Alvefur <zash@zash.se>
parents: 880
diff changeset
166 if not username or not hostname or hostname ~= base_host then
4b06d6c79b15 mod_vjud: Add non-default mode where we search all users
Kim Alvefur <zash@zash.se>
parents: 880
diff changeset
167 return { status = "error", error = { type = "cancel",
4b06d6c79b15 mod_vjud: Add non-default mode where we search all users
Kim Alvefur <zash@zash.se>
parents: 880
diff changeset
168 condition = "forbidden", message = "Invalid user or hostname." } };
4b06d6c79b15 mod_vjud: Add non-default mode where we search all users
Kim Alvefur <zash@zash.se>
parents: 880
diff changeset
169 end
715
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
170
881
4b06d6c79b15 mod_vjud: Add non-default mode where we search all users
Kim Alvefur <zash@zash.se>
parents: 880
diff changeset
171 local fields = opt_in_layout:data(data.form);
4b06d6c79b15 mod_vjud: Add non-default mode where we search all users
Kim Alvefur <zash@zash.se>
parents: 880
diff changeset
172 opted_in[username] = fields.searchable or nil
4b06d6c79b15 mod_vjud: Add non-default mode where we search all users
Kim Alvefur <zash@zash.se>
parents: 880
diff changeset
173
4b06d6c79b15 mod_vjud: Add non-default mode where we search all users
Kim Alvefur <zash@zash.se>
parents: 880
diff changeset
174 return { status = "completed" }
4b06d6c79b15 mod_vjud: Add non-default mode where we search all users
Kim Alvefur <zash@zash.se>
parents: 880
diff changeset
175 else -- No state, send the form.
4b06d6c79b15 mod_vjud: Add non-default mode where we search all users
Kim Alvefur <zash@zash.se>
parents: 880
diff changeset
176 return { status = "executing", actions = { "complete" },
787
cec49ee88c23 mod_vjud: Correctly pass current state to form (Thanks Florob)
Kim Alvefur <zash@zash.se>
parents: 742
diff changeset
177 form = { layout = opt_in_layout, values = { searchable = opted_in[username] } } }, true;
881
4b06d6c79b15 mod_vjud: Add non-default mode where we search all users
Kim Alvefur <zash@zash.se>
parents: 880
diff changeset
178 end
715
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
179 end
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
180
881
4b06d6c79b15 mod_vjud: Add non-default mode where we search all users
Kim Alvefur <zash@zash.se>
parents: 880
diff changeset
181 local adhoc_new = module:require "adhoc".new;
4b06d6c79b15 mod_vjud: Add non-default mode where we search all users
Kim Alvefur <zash@zash.se>
parents: 880
diff changeset
182 local adhoc_vjudsetup = adhoc_new("Search settings", "vjudsetup", opt_in_handler);--, "self");-- and nil);
4b06d6c79b15 mod_vjud: Add non-default mode where we search all users
Kim Alvefur <zash@zash.se>
parents: 880
diff changeset
183 module:depends"adhoc";
4b06d6c79b15 mod_vjud: Add non-default mode where we search all users
Kim Alvefur <zash@zash.se>
parents: 880
diff changeset
184 module:provides("adhoc", adhoc_vjudsetup);
715
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
185
881
4b06d6c79b15 mod_vjud: Add non-default mode where we search all users
Kim Alvefur <zash@zash.se>
parents: 880
diff changeset
186 end