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 19:09:05 UTC

svn commit: r109714 - 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 10:09:03 2004
New Revision: 109714

URL: http://svn.apache.org/viewcvs?view=rev&rev=109714
Log:
Got a working JDBC Realm implementation
Modified:
   incubator/directory/janus/trunk/jdbc/src/java/org/apache/janus/authentication/realm/Converter.java
   incubator/directory/janus/trunk/jdbc/src/java/org/apache/janus/authentication/realm/DefaultConverter.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/Table.java
   incubator/directory/janus/trunk/jdbc/src/test/org/apache/janus/authentication/realm/Creds.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/Tables.java

Modified: incubator/directory/janus/trunk/jdbc/src/java/org/apache/janus/authentication/realm/Converter.java
Url: http://svn.apache.org/viewcvs/incubator/directory/janus/trunk/jdbc/src/java/org/apache/janus/authentication/realm/Converter.java?view=diff&rev=109714&p1=incubator/directory/janus/trunk/jdbc/src/java/org/apache/janus/authentication/realm/Converter.java&r1=109713&p2=incubator/directory/janus/trunk/jdbc/src/java/org/apache/janus/authentication/realm/Converter.java&r2=109714
==============================================================================
--- incubator/directory/janus/trunk/jdbc/src/java/org/apache/janus/authentication/realm/Converter.java	(original)
+++ incubator/directory/janus/trunk/jdbc/src/java/org/apache/janus/authentication/realm/Converter.java	Fri Dec  3 10:09:03 2004
@@ -19,6 +19,4 @@
 public interface Converter
 {
     String convert( Object value );
-
-    boolean supports( Class type );
 }

Modified: incubator/directory/janus/trunk/jdbc/src/java/org/apache/janus/authentication/realm/DefaultConverter.java
Url: http://svn.apache.org/viewcvs/incubator/directory/janus/trunk/jdbc/src/java/org/apache/janus/authentication/realm/DefaultConverter.java?view=diff&rev=109714&p1=incubator/directory/janus/trunk/jdbc/src/java/org/apache/janus/authentication/realm/DefaultConverter.java&r1=109713&p2=incubator/directory/janus/trunk/jdbc/src/java/org/apache/janus/authentication/realm/DefaultConverter.java&r2=109714
==============================================================================
--- incubator/directory/janus/trunk/jdbc/src/java/org/apache/janus/authentication/realm/DefaultConverter.java	(original)
+++ incubator/directory/janus/trunk/jdbc/src/java/org/apache/janus/authentication/realm/DefaultConverter.java	Fri Dec  3 10:09:03 2004
@@ -22,9 +22,4 @@
     {
         return value.toString();
     }
-
-    public boolean supports( Class type )
-    {
-        return true;
-    }
 }

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=109714&p1=incubator/directory/janus/trunk/jdbc/src/java/org/apache/janus/authentication/realm/JDBCRealm.java&r1=109713&p2=incubator/directory/janus/trunk/jdbc/src/java/org/apache/janus/authentication/realm/JDBCRealm.java&r2=109714
==============================================================================
--- 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 10:09:03 2004
@@ -19,16 +19,21 @@
 import org.apache.janus.authentication.CredentialSet;
 
 import javax.sql.DataSource;
+import java.security.Principal;
 import java.sql.Connection;
 import java.sql.SQLException;
-import java.security.Principal;
 
