aboutsummaryrefslogtreecommitdiff
path: root/src/mod_pubsub/node_default.erl
diff options
context:
space:
mode:
Diffstat (limited to 'src/mod_pubsub/node_default.erl')
-rw-r--r--src/mod_pubsub/node_default.erl15
1 files changed, 9 insertions, 6 deletions
diff --git a/src/mod_pubsub/node_default.erl b/src/mod_pubsub/node_default.erl
index d7fdb450e..3a4faf506 100644
--- a/src/mod_pubsub/node_default.erl
+++ b/src/mod_pubsub/node_default.erl
@@ -282,6 +282,7 @@ subscribe_node(Host, Node, Sender, Subscriber, AccessModel,
State = get_state(Host, Node, SubscriberKey),
#pubsub_state{affiliation = Affiliation,
subscription = Subscription} = State,
+ Whitelisted = lists:member(Affiliation, [member, publisher, owner]),
if
not Authorized ->
%% JIDs do not match
@@ -298,8 +299,8 @@ subscribe_node(Host, Node, Sender, Subscriber, AccessModel,
(AccessModel == roster) and (not RosterGroup) ->
%% Entity is not authorized to create a subscription (not in roster group)
{error, ?ERR_EXTENDED(?ERR_NOT_AUTHORIZED, "not-in-roster-group")};
- (AccessModel == whitelist) -> % TODO: to be done
- %% Node has whitelist access model
+ (AccessModel == whitelist) and (not Whitelisted) ->
+ %% Node has whitelist access model and entity lacks required affiliation
{error, ?ERR_EXTENDED(?ERR_NOT_ALLOWED, "closed-node")};
(AccessModel == authorize) -> % TODO: to be done
%% Node has authorize access model
@@ -667,6 +668,7 @@ get_items(Host, Node, JID, AccessModel, PresenceSubscription, RosterGroup, _SubI
#pubsub_state{affiliation = Affiliation,
subscription = Subscription} = State,
Subscribed = not ((Subscription == none) or (Subscription == pending)),
+ Whitelisted = lists:member(Affiliation, [member, publisher, owner]),
if
%%SubID == "", ?? ->
%% Entity has multiple subscriptions to the node but does not specify a subscription ID
@@ -686,8 +688,8 @@ get_items(Host, Node, JID, AccessModel, PresenceSubscription, RosterGroup, _SubI
(AccessModel == roster) and (not RosterGroup) ->
%% Entity is not authorized to create a subscription (not in roster group)
{error, ?ERR_EXTENDED(?ERR_NOT_AUTHORIZED, "not-in-roster-group")};
- (AccessModel == whitelist) -> % TODO: to be done
- %% Node has whitelist access model
+ (AccessModel == whitelist) and (not Whitelisted) ->
+ %% Node has whitelist access model and entity lacks required affiliation
{error, ?ERR_EXTENDED(?ERR_NOT_ALLOWED, "closed-node")};
(AccessModel == authorize) -> % TODO: to be done
%% Node has authorize access model
@@ -717,6 +719,7 @@ get_item(Host, Node, ItemId, JID, AccessModel, PresenceSubscription, RosterGroup
#pubsub_state{affiliation = Affiliation,
subscription = Subscription} = State,
Subscribed = not ((Subscription == none) or (Subscription == pending)),
+ Whitelisted = lists:member(Affiliation, [member, publisher, owner]),
if
%%SubID == "", ?? ->
%% Entity has multiple subscriptions to the node but does not specify a subscription ID
@@ -736,8 +739,8 @@ get_item(Host, Node, ItemId, JID, AccessModel, PresenceSubscription, RosterGroup
(AccessModel == roster) and (not RosterGroup) ->
%% Entity is not authorized to create a subscription (not in roster group)
{error, ?ERR_EXTENDED(?ERR_NOT_AUTHORIZED, "not-in-roster-group")};
- (AccessModel == whitelist) -> % TODO: to be done
- %% Node has whitelist access model
+ (AccessModel == whitelist) and (not Whitelisted) ->
+ %% Node has whitelist access model and entity lacks required affiliation
{error, ?ERR_EXTENDED(?ERR_NOT_ALLOWED, "closed-node")};
(AccessModel == authorize) -> % TODO: to be done
%% Node has authorize access model