Author: eevans
Date: Wed Sep  1 16:16:08 2010
New Revision: 991586

URL: http://svn.apache.org/viewvc?rev=991586&view=rev
Log:
login method implementation for avro rpc

Patch by Nick Bailey (w/ minor changes); reviewed by eevans

Modified:
    cassandra/trunk/interface/cassandra.genavro
    
cassandra/trunk/src/java/org/apache/cassandra/auth/AllowAllAuthenticator.java
    cassandra/trunk/src/java/org/apache/cassandra/auth/IAuthenticator.java
    cassandra/trunk/src/java/org/apache/cassandra/auth/SimpleAuthenticator.java
    cassandra/trunk/src/java/org/apache/cassandra/avro/CassandraServer.java
    cassandra/trunk/src/java/org/apache/cassandra/service/ClientState.java

Modified: cassandra/trunk/interface/cassandra.genavro
URL: 
http://svn.apache.org/viewvc/cassandra/trunk/interface/cassandra.genavro?rev=991586&r1=991585&r2=991586&view=diff
==============================================================================
--- cassandra/trunk/interface/cassandra.genavro (original)
+++ cassandra/trunk/interface/cassandra.genavro Wed Sep  1 16:16:08 2010
@@ -140,6 +140,10 @@ protocol Cassandra {
         bytes key;
         int count;
     }
+    
+    record AuthenticationRequest {
+         map<string> credentials;
+    }
 
     enum ConsistencyLevel {
         ZERO, ONE, QUORUM, DCQUORUM, DCQUORUMSYNC, ALL
@@ -161,6 +165,19 @@ protocol Cassandra {
         union { string, null } why;
     }
 
+    error AuthenticationException {
+        union { string, null } why;
+    }
+
+    error AuthorizationException {
+        union { string, null } why;
+    }
+
+    void login (AuthenticationRequest auth_request)
+    throws AuthenticationException, AuthorizationException;
+
+    void set_keyspace(string keyspace) throws InvalidRequestException;
+
     ColumnOrSuperColumn get(bytes key,
                             ColumnPath column_path,
                             ConsistencyLevel consistency_level)
@@ -236,8 +253,6 @@ protocol Cassandra {
     string system_drop_column_family(string column_family)
     throws InvalidRequestException;
 
-    void set_keyspace(string keyspace) throws InvalidRequestException;
-
     array<string> describe_keyspaces();
     
     KsDef describe_keyspace(string keyspace) throws NotFoundException;

Modified: 
cassandra/trunk/src/java/org/apache/cassandra/auth/AllowAllAuthenticator.java
URL: 
http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/auth/AllowAllAuthenticator.java?rev=991586&r1=991585&r2=991586&view=diff
==============================================================================
--- 
cassandra/trunk/src/java/org/apache/cassandra/auth/AllowAllAuthenticator.java 
(original)
+++ 
cassandra/trunk/src/java/org/apache/cassandra/auth/AllowAllAuthenticator.java 
Wed Sep  1 16:16:08 2010
@@ -36,7 +36,7 @@ public class AllowAllAuthenticator imple
     }
 
     @Override
-    public AuthenticatedUser authenticate(Map<String,String> credentials) 
throws AuthenticationException
+    public AuthenticatedUser authenticate(Map<? extends CharSequence,? extends 
CharSequence> credentials) throws AuthenticationException
     {
         return USER;
     }

Modified: cassandra/trunk/src/java/org/apache/cassandra/auth/IAuthenticator.java
URL: 
http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/auth/IAuthenticator.java?rev=991586&r1=991585&r2=991586&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/auth/IAuthenticator.java 
(original)
+++ cassandra/trunk/src/java/org/apache/cassandra/auth/IAuthenticator.java Wed 
Sep  1 16:16:08 2010
@@ -36,7 +36,7 @@ public interface IAuthenticator
      * @param credentials An implementation specific collection of identifying 
information.
      * @return A successfully authenticated user: should throw 
AuthenticationException rather than ever returning null.
      */
-    public AuthenticatedUser authenticate(Map<String,String> credentials) 
throws AuthenticationException;
+    public AuthenticatedUser authenticate(Map<? extends CharSequence,? extends 
CharSequence> credentials) throws AuthenticationException;
 
     public void validateConfiguration() throws ConfigurationException;
 }