-public class JDBCRealm
+public class JDBCRealm implements Realm
 {
     private final DataSource m_ds;
     private final Table m_table;
     private final AuthenticationMethod m_authenticationMethod;
 
+    public JDBCRealm( DataSource ds, Table table )
+    {
+        this( ds, table, new UsernamePasswordAuthentication() );
+    }
+
     public JDBCRealm( DataSource ds, Table table, AuthenticationMethod authenticationMethod )
     {
         m_ds = ds;
@@ -36,7 +41,26 @@
         m_authenticationMethod = authenticationMethod;
     }
 
-    public Principal find( JDBCSelector selector ) throws JDBCException
+    public Principal validateCredentials( CredentialSet credentialSet )
+    {
+        if ( !m_authenticationMethod.supports( credentialSet ) ) return null;
+
+        CredentialSet creds = findAuthenticatedMatch( credentialSet );
+
+        return creds != null ? m_authenticationMethod.principal( creds ) : null;
+    }
+
+    private CredentialSet findAuthenticatedMatch( CredentialSet credentialSet )
+    {
+        SelectorBuilder selectorBuilder = m_authenticationMethod.getAuthenticationSelector( credentialSet );
+        JDBCSelector selector = new JDBCSelector( m_table );
+        selectorBuilder.build( new SQLExpressionBuilder( m_table ), selector );
+
+        CredentialSet creds = find( selector );
+        return creds;
+    }
+
+    private CredentialSet find( JDBCSelector selector ) throws JDBCException
     {
         Connection conn = null;
         CredentialSet creds = null;
@@ -44,29 +68,27 @@
         {
             conn = m_ds.getConnection();
             creds = selector.select( conn );
-        }
-        catch ( SQLException e )
+        } catch ( SQLException e )
         {
             throw new JDBCException( e );
-        }
-        finally
+        } finally
         {
             closeConnection( conn );
         }
 
-        return creds != null ? m_authenticationMethod.principal( creds ) : null;
+        return creds;
     }
 
     private void closeConnection( Connection conn )
     {
-        if (conn == null) return;
+        if ( conn == null ) return;
 
         try
         {
             conn.close();
-        }
-        catch ( SQLException ignored )
+        } catch ( SQLException ignored )
         {
         }
     }
 }
+

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=109714&p1=incubator/directory/janus/trunk/jdbc/src/java/org/apache/janus/authentication/realm/Table.java&r1=109713&p2=incubator/directory/janus/trunk/jdbc/src/java/org/apache/janus/authentication/realm/Table.java&r2=109714
==============================================================================
--- 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 10:09:03 2004
@@ -69,11 +69,6 @@
         return column;
     }
 
-    public boolean supports( Class type )
-    {
-        return m_columns.containsKey( type );
-    }
-
     public CredentialSet instanciate( ResultSet rs )
     {
         CredentialSet creds = new CredentialSet();

Modified: incubator/directory/janus/trunk/jdbc/src/test/org/apache/janus/authentication/realm/Creds.java
Url: http://svn.apache.org/viewcvs/incubator/directory/janus/trunk/jdbc/src/test/org/apache/janus/authentication/realm/Creds.java?view=diff&rev=109714&p1=incubator/directory/janus/trunk/jdbc/src/test/org/apache/janus/authentication/realm/Creds.java&r1=109713&p2=incubator/directory/janus/trunk/jdbc/src/test/org/apache/janus/authentication/realm/Creds.java&r2=109714
==============================================================================
--- incubator/directory/janus/trunk/jdbc/src/test/org/apache/janus/authentication/realm/Creds.java	(original)
+++ incubator/directory/janus/trunk/jdbc/src/test/org/apache/janus/authentication/realm/Creds.java	Fri Dec  3 10:09:03 2004
@@ -17,6 +17,7 @@
 package org.apache.janus.authentication.realm;
 
 import org.apache.janus.authentication.CredentialSet;
+import org.apache.janus.authentication.Credential;
 
 public class Creds
 {
@@ -36,5 +37,33 @@
         creds.add( new UsernameCredential( "jane" ) );
         creds.add( new PasswordCredential( "bar" ) );
         return creds;
+    }
+
+    public static CredentialSet unsupported()
+    {
+        CredentialSet creds = new CredentialSet();
+        creds.add( new UsernameCredential( "joe" ) );
+        creds.add( new EyeColorCredential( "brown" ) );
+        return creds;
+    }
+
+    public static class EyeColorCredential implements Credential
+    {
+        private String m_color;
+
+        public EyeColorCredential( String color )
+        {
+            m_color = color;
+        }
+
+        public Object getValue()
+        {
+            return m_color;
+        }
+
+        public void setValue( Object value )
+        {
+            m_color = (String) value;
+        }
     }
 }

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=109714&p1=incubator/directory/janus/trunk/jdbc/src/test/org/apache/janus/authentication/realm/JDBCRealmTest.java&r1=109713&p2=incubator/directory/janus/trunk/jdbc/src/test/org/apache/janus/authentication/realm/JDBCRealmTest.java&r2=109714
==============================================================================
--- 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 10:09:03 2004
@@ -35,7 +35,7 @@
         m_db.create( table );
         m_db.insertInto( table, Creds.joe() );
 
