]> granicus.if.org Git - ejabberd/commitdiff
fix subscribers publish_model
authorChristophe Romain <christophe.romain@process-one.net>
Sat, 25 Jul 2009 10:58:49 +0000 (10:58 +0000)
committerChristophe Romain <christophe.romain@process-one.net>
Sat, 25 Jul 2009 10:58:49 +0000 (10:58 +0000)
SVN Revision: 2393

src/mod_pubsub/node_hometree.erl

index 604945244e6979f31dc202d6f5637dce8406c905..81c242bc20e4fb23f5c4d598db2b2c081fc1db62 100644 (file)
@@ -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, []) ->