From: Christophe Romain Date: Tue, 21 Apr 2015 13:14:39 +0000 (+0200) Subject: Owner can subscribe to its node (#454) X-Git-Tag: 15.04~9 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=cbd45974e22e940b974d8668eb5f4bc2350bb5c3;p=ejabberd Owner can subscribe to its node (#454) --- 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 ->