aboutsummaryrefslogtreecommitdiff
path: root/src/mod_pubsub/mod_pubsub.erl
diff options
context:
space:
mode:
Diffstat (limited to 'src/mod_pubsub/mod_pubsub.erl')
-rw-r--r--src/mod_pubsub/mod_pubsub.erl29
1 files changed, 20 insertions, 9 deletions
diff --git a/src/mod_pubsub/mod_pubsub.erl b/src/mod_pubsub/mod_pubsub.erl
index d68edcaa2..205a3fd11 100644
--- a/src/mod_pubsub/mod_pubsub.erl
+++ b/src/mod_pubsub/mod_pubsub.erl
@@ -1361,7 +1361,7 @@ adhoc_request(Host, _ServerHost, Owner,
{value, {_, Node}} ->
send_pending_auth_events(Host, Node, Owner);
false ->
- {error, ?ERR_EXTENDED(?ERR_BAD_REQUEST, "bad-payload")}
+ {error, extended_error(?ERR_BAD_REQUEST, "bad-payload")}
end;
Error ->
Error
@@ -1835,7 +1835,10 @@ delete_node(Host, Node, Owner) ->
%%<li>The node does not exist.</li>
%%</ul>
subscribe_node(Host, Node, From, JID, Configuration) ->
- {result, SubOpts} = pubsub_subscription:parse_options_xform(Configuration),
+ SubOpts = case pubsub_subscription:parse_options_xform(Configuration) of
+ {result, GoodSubOpts} -> GoodSubOpts;
+ _ -> invalid
+ end,
Subscriber = case jlib:string_to_jid(JID) of
error -> {"", "", ""};
J -> jlib:jid_tolower(J)
@@ -1874,6 +1877,9 @@ subscribe_node(Host, Node, From, JID, Configuration) ->
HasOptions andalso not OptionsFeature ->
%% Node does not support subscription options
{error, extended_error(?ERR_FEATURE_NOT_IMPLEMENTED, unsupported, "subscription-options")};
+ SubOpts == invalid ->
+ %% Passed invalit options submit form
+ {error, extended_error(?ERR_BAD_REQUEST, "invalid-options")};
true ->
node_call(Type, subscribe_node,
[NodeId, From, Subscriber,
@@ -2472,11 +2478,11 @@ get_options_helper(JID, Lang, Node, NodeID, SubID, Type) ->
end, [], Subs),
case {SubID, SubIDs} of
{_, []} ->
- {error, ?ERR_EXTENDED(?ERR_NOT_ACCEPTABLE, "not-subscribed")};
+ {error, extended_error(?ERR_NOT_ACCEPTABLE, "not-subscribed")};
{[], [SID]} ->
read_sub(Subscriber, Node, NodeID, SID, Lang);
{[], _} ->
- {error, ?ERR_EXTENDED(?ERR_NOT_ACCEPTABLE, "subid-required")};
+ {error, extended_error(?ERR_NOT_ACCEPTABLE, "subid-required")};
{_, _} ->
read_sub(Subscriber, Node, NodeID, SubID, Lang)
end.
@@ -2484,7 +2490,7 @@ get_options_helper(JID, Lang, Node, NodeID, SubID, Type) ->
read_sub(Subscriber, Node, NodeID, SubID, Lang) ->
case pubsub_subscription:get_subscription(Subscriber, NodeID, SubID) of
{error, notfound} ->
- {error, ?ERR_EXTENDED(?ERR_NOT_ACCEPTABLE, "invalid-subid")};
+ {error, extended_error(?ERR_NOT_ACCEPTABLE, "invalid-subid")};
{result, #pubsub_subscription{options = Options}} ->
{result, XdataEl} = pubsub_subscription:get_options_xform(Lang, Options),
OptionsEl = {xmlelement, "options", [{"node", node_to_string(Node)},
@@ -2513,11 +2519,14 @@ set_options(Host, Node, JID, SubID, Configuration) ->
end.
set_options_helper(Configuration, JID, NodeID, SubID, Type) ->
+ SubOpts = case pubsub_subscription:parse_options_xform(Configuration) of
+ {result, GoodSubOpts} -> GoodSubOpts;
+ _ -> invalid
+ end,
Subscriber = case jlib:string_to_jid(JID) of
error -> {"", "", ""};
J -> jlib:jid_tolower(J)
end,
- {result, SubOpts} = pubsub_subscription:parse_options_xform(Configuration),
{result, Subs} = node_call(Type, get_subscriptions,
[NodeID, Subscriber]),
SubIDs = lists:foldl(fun({subscribed, SID}, Acc) ->
@@ -2527,19 +2536,21 @@ set_options_helper(Configuration, JID, NodeID, SubID, Type) ->
end, [], Subs),
case {SubID, SubIDs} of
{_, []} ->
- {error, ?ERR_EXTENDED(?ERR_NOT_ACCEPTABLE, "not-subscribed")};
+ {error, extended_error(?ERR_NOT_ACCEPTABLE, "not-subscribed")};
{[], [SID]} ->
write_sub(Subscriber, NodeID, SID, SubOpts);
{[], _} ->
- {error, ?ERR_EXTENDED(?ERR_NOT_ACCEPTABLE, "subid-required")};
+ {error, extended_error(?ERR_NOT_ACCEPTABLE, "subid-required")};
{_, _} ->
write_sub(Subscriber, NodeID, SubID, SubOpts)
end.
+write_sub(_Subscriber, _NodeID, _SubID, invalid) ->
+ {error, extended_error(?ERR_BAD_REQUEST, "invalid-options")};
write_sub(Subscriber, NodeID, SubID, Options) ->
case pubsub_subscription:set_subscription(Subscriber, NodeID, SubID, Options) of
{error, notfound} ->
- {error, ?ERR_EXTENDED(?ERR_NOT_ACCEPTABLE, "invalid-subid")};
+ {error, extended_error(?ERR_NOT_ACCEPTABLE, "invalid-subid")};
{result, _} ->
{result, []}
end.