aboutsummaryrefslogtreecommitdiff
path: root/src/node_flat.erl
diff options
context:
space:
mode:
authorChristophe Romain <christophe.romain@process-one.net>2017-10-25 11:16:54 +0200
committerChristophe Romain <christophe.romain@process-one.net>2017-10-25 11:16:54 +0200
commit17e3ed513bbe0c4da774ac7d33e9dcff0bb06b11 (patch)
tree23531b34e7db54bad7980803fa5a26e9f492abd8 /src/node_flat.erl
parentFix another typo ;) (diff)
Fix delete item from unregistered user (#2067)
Diffstat (limited to 'src/node_flat.erl')
-rw-r--r--src/node_flat.erl23
1 files changed, 16 insertions, 7 deletions
diff --git a/src/node_flat.erl b/src/node_flat.erl
index d63f589ec..18d4f4745 100644
--- a/src/node_flat.erl
+++ b/src/node_flat.erl
@@ -445,21 +445,30 @@ delete_item(Nidx, Publisher, PublishModel, ItemId) ->
case Affiliation of
owner ->
{result, States} = get_states(Nidx),
+ Records = States ++ mnesia:read({pubsub_orphan, Nidx}),
lists:foldl(fun
- (#pubsub_state{items = PI} = S, Res) ->
- case lists:member(ItemId, PI) of
+ (#pubsub_state{items = RI} = S, Res) ->
+ case lists:member(ItemId, RI) of
true ->
- Nitems = lists:delete(ItemId, PI),
+ NI = lists:delete(ItemId, RI),
del_item(Nidx, ItemId),
- set_state(S#pubsub_state{items = Nitems}),
+ mnesia:write(S#pubsub_state{items = NI}),
{result, {default, broadcast}};
false ->
Res
end;
- (_, Res) ->
- Res
+ (#pubsub_orphan{items = RI} = S, Res) ->
+ case lists:member(ItemId, RI) of
+ true ->
+ NI = lists:delete(ItemId, RI),
+ del_item(Nidx, ItemId),
+ mnesia:write(S#pubsub_orphan{items = NI}),
+ {result, {default, broadcast}};
+ false ->
+ Res
+ end
end,
- {error, xmpp:err_item_not_found()}, States);
+ {error, xmpp:err_item_not_found()}, Records);
_ ->
{error, xmpp:err_forbidden()}
end