annotate mod_vjud/mod_vjud.lua @ 1062:f853a1a3aa15

mod_auth_ccert: Initial commit of authentication module for using CA-issued client certificates
author Kim Alvefur <zash@zash.se>
date Thu, 13 Jun 2013 21:25:12 +0200
parents 4939788a47ea
children b1a92a87309c
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
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