Mercurial > prosody-modules
annotate mod_muc_search/mod_muc_search.lua @ 5416:2393dbae51ed
mod_http_oauth2: Add option for specifying TTL of registered clients
Meant to simplify configuration, since TTL vs ignoring expiration is
expected to be the main thing one would want to configure.
Unsure what the implications of having unlimited lifetime of clients
are, given no way to revoke them currently, short of rotating the
signing secret.
On one hand, it would be annoying to have the client expire.
On the other hand, it is trivial to re-register it.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Thu, 04 May 2023 18:41:33 +0200 |
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); |