Modified: 
cassandra/trunk/src/java/org/apache/cassandra/auth/SimpleAuthenticator.java
URL: 
http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/auth/SimpleAuthenticator.java?rev=991586&r1=991585&r2=991586&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/auth/SimpleAuthenticator.java 
(original)
+++ cassandra/trunk/src/java/org/apache/cassandra/auth/SimpleAuthenticator.java 
Wed Sep  1 16:16:08 2010
@@ -50,7 +50,7 @@ public class SimpleAuthenticator impleme
     }
 
     @Override
-    public AuthenticatedUser authenticate(Map<String,String> credentials) 
throws AuthenticationException
+    public AuthenticatedUser authenticate(Map<? extends CharSequence,? extends 
CharSequence> credentials) throws AuthenticationException
     {
         String pmode_plain = System.getProperty(PMODE_PROPERTY);
         PasswordMode mode = PasswordMode.PLAIN;
@@ -75,11 +75,19 @@ public class SimpleAuthenticator impleme
 
         String pfilename = System.getProperty(PASSWD_FILENAME_PROPERTY);
 
-        String username = credentials.get(USERNAME_KEY);
-        if (null == username) throw new 
AuthenticationException("Authentication request was missing the required key '" 
+ USERNAME_KEY + "'");
-
-        String password = credentials.get(PASSWORD_KEY);
-        if (null == password) throw new 
AuthenticationException("Authentication request was missing the required key '" 
+ PASSWORD_KEY + "'");
+        String username = null;
+        CharSequence user = credentials.get(USERNAME_KEY);
+        if (null == user) 
+            throw new AuthenticationException("Authentication request was 
missing the required key '" + USERNAME_KEY + "'");
+        else
+            username = user.toString();
+
+        String password = null;
+        CharSequence pass = credentials.get(PASSWORD_KEY);
+        if (null == pass) 
+            throw new AuthenticationException("Authentication request was 
missing the required key '" + PASSWORD_KEY + "'");
+        else
+            password = pass.toString();
 
         boolean authenticated = false;
 

Modified: 
cassandra/trunk/src/java/org/apache/cassandra/avro/CassandraServer.java
URL: 
http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/avro/CassandraServer.java?rev=991586&r1=991585&r2=991586&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/avro/CassandraServer.java 
(original)
+++ cassandra/trunk/src/java/org/apache/cassandra/avro/CassandraServer.java Wed 
Sep  1 16:16:08 2010
@@ -104,6 +104,19 @@ public class CassandraServer implements 
     }
 
     @Override
+    public Void login(AuthenticationRequest auth_request) throws 
AuthenticationException, AuthorizationException 
+    {
+        try
+        {
+            clientState.login(auth_request.credentials);
+        }
+        catch (org.apache.cassandra.thrift.AuthenticationException thriftE) {
+            throw new AuthenticationException();
+        }
+        return null;
+    }
+
+    @Override
     public ColumnOrSuperColumn get(ByteBuffer key, ColumnPath columnPath, 
ConsistencyLevel consistencyLevel)
     throws AvroRemoteException, InvalidRequestException, NotFoundException, 
UnavailableException, TimedOutException {
         if (logger.isDebugEnabled())

Modified: cassandra/trunk/src/java/org/apache/cassandra/service/ClientState.java
URL: 
http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/service/ClientState.java?rev=991586&r1=991585&r2=991586&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/service/ClientState.java 
(original)
+++ cassandra/trunk/src/java/org/apache/cassandra/service/ClientState.java Wed 
Sep  1 16:16:08 2010
@@ -90,7 +90,7 @@ public class ClientState
     /**
      * Attempts to login this client with the given credentials map.
      */
-    public void login(Map<String,String> credentials) throws 
AuthenticationException
+    public void login(Map<? extends CharSequence,? extends CharSequence> 
credentials) throws AuthenticationException
     {
         AuthenticatedUser user = 
DatabaseDescriptor.getAuthenticator().authenticate(credentials);
         if (logger.isDebugEnabled())


Reply via email to