Author: [email protected]
Date: Tue Jul 19 16:43:37 2011
New Revision: 1225

Log:
[AMDATUCASSANDRA-5] Changes necessary for latest changes in Amdatu Auth 
0.2.0-SNAPSHOT

Modified:
   
trunk/amdatu-cassandra/cassandra-store-token/src/main/java/org/amdatu/cassandra/store/token/service/CassandraTokenStorageProviderImpl.java
   
trunk/amdatu-cassandra/cassandra-store-token/src/test/java/org/amdatu/cassandra/test/unit/CassandraTokenStoreTest.java

Modified: 
trunk/amdatu-cassandra/cassandra-store-token/src/main/java/org/amdatu/cassandra/store/token/service/CassandraTokenStorageProviderImpl.java
==============================================================================
--- 
trunk/amdatu-cassandra/cassandra-store-token/src/main/java/org/amdatu/cassandra/store/token/service/CassandraTokenStorageProviderImpl.java
  (original)
+++ 
trunk/amdatu-cassandra/cassandra-store-token/src/main/java/org/amdatu/cassandra/store/token/service/CassandraTokenStorageProviderImpl.java
  Tue Jul 19 16:43:37 2011
@@ -17,9 +17,22 @@
 
 import static 
org.amdatu.cassandra.store.token.service.TokenColumnFamilyProvider.CF_TOKEN;
 
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import me.prettyprint.hector.api.beans.HColumn;
+
+import org.amdatu.authentication.tokenprovider.Token;
 import org.amdatu.authentication.tokenprovider.TokenStorageProvider;
 import org.amdatu.cassandra.application.ThriftException;
 import org.amdatu.cassandra.persistencemanager.CassandraPersistenceManager;
