Skip to content

Commit 0778ce5

Browse files
committed
Needed a change to one of the tests
1 parent a05211f commit 0778ce5

2 files changed

Lines changed: 42 additions & 13 deletions

File tree

src/main/java/org/buddycloud/channelserver/packetprocessor/iq/namespace/pubsub/get/SubscriptionsGet.java

Lines changed: 38 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import org.buddycloud.channelserver.packetprocessor.iq.namespace.pubsub.JabberPubsub;
88
import org.buddycloud.channelserver.packetprocessor.iq.namespace.pubsub.PubSubElementProcessorAbstract;
99
import org.buddycloud.channelserver.pubsub.model.NodeMembership;
10+
import org.buddycloud.channelserver.pubsub.subscription.Subscriptions;
1011
import org.buddycloud.channelserver.utils.XMLConstants;
1112
import org.buddycloud.channelserver.utils.node.item.payload.Buddycloud;
1213
import org.dom4j.Element;
@@ -67,6 +68,15 @@ public void process(Element elm, JID actorJID, IQ reqIQ, Element rsm) throws Exc
6768
outQueue.put(result);
6869
}
6970

71+
/**
72+
* Don't include any subscriptions other than Subscriptions.subscriptions, unless the user is
73+
* one of owner, moderator or the user.
74+
*
75+
* @param subscriptions
76+
* @return
77+
* @throws NodeStoreException
78+
* @throws InterruptedException
79+
*/
7080
private boolean getNodeMemberships(Element subscriptions) throws NodeStoreException, InterruptedException {
7181

7282
ResultSet<NodeMembership> cur = channelManager.getNodeMemberships(node);
@@ -76,19 +86,23 @@ private boolean getNodeMemberships(Element subscriptions) throws NodeStoreExcept
7686
subscriptions.addAttribute(XMLConstants.NODE_ATTR, node);
7787

7888
for (NodeMembership ns : cur) {
79-
if (actorJid.toBareJID().equals(ns.getUser().toBareJID())) {
80-
Element subscription = subscriptions.addElement(XMLConstants.SUBSCRIPTION_ELEM);
81-
subscription.addAttribute(XMLConstants.NODE_ATTR, ns.getNodeId())
82-
.addAttribute(XMLConstants.SUBSCRIPTION_ELEM, ns.getSubscription().toString())
83-
.addAttribute(XMLConstants.JID_ATTR, ns.getUser().toBareJID());
84-
if (null != ns.getInvitedBy() && isOwnerModerator()) {
85-
subscription.addAttribute(XMLConstants.INVITED_BY_ELEM, ns.getInvitedBy().toBareJID());
86-
}
89+
if (!isUserPriviledged(ns.getUser()) && !ns.getSubscription().equals(Subscriptions.subscribed)) {
90+
continue;
91+
}
92+
93+
Element subscription = subscriptions.addElement(XMLConstants.SUBSCRIPTION_ELEM);
94+
subscription.addAttribute(XMLConstants.NODE_ATTR, ns.getNodeId())
95+
.addAttribute(XMLConstants.SUBSCRIPTION_ELEM, ns.getSubscription().toString())
96+
.addAttribute(XMLConstants.JID_ATTR, ns.getUser().toBareJID());
97+
98+
// Only add the invited by attribute if the user has the necessary priviledges
99+
if (null != ns.getInvitedBy() && isUserPriviledged(ns.getUser())) {
100+
subscription.addAttribute(XMLConstants.INVITED_BY_ELEM, ns.getInvitedBy().toBareJID());
87101
}
88102

89103
}
90104
} else {
91-
105+
// TODO(garethf) this looks like makeRemoteRequest
92106
if (!channelManager.isCachedNode(node) || (null != requestIq.getElement().element(XMLConstants.PUBSUB_ELEM).element(XMLConstants.SET_ELEM))
93107
&& !cur.isEmpty()) {
94108
makeRemoteRequest(new JID(node.split("/")[2]).getDomain());
@@ -99,6 +113,21 @@ private boolean getNodeMemberships(Element subscriptions) throws NodeStoreExcept
99113
return true;
100114
}
101115

116+
/**
117+
* Don't include any subscriptions other than Subscriptions.subscriptions, unless the user is
118+
* one of owner, moderator or the user.
119+
*
120+
* @param ns
121+
*
122+
* @return
123+
* @throws NodeStoreException
124+
*/
125+
private boolean isUserPriviledged(JID jid) throws NodeStoreException {
126+
boolean isUser = actorJid.toBareJID().equals(jid.toBareJID());
127+
128+
return (isUser || isOwnerModerator()) ? true : false;
129+
}
130+
102131
private boolean getUserMemberships(Element subscriptions) throws NodeStoreException, InterruptedException {
103132
// let's get all subscriptions.
104133
ResultSet<NodeMembership> cur;

src/test/java/org/buddycloud/channelserver/packetprocessor/iq/namespace/pubsub/get/SubscriptionsGetTest.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,6 @@ public void testPassingNotSubscriptionsAsElementNameReturnsFalse() {
7171
@Test
7272
public void addsInvitedByToUserSubscriptionsList() throws Exception {
7373

74-
7574
ArrayList<NodeMembership> members = new ArrayList<NodeMembership>();
7675
members.add(new NodeMembershipImpl(node, jid, Subscriptions.invited, Affiliations.publisher, invitedBy));
7776

@@ -112,11 +111,12 @@ public void remoteNodeForwardsStanza() throws Exception {
112111
public void doesntAddInvitedByToNodeSubscriptionsListIfNotUserOrOwnerOrModerator() throws Exception {
113112

114113
List<NodeMembership> members = new ArrayList<NodeMembership>();
115-
members.add(new NodeMembershipImpl(node, jid, Subscriptions.invited, Affiliations.publisher, invitedBy));
114+
members.add(new NodeMembershipImpl(node, jid, Subscriptions.subscribed, Affiliations.publisher, invitedBy));
116115

117116
Mockito.when(channelManager.getNodeMemberships(Mockito.anyString())).thenReturn(new ResultSetImpl<NodeMembership>(members));
118117

119-
subscriptionsGet.process(element, jid, nodeRequest, null);
118+
// Run the processing as a JID other than the one used in the above 'add'
119+
subscriptionsGet.process(element, new JID("shylock@shakespeare.lit"), nodeRequest, null);
120120

121121
Assert.assertEquals(1, queue.size());
122122

@@ -131,7 +131,7 @@ public void doesntAddInvitedByToNodeSubscriptionsListIfNotUserOrOwnerOrModerator
131131
}
132132

133133
@Test
134-
public void addsInvitedByToNodeSubscriptionsList() throws Exception {
134+
public void addsInvitedByToNodeSubscriptionsListIfOwner() throws Exception {
135135

136136
NodeMembership nodeMembership = new NodeMembershipImpl(node, jid, Subscriptions.subscribed, Affiliations.owner, null);
137137
Mockito.when(channelManager.getNodeMembership(Mockito.anyString(), Mockito.any(JID.class))).thenReturn(nodeMembership);

0 commit comments

Comments
 (0)