Mercurial > prosody-modules
annotate mod_vjud/mod_vjud.lua @ 1268:854a3933cfcd
mod_muc_log_http: URL-encode room names. This allows special characters in room names to work. Ideally this escaping shouldn’t be done in the user visible content, but the module’s template system doesn’t currently allow that.
author | Waqas Hussain <waqas20@gmail.com> |
---|---|
date | Sat, 04 Jan 2014 16:50:57 -0500 |
parents | 4939788a47ea |
children | b1a92a87309c |
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 |
b1268d3aa6ce
mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
15 local get_reply = template[[ |
b1268d3aa6ce
mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
16 <query xmlns="jabber:iq:search"> |
b1268d3aa6ce
mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
17 <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
|
18 <first/> |
b1268d3aa6ce
mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
19 <last/> |
b1268d3aa6ce
mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
20 <nick/> |
b1268d3aa6ce
mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
21 <email/> |
b1268d3aa6ce
mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
22 </query> |
b1268d3aa6ce
mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
23 ]].apply({}); |
b1268d3aa6ce
mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
24 local item_template = template[[ |
b1268d3aa6ce
mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
25 <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
|
26 <first>{first}</first> |
b1268d3aa6ce
mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
27 <last>{last}</last> |
b1268d3aa6ce
mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
28 <nick>{nick}</nick> |
b1268d3aa6ce
mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
29 <email>{email}</email> |
b1268d3aa6ce
mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
30 </item> |
b1268d3aa6ce
mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
31 ]]; |
b1268d3aa6ce
mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
32 |
881
4b06d6c79b15
mod_vjud: Add non-default mode where we search all users
Kim Alvefur <zash@zash.se>
parents:
880
diff
changeset
|
33 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
|
34 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
|
35 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
|
36 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
|
37 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
|
38 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
|
39 |
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 module:depends"disco"; |
715
b1268d3aa6ce
mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
41 module:add_feature("jabber:iq:search"); |
b1268d3aa6ce
mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
42 |
b1268d3aa6ce
mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
43 local vCard_mt = { |
b1268d3aa6ce
mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
44 __index = function(t, k) |
734
81de1e446bfe
mod_vjud: Don't break on undefined properties.
Kim Alvefur <zash@zash.se>
parents:
733
diff
changeset
|
45 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
|
46 for i=1,#t do |
734
81de1e446bfe
mod_vjud: Don't break on undefined properties.
Kim Alvefur <zash@zash.se>
parents:
733
diff
changeset
|
47 local t_i = rawget(t, i); |
81de1e446bfe
mod_vjud: Don't break on undefined properties.
Kim Alvefur <zash@zash.se>
parents:
733
diff
changeset
|
48 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
|
49 rawset(t, k, t_i); |
81de1e446bfe
mod_vjud: Don't break on undefined properties.
Kim Alvefur <zash@zash.se>
parents:
733
diff
changeset
|
50 return t_i; |
715
b1268d3aa6ce
mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
51 end |
b1268d3aa6ce
mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
52 end |
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 }; |
b1268d3aa6ce
mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
55 |
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
|
56 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
|
57 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
|
58 if vCard then |
b1268d3aa6ce
mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
59 vCard = st.deserialize(vCard); |
732
317e142fe6f1
mod_vjud: Update util.vcard from verse
Kim Alvefur <zash@zash.se>
parents:
730
diff
changeset
|
60 vCard = vcard.from_xep54(vCard); |
715
b1268d3aa6ce
mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
61 return setmetatable(vCard, vCard_mt); |
b1268d3aa6ce
mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
62 end |
b1268d3aa6ce
mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
63 end |
b1268d3aa6ce
mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
64 |
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
|
65 local at_host = "@"..base_host; |
715
b1268d3aa6ce
mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
66 |
881
4b06d6c79b15
mod_vjud: Add non-default mode where we search all users
Kim Alvefur <zash@zash.se>
parents:
880
diff
changeset
|
67 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
|
68 |
715
b1268d3aa6ce
mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
69 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
|
70 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
|
71 |
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
|
72 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
|
73 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
|
74 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
|
75 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
|
76 |
715
b1268d3aa6ce
mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
77 if stanza.attr.type == "get" then |
b1268d3aa6ce
mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
78 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
|
79 else -- type == "set" |
b1268d3aa6ce
mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
80 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
|
81 local first, last, nick, email = |
879
3a17fc0127b1
mod_vjud: Enforce minimal length of search parameters
Kim Alvefur <zash@zash.se>
parents:
789
diff
changeset
|
82 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
|
83 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
|
84 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
|
85 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
|
86 |
879
3a17fc0127b1
mod_vjud: Enforce minimal length of search parameters
Kim Alvefur <zash@zash.se>
parents:
789
diff
changeset
|
87 first = #first >= 2 and first; |
3a17fc0127b1
mod_vjud: Enforce minimal length of search parameters
Kim Alvefur <zash@zash.se>
parents:
789
diff
changeset
|
88 last = #last >= 2 and last; |
3a17fc0127b1
mod_vjud: Enforce minimal length of search parameters
Kim Alvefur <zash@zash.se>
parents:
789
diff
changeset
|
89 nick = #nick >= 2 and nick; |
3a17fc0127b1
mod_vjud: Enforce minimal length of search parameters
Kim Alvefur <zash@zash.se>
parents:
789
diff
changeset
|
90 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
|
91 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
|
92 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
|
93 return true; |
274bb1a96122
mod_vjud: Missing fields should not match everyone. (Thanks Pidgin)
Kim Alvefur <zash@zash.se>
parents:
715
diff
changeset
|
94 end |
274bb1a96122
mod_vjud: Missing fields should not match everyone. (Thanks Pidgin)
Kim Alvefur <zash@zash.se>
parents:
715
diff
changeset
|
95 |
715
b1268d3aa6ce
mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
96 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
|
97 |
715
b1268d3aa6ce
mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
98 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
|
99 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
|
100 local vCard = get_user_vcard(username); |
b1268d3aa6ce
mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
101 if vCard then |
b1268d3aa6ce
mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
102 reply:add_child(item_template.apply{ |
b1268d3aa6ce
mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
103 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
|
104 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
|
105 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
|
106 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
|
107 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
|
108 }); |
b1268d3aa6ce
mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
109 end |
b1268d3aa6ce
mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
110 else |
881
4b06d6c79b15
mod_vjud: Add non-default mode where we search all users
Kim Alvefur <zash@zash.se>
parents:
880
diff
changeset
|
111 for username in users() do |
715
b1268d3aa6ce
mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
112 local vCard = get_user_vcard(username); |
880
312602605269
mod_vjud: Do case-insensitive matching
Kim Alvefur <zash@zash.se>
parents:
879
diff
changeset
|
113 if vCard |
312602605269
mod_vjud: Do case-insensitive matching
Kim Alvefur <zash@zash.se>
parents:
879
diff
changeset
|
114 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
|
115 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
|
116 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
|
117 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
|
118 reply:add_child(item_template.apply{ |
b1268d3aa6ce
mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
119 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
|
120 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
|
121 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
|
122 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
|
123 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
|
124 }); |
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 end |
b1268d3aa6ce
mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
128 origin.send(reply); |
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 return true; |
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 |
881
4b06d6c79b15
mod_vjud: Add non-default mode where we search all users
Kim Alvefur <zash@zash.se>
parents:
880
diff
changeset
|
133 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
|
134 function users() |
4b06d6c79b15
mod_vjud: Add non-default mode where we search all users
Kim Alvefur <zash@zash.se>
parents:
880
diff
changeset
|
135 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
|
136 end |
4b06d6c79b15
mod_vjud: Add non-default mode where we search all users
Kim Alvefur <zash@zash.se>
parents:
880
diff
changeset
|
137 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
|
138 local opted_in; |
4b06d6c79b15
mod_vjud: Add non-default mode where we search all users
Kim Alvefur <zash@zash.se>
parents:
880
diff
changeset
|
139 function module.load() |
4b06d6c79b15
mod_vjud: Add non-default mode where we search all users
Kim Alvefur <zash@zash.se>
parents:
880
diff
changeset
|
140 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
|
141 end |
4b06d6c79b15
mod_vjud: Add non-default mode where we search all users
Kim Alvefur <zash@zash.se>
parents:
880
diff
changeset
|
142 function module.unload() |
4b06d6c79b15
mod_vjud: Add non-default mode where we search all users
Kim Alvefur <zash@zash.se>
parents:
880
diff
changeset
|
143 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
|
144 end |
4b06d6c79b15
mod_vjud: Add non-default mode where we search all users
Kim Alvefur <zash@zash.se>
parents:
880
diff
changeset
|
145 function users() |
4b06d6c79b15
mod_vjud: Add non-default mode where we search all users
Kim Alvefur <zash@zash.se>
parents:
880
diff
changeset
|
146 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
|
147 end |
4b06d6c79b15
mod_vjud: Add non-default mode where we search all users
Kim Alvefur <zash@zash.se>
parents:
880
diff
changeset
|
148 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
|
149 title = "Search settings"; |
4b06d6c79b15
mod_vjud: Add non-default mode where we search all users
Kim Alvefur <zash@zash.se>
parents:
880
diff
changeset
|
150 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
|
151 { |
4b06d6c79b15
mod_vjud: Add non-default mode where we search all users
Kim Alvefur <zash@zash.se>
parents:
880
diff
changeset
|
152 name = "searchable", |
4b06d6c79b15
mod_vjud: Add non-default mode where we search all users
Kim Alvefur <zash@zash.se>
parents:
880
diff
changeset
|
153 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
|
154 type = "boolean", |
4b06d6c79b15
mod_vjud: Add non-default mode where we search all users
Kim Alvefur <zash@zash.se>
parents:
880
diff
changeset
|
155 }, |
4b06d6c79b15
mod_vjud: Add non-default mode where we search all users
Kim Alvefur <zash@zash.se>
parents:
880
diff
changeset
|
156 }; |
4b06d6c79b15
mod_vjud: Add non-default mode where we search all users
Kim Alvefur <zash@zash.se>
parents:
880
diff
changeset
|
157 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
|
158 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
|
159 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
|
160 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
|
161 return { status = "canceled" }; |
4b06d6c79b15
mod_vjud: Add non-default mode where we search all users
Kim Alvefur <zash@zash.se>
parents:
880
diff
changeset
|
162 end |
715
b1268d3aa6ce
mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
163 |
881
4b06d6c79b15
mod_vjud: Add non-default mode where we search all users
Kim Alvefur <zash@zash.se>
parents:
880
diff
changeset
|
164 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
|
165 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
|
166 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
|
167 end |
715
b1268d3aa6ce
mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
168 |
881
4b06d6c79b15
mod_vjud: Add non-default mode where we search all users
Kim Alvefur <zash@zash.se>
parents:
880
diff
changeset
|
169 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
|
170 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
|
171 |
4b06d6c79b15
mod_vjud: Add non-default mode where we search all users
Kim Alvefur <zash@zash.se>
parents:
880
diff
changeset
|
172 return { status = "completed" } |
4b06d6c79b15
mod_vjud: Add non-default mode where we search all users
Kim Alvefur <zash@zash.se>
parents:
880
diff
changeset
|
173 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
|
174 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
|
175 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
|
176 end |
715
b1268d3aa6ce
mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
177 end |
b1268d3aa6ce
mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
178 |
881
4b06d6c79b15
mod_vjud: Add non-default mode where we search all users
Kim Alvefur <zash@zash.se>
parents:
880
diff
changeset
|
179 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
|
180 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
|
181 module:depends"adhoc"; |
4b06d6c79b15
mod_vjud: Add non-default mode where we search all users
Kim Alvefur <zash@zash.se>
parents:
880
diff
changeset
|
182 module:provides("adhoc", adhoc_vjudsetup); |
715
b1268d3aa6ce
mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
183 |
881
4b06d6c79b15
mod_vjud: Add non-default mode where we search all users
Kim Alvefur <zash@zash.se>
parents:
880
diff
changeset
|
184 end |