aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorChristophe Romain <christophe.romain@process-one.net>2009-07-25 10:58:49 +0000
committerChristophe Romain <christophe.romain@process-one.net>2009-07-25 10:58:49 +0000
commit9d9fca5e1990abab22b86065ebbba1e0a7e0e74e (patch)
tree2b6cb8e816bfcfed48cf1af436b161e3a639a8c6 /src
parentfix get node configuration bug (Thanks to Brian Cully) (diff)
fix subscribers publish_model
SVN Revision: 2393
Diffstat (limited to 'src')
-rw-r--r--src/mod_pubsub/node_hometree.erl20
1 files changed, 12 insertions, 8 deletions
diff --git a/src/mod_pubsub/node_hometree.erl b/src/mod_pubsub/node_hometree.erl
index 604945244..81c242bc2 100644
--- a/src/mod_pubsub/node_hometree.erl
+++ b/src/mod_pubsub/node_hometree.erl
@@ -467,13 +467,15 @@ publish_item(NodeId, Publisher, PublishModel, MaxItems, ItemId, Payload) ->
_ -> get_state(NodeId, SubKey)
end,
Affiliation = GenState#pubsub_state.affiliation,
- Subscription = SubState#pubsub_state.subscriptions,
+ Subscribed = case PublishModel of
+ subscribers -> is_subscribed(SubState#pubsub_state.subscriptions);
+ _ -> undefined
+ end,
if
not ((PublishModel == open)
or ((PublishModel == publishers)
and ((Affiliation == owner) or (Affiliation == publisher)))
- or ((PublishModel == subscribers)
- and (Subscription == subscribed))) ->
+ or (Subscribed == true)) ->
%% Entity does not have sufficient privileges to publish to node
{error, ?ERR_FORBIDDEN};
true ->
@@ -906,8 +908,8 @@ get_item(NodeId, ItemId, JID, AccessModel, PresenceSubscription, RosterGroup, _S
GenKey = jlib:jid_remove_resource(SubKey),
GenState = get_state(NodeId, GenKey),
Affiliation = GenState#pubsub_state.affiliation,
- Subscription = GenState#pubsub_state.subscriptions,
- Whitelisted = can_fetch_item(Affiliation, Subscription),
+ Subscriptions = GenState#pubsub_state.subscriptions,
+ Whitelisted = can_fetch_item(Affiliation, Subscriptions),
if
%%SubID == "", ?? ->
%% Entity has multiple subscriptions to the node but does not specify a subscription ID
@@ -970,11 +972,13 @@ can_fetch_item(owner, _) -> true;
can_fetch_item(member, _) -> true;
can_fetch_item(publisher, _) -> true;
can_fetch_item(outcast, _) -> false;
-can_fetch_item(none, Subscriptions) ->
+can_fetch_item(none, Subscriptions) -> is_subscribed(Subscriptions);
+can_fetch_item(_Affiliation, _Subscription) -> false.
+
+is_subscribed(Subscriptions) ->
lists:any(fun ({subscribed, _SubID}) -> true;
(_) -> false
- end, Subscriptions);
-can_fetch_item(_Affiliation, _Subscription) -> false.
+ end, Subscriptions).
%% Returns the first item where Pred() is true in List
first_in_list(_Pred, []) ->