changeset 836:2bd8ed8f18c7

Fix Eclipse build by lowering commons-codec version The Eclipse build is currently broken due to the new dependency on commons-codec in web-client. The version initially specified was 1.7, but Eclipse only has access to 1.3 in its repos. This commit changes the Thermostat build to use version 1.3. The version of commons-codec 1.3 on Maven Central doesn't have OSGi metadata, so I have switched to the Apache Servicemix package. Also some of the API used throughout Thermostat isn't present in 1.3, but this new API is for convenience. I have added some UTF-8 translating functions to StringUtils that mimic the behaviour of these new methods. Reviewed-by: vanaltj Review-thread: http://icedtea.classpath.org/pipermail/thermostat/2012-December/004519.html
author Elliott Baron <ebaron@redhat.com>
date Mon, 10 Dec 2012 16:45:55 -0500
parents 5d0ca9f27097
children 15bdfbd07f48
files agent/command/pom.xml agent/command/src/main/java/com/redhat/thermostat/agent/command/internal/ServerHandler.java client/command/pom.xml client/command/src/main/java/com/redhat/thermostat/client/command/internal/RequestQueueImpl.java common/core/src/main/java/com/redhat/thermostat/common/utils/StringUtils.java pom.xml web/client/pom.xml web/server/pom.xml web/server/src/main/java/com/redhat/thermostat/web/server/WebStorageEndPoint.java web/server/src/test/java/com/redhat/thermostat/web/server/WebStorageEndpointTest.java
diffstat 10 files changed, 43 insertions(+), 17 deletions(-) [+]
line wrap: on
line diff
--- a/agent/command/pom.xml	Mon Dec 10 10:24:20 2012 -0500
+++ b/agent/command/pom.xml	Mon Dec 10 16:45:55 2012 -0500
@@ -81,8 +81,8 @@
     </dependency>
 
     <dependency>
-      <groupId>commons-codec</groupId>
-      <artifactId>commons-codec</artifactId>
+      <groupId>org.apache.servicemix.bundles</groupId>
+      <artifactId>org.apache.servicemix.bundles.commons-codec</artifactId>
       <version>${commons-codec.version}</version>
     </dependency>
 
--- a/agent/command/src/main/java/com/redhat/thermostat/agent/command/internal/ServerHandler.java	Mon Dec 10 10:24:20 2012 -0500
+++ b/agent/command/src/main/java/com/redhat/thermostat/agent/command/internal/ServerHandler.java	Mon Dec 10 16:45:55 2012 -0500
@@ -54,10 +54,10 @@
 import com.redhat.thermostat.agent.command.ReceiverRegistry;
 import com.redhat.thermostat.agent.command.RequestReceiver;
 import com.redhat.thermostat.common.command.Request;
-import com.redhat.thermostat.common.command.Request.RequestType;
 import com.redhat.thermostat.common.command.Response;
 import com.redhat.thermostat.common.command.Response.ResponseType;
 import com.redhat.thermostat.common.utils.LoggingUtils;
+import com.redhat.thermostat.common.utils.StringUtils;
 import com.redhat.thermostat.storage.core.AuthToken;
 import com.redhat.thermostat.storage.core.SecureStorage;
 import com.redhat.thermostat.storage.core.Storage;
@@ -112,9 +112,9 @@
 
     private boolean authenticateRequest(Request request, SecureStorage storage) {
         String clientTokenStr = request.getParameter(Request.CLIENT_TOKEN);
-        byte[] clientToken = Base64.decodeBase64(clientTokenStr);
+        byte[] clientToken = Base64.decodeBase64(StringUtils.fromUtf8String((clientTokenStr)));
         String authTokenStr = request.getParameter(Request.AUTH_TOKEN);
-        byte[] authToken = Base64.decodeBase64(authTokenStr);
+        byte[] authToken = Base64.decodeBase64(StringUtils.fromUtf8String((authTokenStr)));
         AuthToken token = new AuthToken(authToken, clientToken);
         return storage.verifyToken(token);
     }
@@ -124,5 +124,5 @@
         logger.log(Level.WARNING, "Unexpected exception from downstream.", e.getCause());
         e.getChannel().close();
     }
-
+    
 }
--- a/client/command/pom.xml	Mon Dec 10 10:24:20 2012 -0500
+++ b/client/command/pom.xml	Mon Dec 10 16:45:55 2012 -0500
@@ -72,8 +72,8 @@
     </dependency>
 
     <dependency>
