Author: simonetripodi
Date: Tue Feb 16 19:55:39 2010
New Revision: 910664

URL: http://svn.apache.org/viewvc?rev=910664&view=rev
Log:
added percent encoding algorithm implementation

Modified:
    
labs/amber/signature-api/src/main/java/org/apache/labs/amber/signature/signers/AbstractMethodAlgorithm.java

Modified: 
labs/amber/signature-api/src/main/java/org/apache/labs/amber/signature/signers/AbstractMethodAlgorithm.java
URL: 
http://svn.apache.org/viewvc/labs/amber/signature-api/src/main/java/org/apache/labs/amber/signature/signers/AbstractMethodAlgorithm.java?rev=910664&r1=910663&r2=910664&view=diff
==============================================================================
--- 
labs/amber/signature-api/src/main/java/org/apache/labs/amber/signature/signers/AbstractMethodAlgorithm.java
 (original)
+++ 
labs/amber/signature-api/src/main/java/org/apache/labs/amber/signature/signers/AbstractMethodAlgorithm.java
 Tue Feb 16 19:55:39 2010
@@ -17,7 +17,10 @@
 package org.apache.labs.amber.signature.signers;
 
 import java.net.URL;
+import java.nio.charset.Charset;
+import java.util.BitSet;
 
+import org.apache.commons.codec.net.URLCodec;
 import org.apache.labs.amber.signature.descriptors.Service;
 import org.apache.labs.amber.signature.message.RequestMessage;
 import org.apache.labs.amber.signature.parameters.Parameter;
@@ -66,6 +69,37 @@
     private static final String EMPTY = "";
 
     /**
+     * The default {...@code UTF-8} character encoding.
+     */
+    private static final Charset UTF_8 = Charset.forName("UTF-8");
+
+    /**
+     * The {...@code RFC3986} unreserved chars.
+     */
+    private static final BitSet UNRESERVED_CHARS = new BitSet(256);
+
+    /**
+     * Static unreserved chars bit set initialization.
+     */
+    static {
+        for (byte b = 'A'; b <= 'Z'; b++) {
+            UNRESERVED_CHARS.set(b);
+        }
+        for (byte b = 'a'; b <= 'z'; b++) {
+            UNRESERVED_CHARS.set(b);
+        }
+        for (byte b = '0'; b <= '9'; b++) {
+            UNRESERVED_CHARS.set(b);
+        }
+
+        // special URL encoding chars
+        UNRESERVED_CHARS.set('-');
+        UNRESERVED_CHARS.set('.');
+        UNRESERVED_CHARS.set('_');
+        UNRESERVED_CHARS.set('~');
+    }
+
+    /**
      * {...@inheritdoc}
      */
     public final String calculate(S signingKey, String secretCredential, 
Service service, RequestMessage message, Parameter...parameterList) throws 
SignatureException {
@@ -173,9 +207,25 @@
                                 .append(path)
                                 .toString();
 
-        
+        // TODO add missing algorithm part implementation
+        String requestParameters = null;
 
-        return null;
+        return new StringBuilder(method)
+                .append('&')
+                .append(percentEncode(requestUrl))
+                .append('&')
+                .append(percentEncode(requestParameters))
+                .toString();
+    }
+
+    /**
+     * Applies the percent encoding algorithm to the input text.
+     *
+     * @param text the text has to be encoded.
+     * @return the encoded string.
+     */
+    private static String percentEncode(String text) {
+        return new String(URLCodec.encodeUrl(UNRESERVED_CHARS, 
text.getBytes(UTF_8)), UTF_8);
     }
 
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to