summaryrefslogtreecommitdiff
path: root/src/mod_pubsub.erl
diff options
context:
space:
mode:
authorStu Tomlinson <stu@nosnilmot.com>2018-07-13 19:15:17 +0100
committerStu Tomlinson <stu@nosnilmot.com>2018-07-14 11:55:38 +0100
commitf9ed34db4d1d38e2c1e657b5a2dd6e8e6884d17e (patch)
treeec8bf0dcd2592d38e445b08b473f52e57c1920b6 /src/mod_pubsub.erl
parentEnsure that returned priority in a number in mod_admin_extra (diff)
Enforce pubsub option required/rejected attributes
XEP-0060 states that 'node' and 'jid' attributes to <options> element MUST NOT be included when <options> are specified at same time as <subscribe> : https://xmpp.org/extensions/xep-0060.html#subscriber-configure-subandconfig mod_pubsub will require 'node' and 'jid' attributes on standalone pubsub options requests, and reject subscribe requests that have options that include either 'node' or 'jid'
Diffstat (limited to 'src/mod_pubsub.erl')
-rw-r--r--src/mod_pubsub.erl17
1 files changed, 16 insertions, 1 deletions
diff --git a/src/mod_pubsub.erl b/src/mod_pubsub.erl
index d96933e1..e50466d0 100644
--- a/src/mod_pubsub.erl
+++ b/src/mod_pubsub.erl
@@ -1138,8 +1138,17 @@ iq_pubsub(Host, Access, #iq{from = From, type = IQType, lang = Lang,
{set, #pubsub{subscribe = #ps_subscribe{node = Node, jid = JID},
options = Options, _ = undefined}} ->
Config = case Options of
- #ps_options{xdata = XData} ->
+ #ps_options{xdata = XData, jid = undefined, node = <<>>} ->
decode_subscribe_options(XData, Lang);
+ #ps_options{xdata = _XData, jid = _JID, node = <<>>} ->
+ Txt = <<"jid not allowed here">>,
+ {error, xmpp:err_bad_request(Txt, Lang)};
+ #ps_options{xdata = _XData, jid = undefined, node = _NodeID} ->
+ Txt = <<"node not allowed here">>,
+ {error, xmpp:err_bad_request(Txt, Lang)};
+ #ps_options{xdata = _XData, jid = _JID, node = _NodeID} ->
+ Txt = <<"jid and node not allowed here">>,
+ {error, xmpp:err_bad_request(Txt, Lang)};
_ ->
[]
end,
@@ -1165,6 +1174,12 @@ iq_pubsub(Host, Access, #iq{from = From, type = IQType, lang = Lang,
{get, #pubsub{affiliations = {Node, _}, _ = undefined}} ->
Plugins = config(serverhost(Host), plugins),
get_affiliations(Host, Node, From, Plugins);
+ {_, #pubsub{options = #ps_options{jid = undefined}, _ = undefined}} ->
+ Txt = <<"jid required">>,
+ {error, extended_error(xmpp:err_bad_request(Txt, Lang), err_jid_required())};
+ {_, #pubsub{options = #ps_options{node = <<>>}, _ = undefined}} ->
+ Txt = <<"nodeid required">>,
+ {error, extended_error(xmpp:err_bad_request(Txt, Lang), err_nodeid_required())};
{get, #pubsub{options = #ps_options{node = Node, subid = SubId, jid = JID},
_ = undefined}} ->
get_options(Host, Node, JID, SubId, Lang);