diff options
author | Christophe Romain <christophe.romain@process-one.net> | 2015-04-21 15:14:39 +0200 |
---|---|---|
committer | Christophe Romain <christophe.romain@process-one.net> | 2015-04-21 15:24:31 +0200 |
commit | cbd45974e22e940b974d8668eb5f4bc2350bb5c3 (patch) | |
tree | 07925dffe6a6450e025328591d71b92eae9677cb | |
parent | Fixed node type (thanks to saczawap) (#435) (diff) |
Owner can subscribe to its node (#454)
-rw-r--r-- | src/node_hometree.erl | 7 | ||||
-rw-r--r-- | 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 -> |