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())