You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by vt...@apache.org on 2004/12/03 14:26:11 UTC

svn commit: r109673 - in incubator/directory/janus/trunk/jdbc/src: java/org/apache/janus/authentication/realm test/org/apache/janus/authentication/realm

Author: vtence
Date: Fri Dec  3 05:26:11 2004
New Revision: 109673

URL: http://svn.apache.org/viewcvs?view=rev&rev=109673
Log:
Selector interfaces moved to core module. Progressing towards adherence to Realm interface ...
Removed:
   incubator/directory/janus/trunk/jdbc/src/java/org/apache/janus/authentication/realm/ExpressionBuilder.java
   incubator/directory/janus/trunk/jdbc/src/java/org/apache/janus/authentication/realm/SameCredentialsBuilder.java
   incubator/directory/janus/trunk/jdbc/src/java/org/apache/janus/authentication/realm/Selector.java
   incubator/directory/janus/trunk/jdbc/src/java/org/apache/janus/authentication/realm/SelectorBuilder.java
Modified:
   incubator/directory/janus/trunk/jdbc/src/java/org/apache/janus/authentication/realm/Column.java
   incubator/directory/janus/trunk/jdbc/src/java/org/apache/janus/authentication/realm/JDBCRealm.java
   incubator/directory/janus/trunk/jdbc/src/java/org/apache/janus/authentication/realm/JDBCSelector.java
   incubator/directory/janus/trunk/jdbc/src/java/org/apache/janus/authentication/realm/Table.java
   incubator/directory/janus/trunk/jdbc/src/test/org/apache/janus/authentication/realm/JDBCRealmTest.java
   incubator/directory/janus/trunk/jdbc/src/test/org/apache/janus/authentication/realm/JDBCSelectorTest.java

Modified: incubator/directory/janus/trunk/jdbc/src/java/org/apache/janus/authentication/realm/Column.java
Url: http://svn.apache.org/viewcvs/incubator/directory/janus/trunk/jdbc/src/java/org/apache/janus/authentication/realm/Column.java?view=diff&rev=109673&p1=incubator/directory/janus/trunk/jdbc/src/java/org/apache/janus/authentication/realm/Column.java&r1=109672&p2=incubator/directory/janus/trunk/jdbc/src/java/org/apache/janus/authentication/realm/Column.java&r2=109673
==============================================================================
--- incubator/directory/janus/trunk/jdbc/src/java/org/apache/janus/authentication/realm/Column.java	(original)
+++ incubator/directory/janus/trunk/jdbc/src/java/org/apache/janus/authentication/realm/Column.java	Fri Dec  3 05:26:11 2004
@@ -16,6 +16,10 @@
  */
 package org.apache.janus.authentication.realm;
 
+import org.apache.janus.authentication.Credential;
+
+import java.sql.ResultSet;
+
 public class Column
 {
     private final String m_name;
@@ -70,5 +74,20 @@
     public String toString()
     {
         return "m_name=" + m_name + ", m_type=" + m_type;
+    }
+
+    public Object getObject( ResultSet rs ) throws JDBCException
+    {
+        Credential value = null;
+        try
+        {
+            value = (Credential) m_type.newInstance();
+            value.setValue( rs.getString( m_name ));
+        }
+        catch ( Exception e )
+        {
+            throw new RuntimeException();
+        }
+        return value;
     }
 }

Deleted: /incubator/directory/janus/trunk/jdbc/src/java/org/apache/janus/authentication/realm/ExpressionBuilder.java
Url: http://svn.apache.org/viewcvs/incubator/directory/janus/trunk/jdbc/src/java/org/apache/janus/authentication/realm/ExpressionBuilder.java?view=auto&rev=109672
==============================================================================

Modified: incubator/directory/janus/trunk/jdbc/src/java/org/apache/janus/authentication/realm/JDBCRealm.java
Url: http://svn.apache.org/viewcvs/incubator/directory/janus/trunk/jdbc/src/java/org/apache/janus/authentication/realm/JDBCRealm.java?view=diff&rev=109673&p1=incubator/directory/janus/trunk/jdbc/src/java/org/apache/janus/authentication/realm/JDBCRealm.java&r1=109672&p2=incubator/directory/janus/trunk/jdbc/src/java/org/apache/janus/authentication/realm/JDBCRealm.java&r2=109673
==============================================================================
--- incubator/directory/janus/trunk/jdbc/src/java/org/apache/janus/authentication/realm/JDBCRealm.java	(original)
+++ incubator/directory/janus/trunk/jdbc/src/java/org/apache/janus/authentication/realm/JDBCRealm.java	Fri Dec  3 05:26:11 2004
@@ -16,31 +16,34 @@
  */
 package org.apache.janus.authentication.realm;
 
