Author: ngn
Date: Wed Sep  9 21:07:55 2009
New Revision: 813118

URL: http://svn.apache.org/viewvc?rev=813118&view=rev
Log:
Implement not letting non-mmbers entering member only rooms

Modified:
    
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCPresenceHandler.java
    
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/model/Room.java
    
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCPresenceHandlerEnterRoomTestCase.java

Modified: 
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCPresenceHandler.java
URL: 
http://svn.apache.org/viewvc/mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCPresenceHandler.java?rev=813118&r1=813117&r2=813118&view=diff
==============================================================================
--- 
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCPresenceHandler.java
 (original)
+++ 
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCPresenceHandler.java
 Wed Sep  9 21:07:55 2009
@@ -30,6 +30,7 @@
 import org.apache.vysper.xmpp.delivery.failure.DeliveryException;
 import org.apache.vysper.xmpp.delivery.failure.IgnoreFailureStrategy;
 import org.apache.vysper.xmpp.modules.core.base.handler.DefaultPresenceHandler;
+import org.apache.vysper.xmpp.modules.extension.xep0045_muc.model.Affiliation;
 import org.apache.vysper.xmpp.modules.extension.xep0045_muc.model.Conference;
 import org.apache.vysper.xmpp.modules.extension.xep0045_muc.model.Occupant;
 import org.apache.vysper.xmpp.modules.extension.xep0045_muc.model.Role;
@@ -189,6 +190,10 @@
                 // outcast
                 return createPresenceErrorStanza(roomJid, newOccupantJid, 
stanza.getID(), "auth", "forbidden");
             }
+            if(room.isRoomType(RoomType.MembersOnly) && 
newOccupant.getAffiliation() == Affiliation.None) {
+                // non-member can not enter members only room
+                return createPresenceErrorStanza(roomJid, newOccupantJid, 
stanza.getID(), "auth", "registration-required");
+            }
             
             // relay presence of all existing room occupants to the now joined 
occupant
             for(Occupant occupant : room.getOccupants()) {

Modified: 
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/model/Room.java
URL: 
http://svn.apache.org/viewvc/mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/model/Room.java?rev=813118&r1=813117&r2=813118&view=diff
==============================================================================
--- 
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/model/Room.java
 (original)
+++ 
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/model/Room.java
 Wed Sep  9 21:07:55 2009
@@ -112,9 +112,14 @@
         
         // default to none
         if(affiliation == null) affiliation = Affiliation.None;
+        
         Role role = Role.getRole(affiliation, roomTypes);
         Occupant occupant = new Occupant(occupantJid, name, affiliation, 
role); 
-        occupants.put(occupantJid, occupant);
+        if(isRoomType(RoomType.MembersOnly) && affiliation == 
Affiliation.None) {
+            // don't add non member to room
+        } else {
+            occupants.put(occupantJid, occupant);
+        }
         return occupant;
     }
 

Modified: 
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCPresenceHandlerEnterRoomTestCase.java
URL: 
http://svn.apache.org/viewvc/mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCPresenceHandlerEnterRoomTestCase.java?rev=813118&r1=813117&r2=813118&view=diff
==============================================================================
--- 
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCPresenceHandlerEnterRoomTestCase.java
 (original)
+++ 
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCPresenceHandlerEnterRoomTestCase.java
 Wed Sep  9 21:07:55 2009
@@ -18,7 +18,6 @@
 import org.apache.vysper.xmpp.server.TestSessionContext;
 import org.apache.vysper.xmpp.stanza.MessageStanza;
 import org.apache.vysper.xmpp.stanza.MessageStanzaType;
-import org.apache.vysper.xmpp.stanza.PresenceStanza;
 import org.apache.vysper.xmpp.stanza.Stanza;
 import org.apache.vysper.xmpp.stanza.StanzaBuilder;
 import org.apache.vysper.xmpp.xmlfragment.Attribute;
@@ -126,6 +125,14 @@
         assertEquals(0, room.getOccupants().size());
     }
 
+    public void testEnterAsNonMember() throws Exception {
+        Room room = conference.createRoom(ROOM2_JID, "Room", 
RoomType.MembersOnly);
+
+        Stanza error = enterRoom(OCCUPANT1_JID, ROOM2_JID_WITH_NICK);
+        assertPresenceErrorStanza(error, ROOM2_JID, OCCUPANT1_JID, "auth", 
"registration-required");
+
+        assertEquals(0, room.getOccupants().size());
+    }
     
     public void testEnterRoomWithDuplicateNick() throws Exception {
         assertNull(enterRoom(OCCUPANT1_JID, ROOM1_JID_WITH_NICK));


Reply via email to