| 
					
				 | 
			
			
				@@ -0,0 +1,132 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/* Copyright 2004, 2005 Acegi Technology Pty Limited 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * Licensed under the Apache License, Version 2.0 (the "License"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * you may not use this file except in compliance with the License. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * You may obtain a copy of the License at 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ *     http://www.apache.org/licenses/LICENSE-2.0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * Unless required by applicable law or agreed to in writing, software 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * distributed under the License is distributed on an "AS IS" BASIS, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * See the License for the specific language governing permissions and 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * limitations under the License. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+package net.sf.acegisecurity.providers.dao.ldap; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import net.sf.acegisecurity.BadCredentialsException; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import net.sf.acegisecurity.UserDetails; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import net.sf.acegisecurity.providers.dao.ldap.support.BaseLdapTestCase; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import javax.naming.NamingException; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * Set of JUnit tests for the LdapPasswordAuthenticationDao. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * @author $author$ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * @version $Revision$ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+public class LdapPasswordAuthenticationDaoTests extends BaseLdapTestCase { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private LdapPasswordAuthenticationDao dao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private String DEFAULT_ROLE = "DEFAULT_ROLE"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public static void main(String[] args) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    	LdapPasswordAuthenticationDaoTests ats = new LdapPasswordAuthenticationDaoTests(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    	ats.setUp(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    	try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    		ats.testSimpleUidUser(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    	} catch (Throwable t) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    	    t.printStackTrace(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    	} finally { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    		System.exit(0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** Check to see that a user with no roles can not login  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     *  (this is the correct behavior the last time I checked the Acegi Docs). 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public void testEmptyRoles() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        dao.setUsernameFormat("uid={0},ou=users,ou=system"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            UserDetails userDetails = dao.loadUserByUsernameAndPassword("user.two", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    "plaintext2"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            fail("No roles are accessible for user; this test _should_ fail."); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } catch (BadCredentialsException ex) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            assertTrue("No roles are accessible for user; this test _should_ fail.", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                ex.getMessage().startsWith(LdapPasswordAuthenticationDao.BAD_CREDENTIALS_EXCEPTION_MESSAGE)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** Test that the user who is identified by  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * Common Name (cn=..) can be authenticated. */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public void testSimpleCnUser() throws NamingException { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        dao.setUsernameFormat("cn={0},ou=users,ou=system"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        dao.setUserLookupNameFormat("cn={0},ou=users"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        dao.setDefaultRole(DEFAULT_ROLE); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            UserDetails userDetails = dao.loadUserByUsernameAndPassword("User Two", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    "plaintext2"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            assertEquals(1, userDetails.getAuthorities().length); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            assertEquals(DEFAULT_ROLE, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                userDetails.getAuthorities()[0].getAuthority()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } catch (BadCredentialsException ex) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            fail(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** Test that the user who is identified by  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * UID (uid=..) can be authenticated. */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public void testSimpleUidUser() throws NamingException { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        dao.setUsernameFormat("uid={0},ou=users,ou=system"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        dao.setUserLookupNameFormat("uid={0},ou=users"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        dao.setDefaultRole(DEFAULT_ROLE); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        	System.out.println("Attempting user auth."); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            UserDetails userDetails = dao.loadUserByUsernameAndPassword("one.user", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    "plaintext"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+             
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //System.out.println( "UserDetails = " + userDetails ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+             
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            assertEquals(1, userDetails.getAuthorities().length); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            assertEquals(DEFAULT_ROLE, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                userDetails.getAuthorities()[0].getAuthority()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } catch (BadCredentialsException ex) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        	System.out.println("Unable to authenticate user."); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        	ex.printStackTrace(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            fail(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** Test that a login w/ a bad password fails. */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public void testSimpleUidUserBadPassword() throws NamingException { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        dao.setUsernameFormat("uid={0},ou=users,ou=system"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        dao.setUserLookupNameFormat("uid={0},ou=users"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        dao.setDefaultRole(DEFAULT_ROLE); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            UserDetails userDetails = dao.loadUserByUsernameAndPassword("one.user", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    "plainlywrong"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            fail(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } catch (BadCredentialsException ex) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            assertTrue(true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * Setup the basic properties of our LdapPasswordAuthenticationDao 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    protected void setUp() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        dao = new LdapPasswordAuthenticationDao(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        dao.setUrl("ldap://localhost:389/ou=system"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 |