-      <groupId>commons-codec</groupId>
-      <artifactId>commons-codec</artifactId>
+      <groupId>org.apache.servicemix.bundles</groupId>
+      <artifactId>org.apache.servicemix.bundles.commons-codec</artifactId>
       <version>${commons-codec.version}</version>
     </dependency>
     <dependency>
--- a/client/command/src/main/java/com/redhat/thermostat/client/command/internal/RequestQueueImpl.java	Mon Dec 10 10:24:20 2012 -0500
+++ b/client/command/src/main/java/com/redhat/thermostat/client/command/internal/RequestQueueImpl.java	Mon Dec 10 16:45:55 2012 -0500
@@ -52,6 +52,7 @@
 import com.redhat.thermostat.common.command.RequestResponseListener;
 import com.redhat.thermostat.common.command.Response;
 import com.redhat.thermostat.common.command.Response.ResponseType;
+import com.redhat.thermostat.common.utils.StringUtils;
 import com.redhat.thermostat.storage.core.AuthToken;
 import com.redhat.thermostat.storage.core.SecureStorage;
 import com.redhat.thermostat.storage.core.Storage;
@@ -88,8 +89,8 @@
     private void authenticateRequest(Request request, SecureStorage storage) {
         try {
             AuthToken token = storage.generateToken();
-            request.setParameter(Request.CLIENT_TOKEN, Base64.encodeBase64String(token.getClientToken()));
-            request.setParameter(Request.AUTH_TOKEN, Base64.encodeBase64String(token.getToken()));
+            request.setParameter(Request.CLIENT_TOKEN, StringUtils.toUtf8String(Base64.encodeBase64Chunked(token.getClientToken())));
+            request.setParameter(Request.AUTH_TOKEN, StringUtils.toUtf8String(Base64.encodeBase64Chunked(token.getToken())));
         } catch (StorageException ex) {
             fireComplete(request, new Response(ResponseType.AUTH_FAILED));
         }
@@ -153,4 +154,5 @@
             listener.fireComplete(request, response);
         }
     }
+    
 }
--- a/common/core/src/main/java/com/redhat/thermostat/common/utils/StringUtils.java	Mon Dec 10 10:24:20 2012 -0500
+++ b/common/core/src/main/java/com/redhat/thermostat/common/utils/StringUtils.java	Mon Dec 10 16:45:55 2012 -0500
@@ -39,6 +39,7 @@
 import java.io.ByteArrayInputStream;
 import java.io.InputStream;
 import java.io.UnsupportedEncodingException;
+import java.nio.charset.Charset;
 
 public class StringUtils {
 
@@ -65,5 +66,13 @@
         }
         return builder.toString();
     }
+    
+    public static String toUtf8String(byte[] data) {
+    	return new String(data, Charset.forName("UTF-8"));
+    }
+    
+    public static byte[] fromUtf8String(String str) {
+    	return str.getBytes(Charset.forName("UTF-8"));
+    }
 
 }
--- a/pom.xml	Mon Dec 10 10:24:20 2012 -0500
+++ b/pom.xml	Mon Dec 10 16:45:55 2012 -0500
@@ -76,7 +76,7 @@
     <commons-io.version>2.4</commons-io.version>
     <commons-collections.version>3.2.1</commons-collections.version>
     <commons-logging.version>1.1.1</commons-logging.version>
-    <commons-codec.version>1.7</commons-codec.version>
+    <commons-codec.version>1.3_5</commons-codec.version>
 
     <jline.version>2.9</jline.version>
     <lucene.version>3.6.0_1</lucene.version>
--- a/web/client/pom.xml	Mon Dec 10 10:24:20 2012 -0500
+++ b/web/client/pom.xml	Mon Dec 10 16:45:55 2012 -0500
@@ -110,6 +110,11 @@
       <version>${project.version}</version>
     </dependency>
 
+    <dependency>
+      <groupId>org.apache.servicemix.bundles</groupId>
+      <artifactId>org.apache.servicemix.bundles.commons-codec</artifactId>
+      <version>${commons-codec.version}</version>
+    </dependency>
   </dependencies>
 
   <build>
@@ -126,6 +131,8 @@
             <Private-Package>
               com.redhat.thermostat.web.client.internal
             </Private-Package>
+            <!-- Eclipse needs v1.3 -->
+            <Import-Package>org.apache.commons.codec.*;version="[1.3,2)",*</Import-Package>
             <!-- Do not autogenerate uses clauses in Manifests -->
             <_nouses>true</_nouses>
           </instructions>
