diff --git a/pom.xml b/pom.xml
index 0ad271c..033c929 100644
--- a/pom.xml
+++ b/pom.xml
@@ -188,6 +188,12 @@
+
+ commons-codec
+ commons-codec
+ compile
+
+
com.thoughtworks.xstream
xstream
diff --git a/src/main/java/org/gcube/portlets/user/workspace/server/GWTWorkspaceServiceImpl.java b/src/main/java/org/gcube/portlets/user/workspace/server/GWTWorkspaceServiceImpl.java
index f126583..1e17ed5 100644
--- a/src/main/java/org/gcube/portlets/user/workspace/server/GWTWorkspaceServiceImpl.java
+++ b/src/main/java/org/gcube/portlets/user/workspace/server/GWTWorkspaceServiceImpl.java
@@ -16,6 +16,7 @@ import javax.servlet.http.HttpSession;
import org.apache.log4j.Logger;
import org.gcube.application.framework.core.session.ASLSession;
+import org.gcube.common.encryption.StringEncrypter;
import org.gcube.common.homelibary.model.items.type.FolderItemType;
import org.gcube.common.homelibary.model.items.type.WorkspaceItemType;
import org.gcube.common.homelibrary.home.Home;
@@ -68,6 +69,7 @@ import org.gcube.portlets.user.workspace.server.reader.ApplicationProfileReader;
import org.gcube.portlets.user.workspace.server.resolver.UriResolverReaderParameterForResolverIndex;
import org.gcube.portlets.user.workspace.server.util.AclTypeComparator;
import org.gcube.portlets.user.workspace.server.util.DifferenceBetweenInfoContactModel;
+import org.gcube.portlets.user.workspace.server.util.StringUtil;
import org.gcube.portlets.user.workspace.server.util.UserUtil;
import org.gcube.portlets.user.workspace.server.util.WsUtil;
import org.gcube.portlets.user.workspace.server.util.resource.PropertySpecialFolderReader;
@@ -3565,8 +3567,13 @@ public class GWTWorkspaceServiceImpl extends RemoteServiceServlet implements GWT
workspaceLogger.info("HL returning folder link id: "+folderId);
ApplicationProfileReader apReader = new ApplicationProfileReader("Workspace-Explorer-App", "org.gcube.portlets.user.workspaceexplorerapp.server.WorkspaceExplorerAppServiceImpl");
ApplicationProfile ap = apReader.readProfileFromInfrastrucure();
+
+ String encriptedFId = StringEncrypter.getEncrypter().encrypt(folderId);
+ workspaceLogger.info("Encrypted folder Id: "+encriptedFId);
+ String encodedFId = StringUtil.base64EncodeStringURLSafe(encriptedFId);
+ workspaceLogger.info("Encoded in Base 64: "+encodedFId);
workspaceLogger.info("Application profile returning url: "+ap.getUrl());
- String folderLink = ap.getUrl()+"?folderId="+folderId;
+ String folderLink = ap.getUrl()+"?folderId="+encodedFId;
String shortURL = null;
try{
shortURL = getShortUrl(folderLink);
diff --git a/src/main/java/org/gcube/portlets/user/workspace/server/util/StringUtil.java b/src/main/java/org/gcube/portlets/user/workspace/server/util/StringUtil.java
index d829197..f4d845a 100644
--- a/src/main/java/org/gcube/portlets/user/workspace/server/util/StringUtil.java
+++ b/src/main/java/org/gcube/portlets/user/workspace/server/util/StringUtil.java
@@ -1,41 +1,118 @@
/**
- *
- */
-package org.gcube.portlets.user.workspace.server.util;
-
-/**
- * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it
- * @Jul 9, 2013
*
*/
-public class StringUtil {
-
- public static String regx = ",@+^'?!\"%&$£/#()";
-
+package org.gcube.portlets.user.workspace.server.util;
+
+import java.io.UnsupportedEncodingException;
+
+import org.apache.commons.codec.binary.Base64;
+import org.apache.log4j.Logger;
+
+/**
+ * The Class StringUtil.
+ *
+ * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it
+ * @Jul 9, 2013
+ */
+public class StringUtil {
+
+ /** The Constant UTF_8. */
+ public static final String UTF_8 = "UTF-8";
+ public static String regx = ",@+^'?!\"%&$£/#()";
+ protected static Logger logger = Logger.getLogger(StringUtil.class);
+
+ /**
+ * Removes the special characters.
+ *
+ * @param input
+ * the input
+ * @return the string
+ */
public static String removeSpecialCharacters(String input) {
- char[] ca = regx.toCharArray();
- for (char c : ca) {
- input = input.replace(""+c, "");
- }
- return input;
- }
-
- public static void main(String[] args) {
- String input = "Just to clarify, Iì13ì? will have strings of varying "
- + "lengths. I want to strip characters from it, the exact "
- + "ones to be determined at !\"%&$£/ runtime, and return the "
- + "resulting string...";
-
- input = removeSpecialCharacters(input);
- System.out.println(input);
- System.out.println(replaceAllWhiteSpace(input, "_"));
-
- }
-
- public static String replaceAllWhiteSpace(String input, String replacement){
- return input.replaceAll("\\s",replacement);
+ char[] ca = regx.toCharArray();
+ for (char c : ca) {
+ input = input.replace("" + c, "");
+ }
+ return input;
}
+ /**
+ * Replace all white space.
+ *
+ * @param input
+ * the input
+ * @param replacement
+ * the replacement
+ * @return the string
+ */
+ public static String replaceAllWhiteSpace(String input, String replacement) {
+
+ return input.replaceAll("\\s", replacement);
+ }
+
+
+ /**
+ * Base64 decode string.
+ *
+ * @param s the s
+ * @return the string
+ */
+ public static String base64DecodeString(String s) {
+
+ try {
+ return new String(Base64.decodeBase64(s.getBytes(UTF_8)));
+ }
+ catch (UnsupportedEncodingException e) {
+ logger.error("Failed to decode the String", e);
+ logger.error("Returning input string: " + s);
+ return s;
+ }
+ }
+
+ /**
+ * Base64 encode string url safe.
+ *
+ * @param s the s
+ * @return the string
+ */
+ public static String base64EncodeStringURLSafe(String s) {
+
+ try {
+ return Base64.encodeBase64URLSafeString(s.getBytes(UTF_8));
+ }
+ catch (UnsupportedEncodingException e) {
+ logger.error("Failed to decode the String", e);
+ logger.error("Returning input string: " + s);
+ return s;
+ }
+ }
+
+ /**
+ * Base64 encode string.
+ *
+ * @param s the s
+ * @return the string
+ */
+ public static String base64EncodeString(String s) {
+
+ try {
+ return new String(Base64.encodeBase64(s.getBytes(UTF_8)));
+ }
+ catch (UnsupportedEncodingException e) {
+ logger.error("Failed to encode the String", e);
+ logger.error("Returning input string: " + s);
+ return s;
+ }
+ }
+ /*
+ * public static void main(String[] args) { String input =
+ * "Just to clarify, Iì13ì? will have strings of varying " +
+ * "lengths. I want to strip characters from it, the exact " +
+ * "ones to be determined at !\"%&$£/ runtime, and return the " +
+ * "resulting string..."; input = removeSpecialCharacters(input);
+ * System.out.println(input); System.out.println(replaceAllWhiteSpace(input,
+ * "_")); }
+ */
}
diff --git a/src/test/java/org/gcube/portlets/user/workspace/TestEncodeDecodeBase64.java b/src/test/java/org/gcube/portlets/user/workspace/TestEncodeDecodeBase64.java
new file mode 100644
index 0000000..a569337
--- /dev/null
+++ b/src/test/java/org/gcube/portlets/user/workspace/TestEncodeDecodeBase64.java
@@ -0,0 +1,78 @@
+/**
+ *
+ */
+package org.gcube.portlets.user.workspace;
+
+import org.gcube.common.encryption.StringEncrypter;
+import org.gcube.common.scope.api.ScopeProvider;
+import org.gcube.portlets.user.workspace.server.util.StringUtil;
+
+
+/**
+ * The Class TestEncodeDecodeBase64.
+ *
+ * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it
+ * Sep 19, 2016
+ */
+public class TestEncodeDecodeBase64 {
+
+ static final String SCOPE = "/gcube";
+// static String folderId = "e7b6bc31-8c35-4398-a7fd-492e391e17d2";
+ static String folderId = "ce4866ee-8079-4acf-bcd6-1c9dd786eb73";
+
+ static String encrypted="";
+ static String encoded = "";
+ static String decoded = "";
+ static String decrypted = "";
+
+ /**
+ * The main method.
+ *
+ * @param args the arguments
+ */
+ public static void main(String[] args) {
+
+ try {
+ ScopeProvider.instance.set(SCOPE);
+ System.out.println("Folder Id: "+folderId);
+ encode();
+ decode();
+
+ if(decrypted.compareTo(folderId)==0)
+ System.out.println("Encrypt/Decript works!");
+ else
+ System.out.println("Encrypt/Decript doesn't work!");
+ }
+ catch (Exception e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ }
+
+ /**
+ * Encode.
+ *
+ * @throws Exception the exception
+ */
+ private static void encode() throws Exception {
+
+ encrypted = StringEncrypter.getEncrypter().encrypt(folderId);
+ System.out.println("Encrypted folder Id: "+encrypted);
+ encoded = StringUtil.base64EncodeStringURLSafe(encrypted);
+ System.out.println("Encoded folder Id: "+encoded);
+
+ }
+
+ /**
+ * Decode.
+ *
+ * @throws Exception the exception
+ */
+ private static void decode() throws Exception {
+
+ decoded = StringUtil.base64DecodeString(encoded);
+ System.out.println("Decoded folder Id: "+decoded);
+ decrypted = StringEncrypter.getEncrypter().decrypt(decoded);
+ System.out.println("Decrypted folder Id: "+decrypted);
+ }
+}