-        m_realm = new JDBCRealm( m_db.getDataSource(), table, new UsernamePasswordAuthentication() );
+        m_realm = new JDBCRealm( m_db.getDataSource(), table );
     }
 
     protected void tearDown() throws Exception
@@ -43,60 +43,32 @@
         m_db.dropAll();
     }
 
-    /**
-     * invalid credentials should return null
-     */
-
-    public void testAuthenticationSucceedsIfCredentialsCanBeSelected() throws Exception
+    public void testAuthenticationSucceedsIfCredentialsAreMatchedInDatabase() throws Exception
     {
-        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.find( selector ) );
+        assertEquals( new UsernamePrincipal( "joe" ), m_realm.validateCredentials( Creds.joe() ) );
     }
 
     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 ) );
+        assertNull( m_realm.validateCredentials( Creds.jane() ) );
     }
 
-//    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 testValidationFailsIfCredentialSetNotSupported()
+    {
+        assertNull( "Unsupported credential set was validated", m_realm.validateCredentials( Creds.unsupported() ) );
+    }
 
     public void testThrowsJDBCExceptionIfSQLExceptionOccurs()
     {
-        JDBCSelector selector = new JDBCSelector( undefinedTable() );
-
-        SameCredentialsBuilder builder = new SameCredentialsBuilder( Creds.joe() );
-        builder.build( new SQLExpressionBuilder( Tables.users() ), selector );
-
+        m_realm = new JDBCRealm( m_db.getDataSource(), Tables.undefined() );
         try
         {
-            m_realm.find( selector );
+            m_realm.validateCredentials( Creds.joe() );
             fail( "JDBCException expected" );
         } catch ( JDBCException expected )
         {
             assertTrue( true );
         }
-    }
-
-    private Table undefinedTable()
-    {
-        Table table = new Table( "UNDEFINED" );
-        table.addColumn( Columns.username() );
-        table.addColumn( Columns.password() );
-        return table;
     }
 }
 

Modified: incubator/directory/janus/trunk/jdbc/src/test/org/apache/janus/authentication/realm/Tables.java
Url: http://svn.apache.org/viewcvs/incubator/directory/janus/trunk/jdbc/src/test/org/apache/janus/authentication/realm/Tables.java?view=diff&rev=109714&p1=incubator/directory/janus/trunk/jdbc/src/test/org/apache/janus/authentication/realm/Tables.java&r1=109713&p2=incubator/directory/janus/trunk/jdbc/src/test/org/apache/janus/authentication/realm/Tables.java&r2=109714
==============================================================================
--- incubator/directory/janus/trunk/jdbc/src/test/org/apache/janus/authentication/realm/Tables.java	(original)
+++ incubator/directory/janus/trunk/jdbc/src/test/org/apache/janus/authentication/realm/Tables.java	Fri Dec  3 10:09:03 2004
@@ -27,4 +27,12 @@
         table.addColumn( Columns.password() );
         return table;
     }
+
+    public static Table undefined()
+    {
+        Table table = new Table( "UNDEFINED" );
+        table.addColumn( Columns.username() );
+        table.addColumn( Columns.password() );
+        return table;
+    }
 }