--- a/web/server/pom.xml	Mon Dec 10 10:24:20 2012 -0500
+++ b/web/server/pom.xml	Mon Dec 10 16:45:55 2012 -0500
@@ -106,8 +106,8 @@
       <version>${commons-io.version}</version>
     </dependency>
     <dependency>
-      <groupId>commons-codec</groupId>
-      <artifactId>commons-codec</artifactId>
+      <groupId>org.apache.servicemix.bundles</groupId>
+      <artifactId>org.apache.servicemix.bundles.commons-codec</artifactId>
       <version>${commons-codec.version}</version>
     </dependency>
 
--- a/web/server/src/main/java/com/redhat/thermostat/web/server/WebStorageEndPoint.java	Mon Dec 10 10:24:20 2012 -0500
+++ b/web/server/src/main/java/com/redhat/thermostat/web/server/WebStorageEndPoint.java	Mon Dec 10 16:45:55 2012 -0500
@@ -61,6 +61,7 @@
 import com.google.gson.GsonBuilder;
 import com.google.gson.JsonArray;
 import com.google.gson.JsonParser;
+import com.redhat.thermostat.common.utils.StringUtils;
 import com.redhat.thermostat.storage.core.AbstractQuery.Sort;
 import com.redhat.thermostat.storage.core.Category;
 import com.redhat.thermostat.storage.core.Cursor;
@@ -394,7 +395,7 @@
         TokenManager tokenManager = (TokenManager) getServletContext().getAttribute(TOKEN_MANAGER_KEY);
         assert tokenManager != null;
         String clientToken = req.getParameter("client-token");
-        byte[] token = Base64.decodeBase64(req.getParameter("token"));
+        byte[] token = Base64.decodeBase64(StringUtils.fromUtf8String(req.getParameter("token")));
         boolean verified = tokenManager.verifyToken(clientToken, token);
         if (! verified) {
             resp.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
--- a/web/server/src/test/java/com/redhat/thermostat/web/server/WebStorageEndpointTest.java	Mon Dec 10 10:24:20 2012 -0500
+++ b/web/server/src/test/java/com/redhat/thermostat/web/server/WebStorageEndpointTest.java	Mon Dec 10 16:45:55 2012 -0500
@@ -76,6 +76,7 @@
 import sun.misc.BASE64Encoder;
 
 import com.google.gson.Gson;
+import com.redhat.thermostat.common.utils.StringUtils;
 import com.redhat.thermostat.storage.core.Categories;
 import com.redhat.thermostat.storage.core.Category;
 import com.redhat.thermostat.storage.core.Cursor;
@@ -560,7 +561,9 @@
         conn.setDoOutput(true);
         conn.setDoInput(true);
         OutputStreamWriter out = new OutputStreamWriter(conn.getOutputStream());
-        out.write("client-token=fluff&token=" + URLEncoder.encode(Base64.encodeBase64String(token), "UTF-8"));
+		out.write("client-token=fluff&token="
+				+ URLEncoder.encode(StringUtils.toUtf8String(Base64
+						.encodeBase64Chunked(token)), "UTF-8"));
         out.flush();
         assertEquals(200, conn.getResponseCode());
     }
@@ -582,7 +585,9 @@
         conn.setDoOutput(true);
         conn.setDoInput(true);
         OutputStreamWriter out = new OutputStreamWriter(conn.getOutputStream());
-        out.write("client-token=fluff&token=" + URLEncoder.encode(Base64.encodeBase64String(token), "UTF-8"));
+		out.write("client-token=fluff&token="
+				+ URLEncoder.encode(StringUtils.toUtf8String(Base64
+						.encodeBase64Chunked(token)), "UTF-8"));
         out.flush();
         assertEquals(401, conn.getResponseCode());
     }
@@ -602,7 +607,9 @@
         conn.setDoOutput(true);
         conn.setDoInput(true);
         OutputStreamWriter out = new OutputStreamWriter(conn.getOutputStream());
-        out.write("client-token=fluff&token=" + URLEncoder.encode(Base64.encodeBase64String(token), "UTF-8"));
+		out.write("client-token=fluff&token="
+				+ URLEncoder.encode(StringUtils.toUtf8String(Base64
+						.encodeBase64Chunked(token)), "UTF-8"));
         out.flush();
         assertEquals(401, conn.getResponseCode());
     }