Mercurial > prosody-modules
annotate mod_muc_hide_media/mod_muc_hide_media.lua @ 5516:f25df3af02c1
mod_client_management: Include client software version number in listing
Should you ever wish to revoke a client by version number, e.g. for
security reasons affecting certain versions, then it would be good to at
the very least see which version is used.
Also includes the OAuth2 software ID, an optional unique identifier that
should be the same for all installations of a particular software.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Sat, 03 Jun 2023 19:21:39 +0200 |
parents | 9084588c73ae |
children |
rev | line source |
---|---|
3681
d267e381255f
mod_muc_hide_media: Module to allow hiding inline media in a MUC
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1 module:depends"muc"; |
d267e381255f
mod_muc_hide_media: Module to allow hiding inline media in a MUC
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2 |
d267e381255f
mod_muc_hide_media: Module to allow hiding inline media in a MUC
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
3 local hide_by_default = not module:get_option_boolean("muc_room_default_hide_media", false); |
d267e381255f
mod_muc_hide_media: Module to allow hiding inline media in a MUC
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
4 |
d267e381255f
mod_muc_hide_media: Module to allow hiding inline media in a MUC
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5 local function should_hide_media(room) |
d267e381255f
mod_muc_hide_media: Module to allow hiding inline media in a MUC
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
6 local hide_media = room._data.hide_media; |
d267e381255f
mod_muc_hide_media: Module to allow hiding inline media in a MUC
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
7 if hide_media == nil then |
d267e381255f
mod_muc_hide_media: Module to allow hiding inline media in a MUC
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
8 hide_media = hide_by_default; |
d267e381255f
mod_muc_hide_media: Module to allow hiding inline media in a MUC
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
9 end |
d267e381255f
mod_muc_hide_media: Module to allow hiding inline media in a MUC
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
10 return hide_media; |
d267e381255f
mod_muc_hide_media: Module to allow hiding inline media in a MUC
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
11 end |
d267e381255f
mod_muc_hide_media: Module to allow hiding inline media in a MUC
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
12 |
d267e381255f
mod_muc_hide_media: Module to allow hiding inline media in a MUC
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
13 module:hook("muc-config-form", function(event) |
d267e381255f
mod_muc_hide_media: Module to allow hiding inline media in a MUC
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
14 local room, form = event.room, event.form; |
d267e381255f
mod_muc_hide_media: Module to allow hiding inline media in a MUC
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
15 table.insert(form, { |
d267e381255f
mod_muc_hide_media: Module to allow hiding inline media in a MUC
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
16 name = "{xmpp:prosody.im}muc#roomconfig_display_media", |
d267e381255f
mod_muc_hide_media: Module to allow hiding inline media in a MUC
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
17 type = "boolean", |
d267e381255f
mod_muc_hide_media: Module to allow hiding inline media in a MUC
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
18 label = "Display inline media (images, etc.)", |
d267e381255f
mod_muc_hide_media: Module to allow hiding inline media in a MUC
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
19 value = not should_hide_media(room), |
d267e381255f
mod_muc_hide_media: Module to allow hiding inline media in a MUC
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
20 }); |
d267e381255f
mod_muc_hide_media: Module to allow hiding inline media in a MUC
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
21 end); |
d267e381255f
mod_muc_hide_media: Module to allow hiding inline media in a MUC
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
22 |
d267e381255f
mod_muc_hide_media: Module to allow hiding inline media in a MUC
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
23 module:hook("muc-config-submitted", function(event) |
d267e381255f
mod_muc_hide_media: Module to allow hiding inline media in a MUC
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
24 local room, fields, changed = event.room, event.fields, event.changed; |
d267e381255f
mod_muc_hide_media: Module to allow hiding inline media in a MUC
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
25 local new_hide_media = not fields["{xmpp:prosody.im}muc#roomconfig_display_media"]; |
d267e381255f
mod_muc_hide_media: Module to allow hiding inline media in a MUC
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
26 if new_hide_media ~= should_hide_media(room) then |
d267e381255f
mod_muc_hide_media: Module to allow hiding inline media in a MUC
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
27 if new_hide_media == hide_by_default(room) then |
d267e381255f
mod_muc_hide_media: Module to allow hiding inline media in a MUC
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
28 room._data.hide_media = nil; |
d267e381255f
mod_muc_hide_media: Module to allow hiding inline media in a MUC
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
29 else |
d267e381255f
mod_muc_hide_media: Module to allow hiding inline media in a MUC
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
30 room._data.hide_media = new_hide_media; |
d267e381255f
mod_muc_hide_media: Module to allow hiding inline media in a MUC
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
31 end |
d267e381255f
mod_muc_hide_media: Module to allow hiding inline media in a MUC
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
32 if type(changed) == "table" then |
d267e381255f
mod_muc_hide_media: Module to allow hiding inline media in a MUC
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
33 changed["{xmpp:prosody.im}muc#roomconfig_display_media"] = true; |
d267e381255f
mod_muc_hide_media: Module to allow hiding inline media in a MUC
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
34 else |
d267e381255f
mod_muc_hide_media: Module to allow hiding inline media in a MUC
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
35 event.changed = true; |
d267e381255f
mod_muc_hide_media: Module to allow hiding inline media in a MUC
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
36 end |
d267e381255f
mod_muc_hide_media: Module to allow hiding inline media in a MUC
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
37 end |
d267e381255f
mod_muc_hide_media: Module to allow hiding inline media in a MUC
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
38 end); |
d267e381255f
mod_muc_hide_media: Module to allow hiding inline media in a MUC
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
39 |
d267e381255f
mod_muc_hide_media: Module to allow hiding inline media in a MUC
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
40 module:hook("muc-disco#info", function (event) |
d267e381255f
mod_muc_hide_media: Module to allow hiding inline media in a MUC
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
41 local room, form, formdata = event.room, event.form, event.formdata; |
d267e381255f
mod_muc_hide_media: Module to allow hiding inline media in a MUC
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
42 |
d267e381255f
mod_muc_hide_media: Module to allow hiding inline media in a MUC
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
43 local display_media = not should_hide_media(room); |
d267e381255f
mod_muc_hide_media: Module to allow hiding inline media in a MUC
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
44 table.insert(form, { |
d267e381255f
mod_muc_hide_media: Module to allow hiding inline media in a MUC
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
45 name = "{xmpp:prosody.im}muc#roomconfig_display_media", |
4788
9084588c73ae
mod_muc_hide_media: Fix disco#info field (thanks mirux)
Kim Alvefur <zash@zash.se>
parents:
3689
diff
changeset
|
46 type = "boolean", |
3681
d267e381255f
mod_muc_hide_media: Module to allow hiding inline media in a MUC
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
47 }); |
d267e381255f
mod_muc_hide_media: Module to allow hiding inline media in a MUC
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
48 formdata["{xmpp:prosody.im}muc#roomconfig_display_media"] = display_media; |
d267e381255f
mod_muc_hide_media: Module to allow hiding inline media in a MUC
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
49 end); |
d267e381255f
mod_muc_hide_media: Module to allow hiding inline media in a MUC
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
50 |
3689
65e94270c413
mod_muc_hide_media: Also strip SIMS media
Matthew Wild <mwild1@gmail.com>
parents:
3681
diff
changeset
|
51 local function filter_media_tags(tag) |
65e94270c413
mod_muc_hide_media: Also strip SIMS media
Matthew Wild <mwild1@gmail.com>
parents:
3681
diff
changeset
|
52 local xmlns = tag.attr.xmlns; |
65e94270c413
mod_muc_hide_media: Also strip SIMS media
Matthew Wild <mwild1@gmail.com>
parents:
3681
diff
changeset
|
53 if xmlns == "jabber:x:oob" then |
65e94270c413
mod_muc_hide_media: Also strip SIMS media
Matthew Wild <mwild1@gmail.com>
parents:
3681
diff
changeset
|
54 return nil; |
65e94270c413
mod_muc_hide_media: Also strip SIMS media
Matthew Wild <mwild1@gmail.com>
parents:
3681
diff
changeset
|
55 elseif xmlns == "urn:xmpp:reference:0" then |
65e94270c413
mod_muc_hide_media: Also strip SIMS media
Matthew Wild <mwild1@gmail.com>
parents:
3681
diff
changeset
|
56 if tag:get_child("media-sharing", "urn:xmpp:sims:1") then |
65e94270c413
mod_muc_hide_media: Also strip SIMS media
Matthew Wild <mwild1@gmail.com>
parents:
3681
diff
changeset
|
57 return nil; |
65e94270c413
mod_muc_hide_media: Also strip SIMS media
Matthew Wild <mwild1@gmail.com>
parents:
3681
diff
changeset
|
58 end |
65e94270c413
mod_muc_hide_media: Also strip SIMS media
Matthew Wild <mwild1@gmail.com>
parents:
3681
diff
changeset
|
59 end |
65e94270c413
mod_muc_hide_media: Also strip SIMS media
Matthew Wild <mwild1@gmail.com>
parents:
3681
diff
changeset
|
60 return tag; |
65e94270c413
mod_muc_hide_media: Also strip SIMS media
Matthew Wild <mwild1@gmail.com>
parents:
3681
diff
changeset
|
61 end |
3681
d267e381255f
mod_muc_hide_media: Module to allow hiding inline media in a MUC
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
62 |
d267e381255f
mod_muc_hide_media: Module to allow hiding inline media in a MUC
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
63 module:hook("muc-occupant-groupchat", function (event) |
d267e381255f
mod_muc_hide_media: Module to allow hiding inline media in a MUC
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
64 local stanza = event.stanza; |
d267e381255f
mod_muc_hide_media: Module to allow hiding inline media in a MUC
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
65 if stanza.attr.type ~= "groupchat" then return; end |
d267e381255f
mod_muc_hide_media: Module to allow hiding inline media in a MUC
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
66 if should_hide_media(event.room) then |
3689
65e94270c413
mod_muc_hide_media: Also strip SIMS media
Matthew Wild <mwild1@gmail.com>
parents:
3681
diff
changeset
|
67 stanza:maptags(filter_media_tags); |
3681
d267e381255f
mod_muc_hide_media: Module to allow hiding inline media in a MUC
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
68 end |
d267e381255f
mod_muc_hide_media: Module to allow hiding inline media in a MUC
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
69 end, 20); |