+import org.apache.janus.authentication.CredentialSet;
+
 import javax.sql.DataSource;
 import java.sql.Connection;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
 import java.sql.SQLException;
+import java.security.Principal;
 
 public class JDBCRealm
 {
     private final DataSource m_ds;
     private final Table m_table;
+    private final AuthenticationMethod m_authenticationMethod;
 
-    public JDBCRealm( DataSource ds, Table table )
+    public JDBCRealm( DataSource ds, Table table, AuthenticationMethod authenticationMethod )
     {
         m_ds = ds;
         m_table = table;
+        m_authenticationMethod = authenticationMethod;
     }
 
-    public boolean find( JDBCSelector selector ) throws JDBCException
+    public Principal find( JDBCSelector selector ) throws JDBCException
     {
         Connection conn = null;
-        boolean found = false;
+        CredentialSet creds = null;
         try
         {
             conn = m_ds.getConnection();
-            found = selector.select( conn );            
+            creds = selector.select( conn );
         }
         catch ( SQLException e )
         {
@@ -51,7 +54,7 @@
             closeConnection( conn );
         }
 
-        return found;
+        return creds != null ? m_authenticationMethod.principal( creds ) : null;
     }
 
     private void closeConnection( Connection conn )

Modified: incubator/directory/janus/trunk/jdbc/src/java/org/apache/janus/authentication/realm/JDBCSelector.java
Url: http://svn.apache.org/viewcvs/incubator/directory/janus/trunk/jdbc/src/java/org/apache/janus/authentication/realm/JDBCSelector.java?view=diff&rev=109673&p1=incubator/directory/janus/trunk/jdbc/src/java/org/apache/janus/authentication/realm/JDBCSelector.java&r1=109672&p2=incubator/directory/janus/trunk/jdbc/src/java/org/apache/janus/authentication/realm/JDBCSelector.java&r2=109673
==============================================================================
--- incubator/directory/janus/trunk/jdbc/src/java/org/apache/janus/authentication/realm/JDBCSelector.java	(original)
+++ incubator/directory/janus/trunk/jdbc/src/java/org/apache/janus/authentication/realm/JDBCSelector.java	Fri Dec  3 05:26:11 2004
@@ -16,6 +16,8 @@
  */
 package org.apache.janus.authentication.realm;
 
+import org.apache.janus.authentication.CredentialSet;
+
 import java.sql.Connection;
 import java.sql.PreparedStatement;
 import java.sql.ResultSet;
@@ -41,15 +43,27 @@
         m_expressions.add( expression );
     }
 
-    public boolean select( Connection c ) throws SQLException
+    public CredentialSet select( Connection c ) throws SQLException
     {
-        PreparedStatement statement = c.prepareStatement( buildQueryString() );
-        bindParameterValues( statement, getParameterValues() );
-        ResultSet rs = statement.executeQuery();
-        boolean found = rs.next();
-        statement.close();
+        PreparedStatement statement = null;
+        CredentialSet creds = null;
+        try
+        {
+            statement = c.prepareStatement( buildQueryString() );
+            bindParameterValues( statement, getParameterValues() );
+            ResultSet rs = statement.executeQuery();
+            if ( rs.next() )
+            {
+                creds = m_table.instanciate( rs );
+            }
+            rs.close();
+        }
+        finally
+        {
+            if (statement != null) statement.close();
+        }
 
-        return found;
+        return creds;
     }
 
     private String[] getParameterValues()

Deleted: /incubator/directory/janus/trunk/jdbc/src/java/org/apache/janus/authentication/realm/SameCredentialsBuilder.java
Url: http://svn.apache.org/viewcvs/incubator/directory/janus/trunk/jdbc/src/java/org/apache/janus/authentication/realm/SameCredentialsBuilder.java?view=auto&rev=109672
==============================================================================