+import org.codehaus.jackson.JsonParseException;
+import org.codehaus.jackson.map.JsonMappingException;
+import org.codehaus.jackson.map.ObjectMapper;
+import org.codehaus.jackson.map.type.TypeFactory;
+import org.json.JSONObject;
 import org.osgi.service.log.LogService;
 
 /**
@@ -33,7 +46,9 @@
     private volatile LogService m_logService;
 
     // Column names
-    private static final String C_TOKEN = "token";
+    private static final String C_SECRET = "secret";
+    private static final String C_TIMESTAMP = "timestamp";
+    private static final String C_PROPERTIES = "properties";
 
     /**
      * Default (empty) constructor.
@@ -52,10 +67,13 @@
         m_logService = logService;
     }
 
-    public void addToken(final String token) {
+    public void addToken(final Token token) {
         try {
             // We use the token also as row key
-            m_pm.setValue(CF_TOKEN, token, null, C_TOKEN, token);
+            String rowKey = token.getToken();
+            m_pm.setValue(CF_TOKEN, rowKey, null, C_SECRET, 
token.getTokenSecret());
+            m_pm.setValue(CF_TOKEN, rowKey, null, C_TIMESTAMP, new 
Long(token.getTimestamp()).toString());
+            m_pm.setValue(CF_TOKEN, rowKey, null, C_PROPERTIES, 
mapToString(token.getProperties()));
         }
         catch (ThriftException e) {
             m_logService.log(LogService.LOG_ERROR, "Could not store token '" + 
token + "'", e);
@@ -64,8 +82,8 @@
 
     public boolean hasToken(final String token) {
         try {
-            String value = m_pm.getValue(CF_TOKEN, token, null, C_TOKEN, 
String.class);
-            return value != null && !value.isEmpty();
+            String value = m_pm.getValue(CF_TOKEN, token, null, C_SECRET, 
String.class);
+            return value != null;
         }
         catch (ThriftException e) {
             m_logService.log(LogService.LOG_ERROR, "Could not retrieve token 
'" + token + "'", e);
@@ -73,12 +91,56 @@
         return false;
     }
 
-    public void removeToken(final String token) {
+    public void removeToken(final Token token) {
         try {
-            m_pm.deleteRow(CF_TOKEN, token);
+            m_pm.deleteRow(CF_TOKEN, token.getToken());
         }
         catch (ThriftException e) {
             m_logService.log(LogService.LOG_ERROR, "Could not remove token '" 
+ token + "'", e);
         }
     }
+
+    public Token getToken(String token) {
+        List<HColumn<String, String>> columns = m_pm.getColumns(CF_TOKEN, 
token, String.class);
+        String secret = null;
+        long timestamp = 0L;
+        Map<String, String> properties = null;
+        for (HColumn<String, String> col : columns) {
+            if (C_SECRET.equals(col.getName())) {
+                secret = col.getValue();
+            }
+            else if (C_TIMESTAMP.equals(col.getName())) {
+                timestamp = Long.parseLong(col.getValue());
+            }
+            else if (C_SECRET.equals(col.getName())) {
+                properties = stringToMap(col.getValue());
+            }
+        }
+        Token t = new Token(token, secret, timestamp);
+        t.setProperties(properties);
+        return t;
+    }
+    
+    private String mapToString(Map<String, String> map) {
+        JSONObject json = new JSONObject(map);
+        return json.toString();
+    }
+
+    private Map<String, String> stringToMap(String json) {
+        String errorMsg = "Could not convert JSON expression to Map<String, 
String>. JSON expression:\r\n" + json;
+        try {
+            Map<String, String> result = new ObjectMapper().readValue(json, 
TypeFactory.mapType(HashMap.class, String.class, String.class));
+            return result;
+        }
+        catch (JsonParseException e) {
+            m_logService.log(LogService.LOG_ERROR, errorMsg, e);
+        }
+        catch (JsonMappingException e) {
+            m_logService.log(LogService.LOG_ERROR, errorMsg, e);
+        }
+        catch (IOException e) {
+            m_logService.log(LogService.LOG_ERROR, errorMsg, e);
+        }
+        return null;
+    }
 }

Modified: 
trunk/amdatu-cassandra/cassandra-store-token/src/test/java/org/amdatu/cassandra/test/unit/CassandraTokenStoreTest.java
==============================================================================
--- 
trunk/amdatu-cassandra/cassandra-store-token/src/test/java/org/amdatu/cassandra/test/unit/CassandraTokenStoreTest.java
      (original)
+++ 
trunk/amdatu-cassandra/cassandra-store-token/src/test/java/org/amdatu/cassandra/test/unit/CassandraTokenStoreTest.java
      Tue Jul 19 16:43:37 2011
@@ -16,6 +16,7 @@
  */
 package org.amdatu.cassandra.test.unit;
 
+import org.amdatu.authentication.tokenprovider.Token;
 import org.amdatu.cassandra.listener.ColumnFamilyDefinition;
 import 
org.amdatu.cassandra.store.token.service.CassandraTokenStorageProviderImpl;
 import org.amdatu.cassandra.store.token.service.TokenColumnFamilyProvider;
@@ -37,11 +38,13 @@
         CassandraTokenStorageProviderImpl tokenStore = new 
CassandraTokenStorageProviderImpl(pm, logService);
         
         // OK, I agree, this will not be the most complex unit test...
-        String token = "lwhfsbfgkl!@#$%^&*()~\\ \"[]{}0";
-        Assert.assertFalse(tokenStore.hasToken(token));
+        String key = "i_am_the_token";
+        String secret = "i_am_the_secret";
+        Token token = new Token(key, secret, System.currentTimeMillis());
+        Assert.assertFalse(tokenStore.hasToken(key));
         tokenStore.addToken(token);
-        Assert.assertTrue(tokenStore.hasToken(token));
+        Assert.assertTrue(tokenStore.hasToken(key));
         tokenStore.removeToken(token);
-        Assert.assertFalse(tokenStore.hasToken(token));
+        Assert.assertFalse(tokenStore.hasToken(key));
     }
 }
_______________________________________________
Amdatu-commits mailing list
[email protected]
http://lists.amdatu.org/mailman/listinfo/amdatu-commits

Reply via email to