Mercurial > prosody-modules
annotate mod_vjud/mod_vjud.lua @ 1305:b0971d8815bf
mod_manifesto: Fix typo
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Mon, 17 Feb 2014 12:11:36 +0100 |
parents | b1a92a87309c |
children | 5d49dc72b732 |
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 |