Deleted: /incubator/directory/janus/trunk/jdbc/src/java/org/apache/janus/authentication/realm/Selector.java
Url: http://svn.apache.org/viewcvs/incubator/directory/janus/trunk/jdbc/src/java/org/apache/janus/authentication/realm/Selector.java?view=auto&rev=109672
==============================================================================

Deleted: /incubator/directory/janus/trunk/jdbc/src/java/org/apache/janus/authentication/realm/SelectorBuilder.java
Url: http://svn.apache.org/viewcvs/incubator/directory/janus/trunk/jdbc/src/java/org/apache/janus/authentication/realm/SelectorBuilder.java?view=auto&rev=109672
==============================================================================

Modified: incubator/directory/janus/trunk/jdbc/src/java/org/apache/janus/authentication/realm/Table.java
Url: http://svn.apache.org/viewcvs/incubator/directory/janus/trunk/jdbc/src/java/org/apache/janus/authentication/realm/Table.java?view=diff&rev=109673&p1=incubator/directory/janus/trunk/jdbc/src/java/org/apache/janus/authentication/realm/Table.java&r1=109672&p2=incubator/directory/janus/trunk/jdbc/src/java/org/apache/janus/authentication/realm/Table.java&r2=109673
==============================================================================
--- incubator/directory/janus/trunk/jdbc/src/java/org/apache/janus/authentication/realm/Table.java	(original)
+++ incubator/directory/janus/trunk/jdbc/src/java/org/apache/janus/authentication/realm/Table.java	Fri Dec  3 05:26:11 2004
@@ -16,10 +16,14 @@
  */
 package org.apache.janus.authentication.realm;
 
+import org.apache.janus.authentication.CredentialSet;
+
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
+import java.util.Iterator;
+import java.sql.ResultSet;
 
 public class Table
 {
@@ -68,6 +72,18 @@
     public boolean supports( Class type )
     {
         return m_columns.containsKey( type );
+    }
+
+    public CredentialSet instanciate( ResultSet rs )
+    {
+        CredentialSet creds = new CredentialSet();
+        for ( Iterator it = m_columns.values().iterator(); it.hasNext(); )
+        {
+            Column column = ( Column ) it.next();
+            creds.add( column.getObject( rs ) );
+        }
+
+        return creds;
     }
 }
 

Modified: incubator/directory/janus/trunk/jdbc/src/test/org/apache/janus/authentication/realm/JDBCRealmTest.java
Url: http://svn.apache.org/viewcvs/incubator/directory/janus/trunk/jdbc/src/test/org/apache/janus/authentication/realm/JDBCRealmTest.java?view=diff&rev=109673&p1=incubator/directory/janus/trunk/jdbc/src/test/org/apache/janus/authentication/realm/JDBCRealmTest.java&r1=109672&p2=incubator/directory/janus/trunk/jdbc/src/test/org/apache/janus/authentication/realm/JDBCRealmTest.java&r2=109673
==============================================================================
--- incubator/directory/janus/trunk/jdbc/src/test/org/apache/janus/authentication/realm/JDBCRealmTest.java	(original)
+++ incubator/directory/janus/trunk/jdbc/src/test/org/apache/janus/authentication/realm/JDBCRealmTest.java	Fri Dec  3 05:26:11 2004
@@ -34,8 +34,8 @@
         Table table = Tables.users();
         m_db.create( table );
         m_db.insertInto( table, Creds.joe() );
-        m_db.insertInto( table, Creds.jane() );
-        m_realm = new JDBCRealm( m_db.getDataSource() , table );
+
+        m_realm = new JDBCRealm( m_db.getDataSource(), table, new UsernamePasswordAuthentication() );
     }
 
     protected void tearDown() throws Exception
@@ -43,28 +43,49 @@
         m_db.dropAll();
     }
 
