25
1
mirror of https://github.com/processone/ejabberd.git synced 2024-11-24 16:23:40 +01:00

fix invalid response on get_options when no options set (EJAB-1648)

This commit is contained in:
Christophe Romain 2013-07-09 18:11:27 +02:00
parent b66e4fbdc4
commit 8621a8f006
2 changed files with 42 additions and 28 deletions

View File

@ -3682,26 +3682,33 @@ get_options_helper(JID, Lang, Node, NodeID, SubID, Type) ->
{error, {error,
extended_error(?ERR_NOT_ACCEPTABLE, <<"subid-required">>)}; extended_error(?ERR_NOT_ACCEPTABLE, <<"subid-required">>)};
{_, _} -> {_, _} ->
read_sub(Subscriber, Node, NodeID, SubID, Lang) ValidSubId = lists:member(SubID, SubIDs),
if ValidSubId ->
read_sub(Subscriber, Node, NodeID, SubID, Lang);
true ->
{error,
extended_error(?ERR_NOT_ACCEPTABLE, <<"invalid-subid">>)}
end
end. end.
read_sub(Subscriber, Node, NodeID, SubID, Lang) -> read_sub(Subscriber, Node, NodeID, SubID, Lang) ->
case pubsub_subscription:get_subscription(Subscriber, NodeID, SubID) of Children = case pubsub_subscription:get_subscription(Subscriber, NodeID, SubID) of
{error, notfound} -> {error, notfound} ->
{error, extended_error(?ERR_NOT_ACCEPTABLE, <<"invalid-subid">>)}; [];
{result, #pubsub_subscription{options = Options}} -> {result, #pubsub_subscription{options = Options}} ->
{result, XdataEl} = pubsub_subscription:get_options_xform(Lang, Options), {result, XdataEl} = pubsub_subscription:get_options_xform(Lang, Options),
[XdataEl]
end,
OptionsEl = #xmlel{name = <<"options">>, OptionsEl = #xmlel{name = <<"options">>,
attrs = attrs =
[{<<"jid">>, jlib:jid_to_string(Subscriber)}, [{<<"jid">>, jlib:jid_to_string(Subscriber)},
{<<"subid">>, SubID} {<<"subid">>, SubID}
| nodeAttr(Node)], | nodeAttr(Node)],
children = [XdataEl]}, children = Children},
PubsubEl = #xmlel{name = <<"pubsub">>, PubsubEl = #xmlel{name = <<"pubsub">>,
attrs = [{<<"xmlns">>, ?NS_PUBSUB}], attrs = [{<<"xmlns">>, ?NS_PUBSUB}],
children = [OptionsEl]}, children = [OptionsEl]},
{result, PubsubEl} {result, PubsubEl}.
end.
set_options(Host, Node, JID, SubID, Configuration) -> set_options(Host, Node, JID, SubID, Configuration) ->
Action = fun (#pubsub_node{type = Type, id = NodeID}) -> Action = fun (#pubsub_node{type = Type, id = NodeID}) ->

View File

@ -3301,26 +3301,33 @@ get_options_helper(JID, Lang, Node, NodeID, SubID, Type) ->
{error, {error,
extended_error(?ERR_NOT_ACCEPTABLE, <<"subid-required">>)}; extended_error(?ERR_NOT_ACCEPTABLE, <<"subid-required">>)};
{_, _} -> {_, _} ->
read_sub(Subscriber, Node, NodeID, SubID, Lang) ValidSubId = lists:member(SubID, SubIDs),
if ValidSubId ->
read_sub(Subscriber, Node, NodeID, SubID, Lang);
true ->
{error,
extended_error(?ERR_NOT_ACCEPTABLE, <<"invalid-subid">>)}
end
end. end.
read_sub(Subscriber, Node, NodeID, SubID, Lang) -> read_sub(Subscriber, Node, NodeID, SubID, Lang) ->
case pubsub_subscription_odbc:get_subscription(Subscriber, NodeID, SubID) of Children = case pubsub_subscription_odbc:get_subscription(Subscriber, NodeID, SubID) of
{error, notfound} -> {error, notfound} ->
{error, extended_error(?ERR_NOT_ACCEPTABLE, <<"invalid-subid">>)}; [];
{result, #pubsub_subscription{options = Options}} -> {result, #pubsub_subscription{options = Options}} ->
{result, XdataEl} = pubsub_subscription_odbc:get_options_xform(Lang, Options), {result, XdataEl} = pubsub_subscription_odbc:get_options_xform(Lang, Options),
[XdataEl]
end,
OptionsEl = #xmlel{name = <<"options">>, OptionsEl = #xmlel{name = <<"options">>,
attrs = attrs =
[{<<"jid">>, jlib:jid_to_string(Subscriber)}, [{<<"jid">>, jlib:jid_to_string(Subscriber)},
{<<"subid">>, SubID} {<<"subid">>, SubID}
| nodeAttr(Node)], | nodeAttr(Node)],
children = [XdataEl]}, children = Children},
PubsubEl = #xmlel{name = <<"pubsub">>, PubsubEl = #xmlel{name = <<"pubsub">>,
attrs = [{<<"xmlns">>, ?NS_PUBSUB}], attrs = [{<<"xmlns">>, ?NS_PUBSUB}],
children = [OptionsEl]}, children = [OptionsEl]},
{result, PubsubEl} {result, PubsubEl}.
end.
set_options(Host, Node, JID, SubID, Configuration) -> set_options(Host, Node, JID, SubID, Configuration) ->
Action = fun (#pubsub_node{type = Type, id = NodeID}) -> Action = fun (#pubsub_node{type = Type, id = NodeID}) ->