Mercurial > prosody-modules
annotate mod_muc_search/mod_muc_search.lua @ 4838:fd2e48d4ac94
mod_bookmarks2: Advertise XEP-0049 support
In the case mod_private isn’t loaded, some clients (like poezio) won’t even
attempt to use Private XML Storage unless this feature is advertised. This is
on the domain JID and not on the account JID!
author | Emmanuel Gil Peyrot <linkmauve@linkmauve.fr> |
---|---|
date | Sun, 26 Dec 2021 14:51:35 +0100 |
parents | 5f4bcaad18ee |
children |
rev | line source |
---|---|
4137
5f4bcaad18ee
mod_muc_search: Some changes predating version control
Kim Alvefur <zash@zash.se>
parents:
4136
diff
changeset
|
1 -- mod_muc_search |
5f4bcaad18ee
mod_muc_search: Some changes predating version control
Kim Alvefur <zash@zash.se>
parents:
4136
diff
changeset
|
2 -- https://muclumbus.jabbercat.org/docs/api#xmpp |
5f4bcaad18ee
mod_muc_search: Some changes predating version control
Kim Alvefur <zash@zash.se>
parents:
4136
diff
changeset
|
3 -- TODO |
5f4bcaad18ee
mod_muc_search: Some changes predating version control
Kim Alvefur <zash@zash.se>
parents:
4136
diff
changeset
|
4 -- Result set management (pagination, limits) |
5f4bcaad18ee
mod_muc_search: Some changes predating version control
Kim Alvefur <zash@zash.se>
parents:
4136
diff
changeset
|
5 -- Sorting |
5f4bcaad18ee
mod_muc_search: Some changes predating version control
Kim Alvefur <zash@zash.se>
parents:
4136
diff
changeset
|
6 -- min_users |
5f4bcaad18ee
mod_muc_search: Some changes predating version control
Kim Alvefur <zash@zash.se>
parents:
4136
diff
changeset
|
7 |
4136
d2a9aa27169d
mod_muc_search: Implementation of the search.jabber.network XMPP API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
8 local dataforms = require "util.dataforms"; |
d2a9aa27169d
mod_muc_search: Implementation of the search.jabber.network XMPP API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
9 local st = require "util.stanza"; |
d2a9aa27169d
mod_muc_search: Implementation of the search.jabber.network XMPP API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
10 |
d2a9aa27169d
mod_muc_search: Implementation of the search.jabber.network XMPP API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
11 local mod_muc = module:depends("muc"); |
4137
5f4bcaad18ee
mod_muc_search: Some changes predating version control
Kim Alvefur <zash@zash.se>
parents:
4136
diff
changeset
|
12 assert(mod_muc.live_rooms, "Missing required MUC API. Prosody >= hg:f5c43e829d93 required"); |
4136
d2a9aa27169d
mod_muc_search: Implementation of the search.jabber.network XMPP API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
13 |
d2a9aa27169d
mod_muc_search: Implementation of the search.jabber.network XMPP API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
14 local search_form = dataforms.new { |
d2a9aa27169d
mod_muc_search: Implementation of the search.jabber.network XMPP API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
15 { |
d2a9aa27169d
mod_muc_search: Implementation of the search.jabber.network XMPP API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
16 type = "hidden"; |
d2a9aa27169d
mod_muc_search: Implementation of the search.jabber.network XMPP API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
17 value = "https://xmlns.zombofant.net/muclumbus/search/1.0#params"; |
d2a9aa27169d
mod_muc_search: Implementation of the search.jabber.network XMPP API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
18 name = "FORM_TYPE"; |
d2a9aa27169d
mod_muc_search: Implementation of the search.jabber.network XMPP API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
19 }; |
d2a9aa27169d
mod_muc_search: Implementation of the search.jabber.network XMPP API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
20 { |
d2a9aa27169d
mod_muc_search: Implementation of the search.jabber.network XMPP API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
21 type = "text-single"; |
d2a9aa27169d
mod_muc_search: Implementation of the search.jabber.network XMPP API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
22 label = "Search for"; |
d2a9aa27169d
mod_muc_search: Implementation of the search.jabber.network XMPP API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
23 name = "q"; |
d2a9aa27169d
mod_muc_search: Implementation of the search.jabber.network XMPP API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
24 }; |
d2a9aa27169d
mod_muc_search: Implementation of the search.jabber.network XMPP API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
25 { |
d2a9aa27169d
mod_muc_search: Implementation of the search.jabber.network XMPP API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
26 type = "boolean"; |
d2a9aa27169d
mod_muc_search: Implementation of the search.jabber.network XMPP API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
27 value = true; |
d2a9aa27169d
mod_muc_search: Implementation of the search.jabber.network XMPP API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
28 label = "Search in name"; |
d2a9aa27169d
mod_muc_search: Implementation of the search.jabber.network XMPP API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
29 name = "sinname"; |
d2a9aa27169d
mod_muc_search: Implementation of the search.jabber.network XMPP API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
30 }; |
d2a9aa27169d
mod_muc_search: Implementation of the search.jabber.network XMPP API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
31 { |
d2a9aa27169d
mod_muc_search: Implementation of the search.jabber.network XMPP API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
32 type = "boolean"; |
d2a9aa27169d
mod_muc_search: Implementation of the search.jabber.network XMPP API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
33 value = true; |
d2a9aa27169d
mod_muc_search: Implementation of the search.jabber.network XMPP API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
34 label = "Search in description"; |
d2a9aa27169d
mod_muc_search: Implementation of the search.jabber.network XMPP API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
35 name = "sindescription"; |
d2a9aa27169d
mod_muc_search: Implementation of the search.jabber.network XMPP API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
36 }; |
d2a9aa27169d
mod_muc_search: Implementation of the search.jabber.network XMPP API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
37 { |
d2a9aa27169d
mod_muc_search: Implementation of the search.jabber.network XMPP API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
38 type = "boolean"; |
d2a9aa27169d
mod_muc_search: Implementation of the search.jabber.network XMPP API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
39 value = true; |
d2a9aa27169d
mod_muc_search: Implementation of the search.jabber.network XMPP API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
40 label = "Search in address"; |
d2a9aa27169d
mod_muc_search: Implementation of the search.jabber.network XMPP API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
41 name = "sinaddr"; |
d2a9aa27169d
mod_muc_search: Implementation of the search.jabber.network XMPP API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
42 }; |
d2a9aa27169d
mod_muc_search: Implementation of the search.jabber.network XMPP API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
43 { |
d2a9aa27169d
mod_muc_search: Implementation of the search.jabber.network XMPP API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
44 type = "text-single"; |
d2a9aa27169d
mod_muc_search: Implementation of the search.jabber.network XMPP API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
45 value = "1"; |
d2a9aa27169d
mod_muc_search: Implementation of the search.jabber.network XMPP API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
46 label = "Minimum number of users"; |
d2a9aa27169d
mod_muc_search: Implementation of the search.jabber.network XMPP API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
47 name = "min_users"; |
d2a9aa27169d
mod_muc_search: Implementation of the search.jabber.network XMPP API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
48 }; |
d2a9aa27169d
mod_muc_search: Implementation of the search.jabber.network XMPP API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
49 { |
d2a9aa27169d
mod_muc_search: Implementation of the search.jabber.network XMPP API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
50 options = { |
d2a9aa27169d
mod_muc_search: Implementation of the search.jabber.network XMPP API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
51 { |
d2a9aa27169d
mod_muc_search: Implementation of the search.jabber.network XMPP API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
52 label = "Number of online users"; |
d2a9aa27169d
mod_muc_search: Implementation of the search.jabber.network XMPP API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
53 value = "nusers"; |
d2a9aa27169d
mod_muc_search: Implementation of the search.jabber.network XMPP API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
54 }; |
d2a9aa27169d
mod_muc_search: Implementation of the search.jabber.network XMPP API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
55 { |
d2a9aa27169d
mod_muc_search: Implementation of the search.jabber.network XMPP API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
56 label = "Address"; |
d2a9aa27169d
mod_muc_search: Implementation of the search.jabber.network XMPP API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
57 value = "address"; |
d2a9aa27169d
mod_muc_search: Implementation of the search.jabber.network XMPP API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
58 }; |
d2a9aa27169d
mod_muc_search: Implementation of the search.jabber.network XMPP API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
59 }; |
d2a9aa27169d
mod_muc_search: Implementation of the search.jabber.network XMPP API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
60 type = "list-single"; |
d2a9aa27169d
mod_muc_search: Implementation of the search.jabber.network XMPP API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
61 value = "nusers"; |
d2a9aa27169d
mod_muc_search: Implementation of the search.jabber.network XMPP API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
62 label = "Sort results by"; |
d2a9aa27169d
mod_muc_search: Implementation of the search.jabber.network XMPP API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
63 name = "key"; |
d2a9aa27169d
mod_muc_search: Implementation of the search.jabber.network XMPP API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
64 }; |
d2a9aa27169d
mod_muc_search: Implementation of the search.jabber.network XMPP API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
65 }; |
d2a9aa27169d
mod_muc_search: Implementation of the search.jabber.network XMPP API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
66 |
d2a9aa27169d
mod_muc_search: Implementation of the search.jabber.network XMPP API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
67 module:hook("iq-get/host/https://xmlns.zombofant.net/muclumbus/search/1.0:search", function (event) |
d2a9aa27169d
mod_muc_search: Implementation of the search.jabber.network XMPP API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
68 local origin, stanza = event.origin, event.stanza; |
d2a9aa27169d
mod_muc_search: Implementation of the search.jabber.network XMPP API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
69 origin.send(st.reply(stanza) |
d2a9aa27169d
mod_muc_search: Implementation of the search.jabber.network XMPP API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
70 :tag("search", { xmlns = "https://xmlns.zombofant.net/muclumbus/search/1.0" }) |
d2a9aa27169d
mod_muc_search: Implementation of the search.jabber.network XMPP API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
71 :add_child(search_form:form())); |
d2a9aa27169d
mod_muc_search: Implementation of the search.jabber.network XMPP API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
72 return true; |
d2a9aa27169d
mod_muc_search: Implementation of the search.jabber.network XMPP API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
73 end); |
d2a9aa27169d
mod_muc_search: Implementation of the search.jabber.network XMPP API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
74 |
d2a9aa27169d
mod_muc_search: Implementation of the search.jabber.network XMPP API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
75 module:hook("iq-set/host/https://xmlns.zombofant.net/muclumbus/search/1.0:search", function (event) |
d2a9aa27169d
mod_muc_search: Implementation of the search.jabber.network XMPP API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
76 local origin, stanza = event.origin, event.stanza; |
d2a9aa27169d
mod_muc_search: Implementation of the search.jabber.network XMPP API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
77 local search = stanza.tags[1]; |
d2a9aa27169d
mod_muc_search: Implementation of the search.jabber.network XMPP API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
78 local submitted = search:get_child("x", "jabber:x:data"); |
d2a9aa27169d
mod_muc_search: Implementation of the search.jabber.network XMPP API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
79 if not submitted then |
d2a9aa27169d
mod_muc_search: Implementation of the search.jabber.network XMPP API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
80 origin.send(st.error_reply("modify", "bad-request", "Missing dataform")); |
d2a9aa27169d
mod_muc_search: Implementation of the search.jabber.network XMPP API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
81 return; |
d2a9aa27169d
mod_muc_search: Implementation of the search.jabber.network XMPP API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
82 end |
d2a9aa27169d
mod_muc_search: Implementation of the search.jabber.network XMPP API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
83 local query = search_form:data(submitted); |
d2a9aa27169d
mod_muc_search: Implementation of the search.jabber.network XMPP API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
84 module:log("debug", "Got query: %q", query); |
d2a9aa27169d
mod_muc_search: Implementation of the search.jabber.network XMPP API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
85 |
d2a9aa27169d
mod_muc_search: Implementation of the search.jabber.network XMPP API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
86 local result = st.reply(stanza) |
d2a9aa27169d
mod_muc_search: Implementation of the search.jabber.network XMPP API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
87 :tag("result", { xmlns = "https://xmlns.zombofant.net/muclumbus/search/1.0" }); |
d2a9aa27169d
mod_muc_search: Implementation of the search.jabber.network XMPP API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
88 |
4137
5f4bcaad18ee
mod_muc_search: Some changes predating version control
Kim Alvefur <zash@zash.se>
parents:
4136
diff
changeset
|
89 for room in mod_muc.live_rooms() do -- TODO s/live/all/ but preferably along with pagination/rsm |
4136
d2a9aa27169d
mod_muc_search: Implementation of the search.jabber.network XMPP API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
90 if room:get_public() and not room:get_members_only() then |
d2a9aa27169d
mod_muc_search: Implementation of the search.jabber.network XMPP API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
91 module:log("debug", "Looking at room %s %q", room.jid, room._data); |
d2a9aa27169d
mod_muc_search: Implementation of the search.jabber.network XMPP API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
92 if (query.sinname and room:get_name():find(query.q, 1, true)) |
d2a9aa27169d
mod_muc_search: Implementation of the search.jabber.network XMPP API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
93 or (query.sindescription and (room:get_description() or ""):find(query.q, 1, true)) |
d2a9aa27169d
mod_muc_search: Implementation of the search.jabber.network XMPP API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
94 or (query.sinaddr and room.jid:find(query.q, 1, true)) then |
d2a9aa27169d
mod_muc_search: Implementation of the search.jabber.network XMPP API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
95 result:tag("item", { address = room.jid }) |
d2a9aa27169d
mod_muc_search: Implementation of the search.jabber.network XMPP API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
96 :text_tag("name", room:get_name()) |
d2a9aa27169d
mod_muc_search: Implementation of the search.jabber.network XMPP API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
97 :text_tag("description", room:get_description()) |
d2a9aa27169d
mod_muc_search: Implementation of the search.jabber.network XMPP API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
98 :text_tag("language", room:get_language()) |
d2a9aa27169d
mod_muc_search: Implementation of the search.jabber.network XMPP API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
99 :tag("is-open"):up() |
d2a9aa27169d
mod_muc_search: Implementation of the search.jabber.network XMPP API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
100 :up(); |
d2a9aa27169d
mod_muc_search: Implementation of the search.jabber.network XMPP API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
101 end |
d2a9aa27169d
mod_muc_search: Implementation of the search.jabber.network XMPP API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
102 end |
d2a9aa27169d
mod_muc_search: Implementation of the search.jabber.network XMPP API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
103 end |
d2a9aa27169d
mod_muc_search: Implementation of the search.jabber.network XMPP API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
104 origin.send(result); |
d2a9aa27169d
mod_muc_search: Implementation of the search.jabber.network XMPP API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
105 return true; |
d2a9aa27169d
mod_muc_search: Implementation of the search.jabber.network XMPP API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
106 end); |