equal
deleted
inserted
replaced
26 <nick>{nick}</nick> |
26 <nick>{nick}</nick> |
27 <email>{email}</email> |
27 <email>{email}</email> |
28 </item> |
28 </item> |
29 ]]; |
29 ]]; |
30 |
30 |
|
31 local base_host = module:get_option_string("vjud_search_domain", |
|
32 module:get_host_type() == "component" |
|
33 and module.host:gsub("^[^.]+%.","") |
|
34 or module.host); |
|
35 |
|
36 module:depends"disco"; |
31 module:add_feature("jabber:iq:search"); |
37 module:add_feature("jabber:iq:search"); |
32 |
38 |
33 local opted_in; |
39 local opted_in; |
34 function module.load() |
40 function module.load() |
35 opted_in = dm_load(nil, module.host, "user_index") or {}; |
41 opted_in = dm_load(nil, module.host, "user_index") or {}; |
58 end |
64 end |
59 end |
65 end |
60 end |
66 end |
61 }; |
67 }; |
62 |
68 |
63 local function get_user_vcard(user) |
69 local function get_user_vcard(user, host) |
64 local vCard = dm_load(user, module.host, "vcard"); |
70 local vCard = dm_load(user, host or base_host, "vcard"); |
65 if vCard then |
71 if vCard then |
66 vCard = st.deserialize(vCard); |
72 vCard = st.deserialize(vCard); |
67 vCard = vcard.from_xep54(vCard); |
73 vCard = vcard.from_xep54(vCard); |
68 return setmetatable(vCard, vCard_mt); |
74 return setmetatable(vCard, vCard_mt); |
69 end |
75 end |
70 end |
76 end |
71 |
77 |
72 local at_host = "@"..module.host; |
78 local at_host = "@"..base_host; |
73 |
79 |
74 module:hook("iq/host/jabber:iq:search:query", function(event) |
80 module:hook("iq/host/jabber:iq:search:query", function(event) |
75 local origin, stanza = event.origin, event.stanza; |
81 local origin, stanza = event.origin, event.stanza; |
76 |
82 |
77 if stanza.attr.type == "get" then |
83 if stanza.attr.type == "get" then |
90 end |
96 end |
91 |
97 |
92 local reply = st.reply(stanza):query("jabber:iq:search"); |
98 local reply = st.reply(stanza):query("jabber:iq:search"); |
93 |
99 |
94 local username, hostname = jid_split(email); |
100 local username, hostname = jid_split(email); |
95 if hostname == module.host and username and usermanager.user_exists(username, hostname) then |
101 if hostname == base_host and username and usermanager.user_exists(username, hostname) then |
96 local vCard = get_user_vcard(username); |
102 local vCard = get_user_vcard(username); |
97 if vCard then |
103 if vCard then |
98 reply:add_child(item_template.apply{ |
104 reply:add_child(item_template.apply{ |
99 jid = username..at_host; |
105 jid = username..at_host; |
100 first = vCard.N and vCard.N[2] or nil; |
106 first = vCard.N and vCard.N[2] or nil; |
131 if state then -- the second return value |
137 if state then -- the second return value |
132 if data.action == "cancel" then |
138 if data.action == "cancel" then |
133 return { status = "canceled" }; |
139 return { status = "canceled" }; |
134 end |
140 end |
135 |
141 |
136 if not username or not hostname or hostname ~= module.host then |
142 if not username or not hostname or hostname ~= base_host then |
137 return { status = "error", error = { type = "cancel", |
143 return { status = "error", error = { type = "cancel", |
138 condition = "forbidden", message = "Invalid user or hostname." } }; |
144 condition = "forbidden", message = "Invalid user or hostname." } }; |
139 end |
145 end |
140 |
146 |
141 local fields = opt_in_layout:data(data.form); |
147 local fields = opt_in_layout:data(data.form); |