Mercurial > prosody-modules
comparison mod_vjud/mod_vjud.lua @ 789:7e40d6680093
mod_vjud: Allow working as a component, in which case the parent domain is searched.
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Thu, 09 Aug 2012 20:31:13 +0200 |
| parents | cec49ee88c23 |
| children | 3a17fc0127b1 |
comparison
equal
deleted
inserted
replaced
| 788:aeb0999f12fa | 789:7e40d6680093 |
|---|---|
| 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); |
