Software /
code /
prosody
Annotate
util/rsm.lua @ 12790:24b55f0e2db9 0.12
mod_http: Allow disabling CORS in the http_cors_override option and by default
Fixes #1779.
Due to an oversight in the logic, if the user set 'enabled' to false in an
override, it would disable the item's requested CORS settings, but still apply
Prosody's default CORS policy.
This change ensures that 'enabled = false' will now disable CORS entirely for
the requested item.
Due to the new structure of the code, it was necessary to have a flag to say
whether CORS is to be applied at all. Rather than hard-coding 'true' here, I
chose to add a new option: 'http_default_cors_enabled'. This is a boolean that
allows the operator to disable Prosody's default CORS policy entirely (the one
that is used when a module or config does not override it). This makes it
easier to disable CORS and then selectively enable it only on services you
want it on.
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Mon, 31 Oct 2022 14:32:02 +0000 |
parent | 11428:d91def9fcfdd |
child | 12975:d10957394a3c |
rev | line source |
---|---|
7852 | 1 -- Prosody IM |
2 -- Copyright (C) 2008-2017 Matthew Wild | |
3 -- Copyright (C) 2008-2017 Waqas Hussain | |
4 -- Copyright (C) 2011-2017 Kim Alvefur | |
5 -- | |
6 -- This project is MIT/X11 licensed. Please see the | |
7 -- COPYING file in the source package for more information. | |
8 -- | |
9 -- XEP-0313: Message Archive Management for Prosody | |
10 -- | |
11 | |
7836
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
12 local stanza = require"util.stanza".stanza; |
10764
1fbfcc2f6805
util.rsm: Don't convert values to strings that should already be strings
Kim Alvefur <zash@zash.se>
parents:
10763
diff
changeset
|
13 local tonumber = tonumber; |
10761
b53193bb21cc
util.rsm: Fix passing number as attribute
Kim Alvefur <zash@zash.se>
parents:
7852
diff
changeset
|
14 local s_format = string.format; |
7836
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
15 local type = type; |
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
16 local pairs = pairs; |
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
17 |
10761
b53193bb21cc
util.rsm: Fix passing number as attribute
Kim Alvefur <zash@zash.se>
parents:
7852
diff
changeset
|
18 local function inttostr(n) |
b53193bb21cc
util.rsm: Fix passing number as attribute
Kim Alvefur <zash@zash.se>
parents:
7852
diff
changeset
|
19 return s_format("%d", n); |
b53193bb21cc
util.rsm: Fix passing number as attribute
Kim Alvefur <zash@zash.se>
parents:
7852
diff
changeset
|
20 end |
b53193bb21cc
util.rsm: Fix passing number as attribute
Kim Alvefur <zash@zash.se>
parents:
7852
diff
changeset
|
21 |
7836
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
22 local xmlns_rsm = 'http://jabber.org/protocol/rsm'; |
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
23 |
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
24 local element_parsers = {}; |
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
25 |
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
26 do |
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
27 local parsers = element_parsers; |
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
28 local function xs_int(st) |
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
29 return tonumber((st:get_text())); |
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
30 end |
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
31 local function xs_string(st) |
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
32 return st:get_text(); |
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
33 end |
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
34 |
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
35 parsers.after = xs_string; |
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
36 parsers.before = function(st) |
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
37 local text = st:get_text(); |
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
38 return text == "" or text; |
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
39 end; |
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
40 parsers.max = xs_int; |
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
41 parsers.index = xs_int; |
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
42 |
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
43 parsers.first = function(st) |
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
44 return { index = tonumber(st.attr.index); st:get_text() }; |
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
45 end; |
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
46 parsers.last = xs_string; |
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
47 parsers.count = xs_int; |
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
48 end |
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
49 |
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
50 local element_generators = setmetatable({ |
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
51 first = function(st, data) |
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
52 if type(data) == "table" then |
10761
b53193bb21cc
util.rsm: Fix passing number as attribute
Kim Alvefur <zash@zash.se>
parents:
7852
diff
changeset
|
53 st:tag("first", { index = inttostr(data.index) }):text(data[1]):up(); |
7836
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
54 else |
11426
c7948491c5e4
util.rsm: Improve readability using compacter stanza building API
Kim Alvefur <zash@zash.se>
parents:
10764
diff
changeset
|
55 st:text_tag("first", data); |
7836
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
56 end |
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
57 end; |
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
58 before = function(st, data) |
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
59 if data == true then |
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
60 st:tag("before"):up(); |
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
61 else |
11426
c7948491c5e4
util.rsm: Improve readability using compacter stanza building API
Kim Alvefur <zash@zash.se>
parents:
10764
diff
changeset
|
62 st:text_tag("before", data); |
7836
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
63 end |
10763
e0e2ae050d65
util.rsm: Explicitly serialize numbers in correct format
Kim Alvefur <zash@zash.se>
parents:
10761
diff
changeset
|
64 end; |
e0e2ae050d65
util.rsm: Explicitly serialize numbers in correct format
Kim Alvefur <zash@zash.se>
parents:
10761
diff
changeset
|
65 max = function (st, data) |
11426
c7948491c5e4
util.rsm: Improve readability using compacter stanza building API
Kim Alvefur <zash@zash.se>
parents:
10764
diff
changeset
|
66 st:text_tag("max", inttostr(data)); |
10763
e0e2ae050d65
util.rsm: Explicitly serialize numbers in correct format
Kim Alvefur <zash@zash.se>
parents:
10761
diff
changeset
|
67 end; |
11428
d91def9fcfdd
util.rsm: Correctly coerce integer value for <index> (fix #1642)
Kim Alvefur <zash@zash.se>
parents:
11426
diff
changeset
|
68 index = function (st, data) |
d91def9fcfdd
util.rsm: Correctly coerce integer value for <index> (fix #1642)
Kim Alvefur <zash@zash.se>
parents:
11426
diff
changeset
|
69 st:text_tag("index", inttostr(data)); |
d91def9fcfdd
util.rsm: Correctly coerce integer value for <index> (fix #1642)
Kim Alvefur <zash@zash.se>
parents:
11426
diff
changeset
|
70 end; |
10763
e0e2ae050d65
util.rsm: Explicitly serialize numbers in correct format
Kim Alvefur <zash@zash.se>
parents:
10761
diff
changeset
|
71 count = function (st, data) |
11426
c7948491c5e4
util.rsm: Improve readability using compacter stanza building API
Kim Alvefur <zash@zash.se>
parents:
10764
diff
changeset
|
72 st:text_tag("count", inttostr(data)); |
10763
e0e2ae050d65
util.rsm: Explicitly serialize numbers in correct format
Kim Alvefur <zash@zash.se>
parents:
10761
diff
changeset
|
73 end; |
7836
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
74 }, { |
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
75 __index = function(_, name) |
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
76 return function(st, data) |
11426
c7948491c5e4
util.rsm: Improve readability using compacter stanza building API
Kim Alvefur <zash@zash.se>
parents:
10764
diff
changeset
|
77 st:text_tag(name, data); |
7836
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
78 end |
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
79 end; |
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
80 }); |
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
81 |
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
82 |
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
83 local function parse(set) |
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
84 local rs = {}; |
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
85 for tag in set:childtags() do |
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
86 local name = tag.name; |
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
87 local parser = name and element_parsers[name]; |
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
88 if parser then |
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
89 rs[name] = parser(tag); |
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
90 end |
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
91 end |
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
92 return rs; |
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
93 end |
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
94 |
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
95 local function generate(t) |
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
96 local st = stanza("set", { xmlns = xmlns_rsm }); |
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
97 for k,v in pairs(t) do |
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
98 if element_parsers[k] then |
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
99 element_generators[k](st, v); |
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
100 end |
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
101 end |
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
102 return st; |
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
103 end |
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
104 |
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
105 local function get(st) |
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
106 local set = st:get_child("set", xmlns_rsm); |
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
107 if set and #set.tags > 0 then |
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
108 return parse(set); |
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
109 end |
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
110 end |
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
111 |
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
112 return { parse = parse, generate = generate, get = get }; |