From cbd45974e22e940b974d8668eb5f4bc2350bb5c3 Mon Sep 17 00:00:00 2001 From: Christophe Romain Date: Tue, 21 Apr 2015 15:14:39 +0200 Subject: [PATCH] Owner can subscribe to its node (#454) --- src/node_hometree.erl | 7 ++++--- src/node_hometree_odbc.erl | 7 ++++--- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/node_hometree.erl b/src/node_hometree.erl index 2840c1850..f2e592aaa 100644 --- a/src/node_hometree.erl +++ b/src/node_hometree.erl @@ -217,6 +217,7 @@ subscribe_node(Nidx, Sender, Subscriber, AccessModel, (_) -> false end, Subscriptions), + Owner = Affiliation == owner, if not Authorized -> {error, ?ERR_EXTENDED((?ERR_BAD_REQUEST), <<"invalid-jid">>)}; @@ -225,13 +226,13 @@ subscribe_node(Nidx, Sender, Subscriber, AccessModel, PendingSubscription -> {error, ?ERR_EXTENDED((?ERR_NOT_AUTHORIZED), <<"pending-subscription">>)}; - (AccessModel == presence) and not PresenceSubscription -> + (AccessModel == presence) and (not PresenceSubscription) and (not Owner) -> {error, ?ERR_EXTENDED((?ERR_NOT_AUTHORIZED), <<"presence-subscription-required">>)}; - (AccessModel == roster) and not RosterGroup -> + (AccessModel == roster) and (not RosterGroup) and (not Owner) -> {error, ?ERR_EXTENDED((?ERR_NOT_AUTHORIZED), <<"not-in-roster-group">>)}; - (AccessModel == whitelist) and not Whitelisted -> + (AccessModel == whitelist) and (not Whitelisted) and (not Owner) -> {error, ?ERR_EXTENDED((?ERR_NOT_ALLOWED), <<"closed-node">>)}; %%MustPay -> diff --git a/src/node_hometree_odbc.erl b/src/node_hometree_odbc.erl index d0cfad0f1..6207e0fbc 100644 --- a/src/node_hometree_odbc.erl +++ b/src/node_hometree_odbc.erl @@ -158,6 +158,7 @@ subscribe_node(Nidx, Sender, Subscriber, AccessModel, (_) -> false end, Subscriptions), + Owner = Affiliation == owner, if not Authorized -> {error, ?ERR_EXTENDED((?ERR_BAD_REQUEST), <<"invalid-jid">>)}; @@ -166,13 +167,13 @@ subscribe_node(Nidx, Sender, Subscriber, AccessModel, PendingSubscription -> {error, ?ERR_EXTENDED((?ERR_NOT_AUTHORIZED), <<"pending-subscription">>)}; - (AccessModel == presence) and not PresenceSubscription -> + (AccessModel == presence) and (not PresenceSubscription) and (not Owner) -> {error, ?ERR_EXTENDED((?ERR_NOT_AUTHORIZED), <<"presence-subscription-required">>)}; - (AccessModel == roster) and not RosterGroup -> + (AccessModel == roster) and (not RosterGroup) and (not Owner) -> {error, ?ERR_EXTENDED((?ERR_NOT_AUTHORIZED), <<"not-in-roster-group">>)}; - (AccessModel == whitelist) and not Whitelisted -> + (AccessModel == whitelist) and (not Whitelisted) and (not Owner) -> {error, ?ERR_EXTENDED((?ERR_NOT_ALLOWED), <<"closed-node">>)}; %%MustPay ->