diff options
| author | Christophe Romain <christophe.romain@process-one.net> | 2009-07-25 10:58:49 +0000 | 
|---|---|---|
| committer | Christophe Romain <christophe.romain@process-one.net> | 2009-07-25 10:58:49 +0000 | 
| commit | 9d9fca5e1990abab22b86065ebbba1e0a7e0e74e (patch) | |
| tree | 2b6cb8e816bfcfed48cf1af436b161e3a639a8c6 | |
| parent | fix get node configuration bug (Thanks to Brian Cully) (diff) | |
fix subscribers publish_model
SVN Revision: 2393
| -rw-r--r-- | src/mod_pubsub/node_hometree.erl | 20 | 
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, []) -> | 
