]> granicus.if.org Git - ejabberd/commitdiff
Owner can subscribe to its node (#454)
authorChristophe Romain <christophe.romain@process-one.net>
Tue, 21 Apr 2015 13:14:39 +0000 (15:14 +0200)
committerChristophe Romain <christophe.romain@process-one.net>
Tue, 21 Apr 2015 13:24:31 +0000 (15:24 +0200)
src/node_hometree.erl
src/node_hometree_odbc.erl

index 2840c1850b1498d20c841f081a5facdd7745b66a..f2e592aaaed1abb33c06a4a572f8a0a1b98f8bee 100644 (file)
@@ -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 ->
index d0cfad0f1ea2dd9f8647f98c3c70bcce82a6e9c0..6207e0fbc5bf92bd2ff9f6a748ab39c83f7b795d 100644 (file)
@@ -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 ->