Mercurial > prosody-modules
annotate mod_muc_search/mod_muc_search.lua @ 4260:c539334dd01a
mod_http_oauth2: Rescope oauth client config into users' storage
This produces client_id of the form owner@host/random and prevents
clients from being deleted by registering an account with the same name
and then deleting the account, as well as having the client
automatically be deleted when the owner account is removed.
On one hand, this leaks the bare JID of the creator to users. On the
other hand, it makes it obvious who made the oauth application.
This module is experimental and only for developers, so this can be
changed if a better method comes up.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Sat, 21 Nov 2020 23:55:10 +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); |