-    public void testExecutesSelectionQueriesAgainstDatabase() throws Exception
+    /**
+     * invalid credentials should return null
+     */
+
+    public void testAuthenticationSucceedsIfCredentialsCanBeSelected() throws Exception
     {
         JDBCSelector selector = new JDBCSelector( Tables.users() );
         SameCredentialsBuilder builder = new SameCredentialsBuilder( Creds.joe() );
         builder.build( new SQLExpressionBuilder( Tables.users() ), selector );
 
-        assertTrue( m_realm.find( selector ) );
+        assertEquals( new UsernamePrincipal( "joe" ), m_realm.find( selector ) );
+    }
+
+    public void testAuthenticationFailsIfSelectionYieldsEmptyResult() throws Exception
+    {
+        JDBCSelector selector = new JDBCSelector( Tables.users() );
+        SameCredentialsBuilder builder = new SameCredentialsBuilder( Creds.jane() );
+        builder.build( new SQLExpressionBuilder( Tables.users() ), selector );
+
+        assertNull( m_realm.find( selector ) );
     }
 
+//    public void testValidationSucceedsIfCredentialSetIsMatchedAgainstDatabase()
+//    {
+//        JDBCSelector selector = new JDBCSelector( Tables.users() );
+//        SameCredentialsBuilder builder = new SameCredentialsBuilder( Creds.joe() );
+//        builder.build( new SQLExpressionBuilder( Tables.users() ), selector );
+//
+//        assertEquals( new UsernamePrincipal( "joe" ), m_realm.validate( Creds.joe(), selector ) );
+//    }
+
     public void testThrowsJDBCExceptionIfSQLExceptionOccurs()
     {
         JDBCSelector selector = new JDBCSelector( undefinedTable() );
 
         SameCredentialsBuilder builder = new SameCredentialsBuilder( Creds.joe() );
-        builder.build( new SQLExpressionBuilder(Tables.users()), selector );
+        builder.build( new SQLExpressionBuilder( Tables.users() ), selector );
 
         try
         {
             m_realm.find( selector );
             fail( "JDBCException expected" );
-        }
-        catch ( JDBCException expected )
+        } catch ( JDBCException expected )
         {
             assertTrue( true );
         }

Modified: incubator/directory/janus/trunk/jdbc/src/test/org/apache/janus/authentication/realm/JDBCSelectorTest.java
Url: http://svn.apache.org/viewcvs/incubator/directory/janus/trunk/jdbc/src/test/org/apache/janus/authentication/realm/JDBCSelectorTest.java?view=diff&rev=109673&p1=incubator/directory/janus/trunk/jdbc/src/test/org/apache/janus/authentication/realm/JDBCSelectorTest.java&r1=109672&p2=incubator/directory/janus/trunk/jdbc/src/test/org/apache/janus/authentication/realm/JDBCSelectorTest.java&r2=109673
==============================================================================
--- incubator/directory/janus/trunk/jdbc/src/test/org/apache/janus/authentication/realm/JDBCSelectorTest.java	(original)
+++ incubator/directory/janus/trunk/jdbc/src/test/org/apache/janus/authentication/realm/JDBCSelectorTest.java	Fri Dec  3 05:26:11 2004
@@ -19,8 +19,6 @@
 import junit.framework.TestCase;
 
 import java.sql.Connection;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
 
 public class JDBCSelectorTest extends TestCase
 {
@@ -52,7 +50,7 @@
     public void testFindsDataBasedOnCredentialExpression() throws Exception
     {
         m_selector.addExpression( new EqExpression( Columns.username(), "joe" ) );
-        assertTrue( m_selector.select( m_connection ) );
+        assertEquals( Creds.joe(), m_selector.select( m_connection ) );
     }
 
     public void testSupportsMultipleCredentialExpressions() throws Exception
@@ -60,14 +58,14 @@
         m_selector.addExpression( new EqExpression( Columns.username(), "joe" ) );
         m_selector.addExpression( new EqExpression( Columns.password(), "foo" ) );
 
-        assertTrue( m_selector.select( m_connection ) );
+        assertEquals( Creds.joe(), m_selector.select( m_connection ) );
     }
 
     public void testSupportsAndExpressions() throws Exception
     {
         m_selector.addExpression( new AndExpression( new EqExpression( Columns.username(), "joe" ),
                 new EqExpression( Columns.password(), "foo" ) ) );
-        assertTrue( m_selector.select( m_connection ) );
+        assertEquals( Creds.joe(), m_selector.select( m_connection ) );
     }
 
     public void testRejectsNonSQLExpressions()