Author: ivol37 at gmail.com
Date: Thu Jan  6 14:07:52 2011
New Revision: 569

Log:
[AMDATU-240] Fixed encoding issues in REST APIs. This was caused by the 
additional dispatcher, which forwarded the request using a decoded URL

Modified:
   
trunk/amdatu-authorization/login-gadget/src/main/resources/jsp/LoginGadget.jsp
   
trunk/amdatu-authorization/useradmin-gadget/src/main/resources/static/js/useradmin.js
   
trunk/amdatu-web/rest-wink/src/main/java/org/amdatu/web/rest/wink/service/WinkServletFilter.java
   trunk/src/main/resources/shell/run.sh
   trunk/src/main/resources/shell/startup.bat

Modified: 
trunk/amdatu-authorization/login-gadget/src/main/resources/jsp/LoginGadget.jsp
==============================================================================
--- 
trunk/amdatu-authorization/login-gadget/src/main/resources/jsp/LoginGadget.jsp  
    (original)
+++ 
trunk/amdatu-authorization/login-gadget/src/main/resources/jsp/LoginGadget.jsp  
    Thu Jan  6 14:07:52 2011
@@ -84,8 +84,8 @@
 
       function login() {
         var postdata = {
-          username : document.getElementById('username').value,
-          password : document.getElementById('password').value
+          username : document.getElementById('username').value.to_rfc3986(),
+          password : document.getElementById('password').value.to_rfc3986()
         };
 
         var url = "${baseRestUrl}/login";
@@ -173,6 +173,16 @@
         }
       }
 
+      String.prototype.to_rfc3986 = function (){
+         var tmp =  encodeURIComponent(this);
+         tmp = tmp.replace('!','%21');
+         tmp = tmp.replace('*','%2A');
+         tmp = tmp.replace('(','%28');
+         tmp = tmp.replace(')','%29');
+         tmp = tmp.replace("'",'%27');
+         return tmp;
+      }
+
       getLoginStatus();
     </script>
     ]]>

Modified: 
trunk/amdatu-authorization/useradmin-gadget/src/main/resources/static/js/useradmin.js
==============================================================================
--- 
trunk/amdatu-authorization/useradmin-gadget/src/main/resources/static/js/useradmin.js
       (original)
+++ 
trunk/amdatu-authorization/useradmin-gadget/src/main/resources/static/js/useradmin.js
       Thu Jan  6 14:07:52 2011
@@ -184,7 +184,7 @@
   if (response.rc == 200) {
     // Role added successfully
     showInfo(prefs.getMsg('member_added'));
-    var url = escape(restUrl + "/groups/" + encodeURIComponent(selectedRole));
+    var url = escape(restUrl + "/groups/" + selectedRole.to_rfc3986());
     loadRole(url, onRoleLoaded);
     gadgets.window.adjustHeight();
   } else if (response.rc == 304) {
@@ -200,7 +200,7 @@
   if (response.rc == 200) {
     // Member removed successfully
     showInfo(prefs.getMsg('member_removed'));
-    var url = escape(restUrl + "/groups/" + encodeURIComponent(selectedRole));
+    var url = escape(restUrl + "/groups/" + selectedRole.to_rfc3986());
     loadRole(url, onRoleLoaded);
     gadgets.window.adjustHeight();
   } else if (response.rc == 304) {
@@ -221,15 +221,15 @@
 }
 
 function confirmDeleteMember(role) {
-  var removeFromRole = encodeURIComponent(selectedRole);
-  var removeRole = encodeURIComponent(unescape(role));
+  var removeFromRole = selectedRole.to_rfc3986();
+  var removeRole = unescape(role).to_rfc3986();
   var url = "/rest/groups/" + removeFromRole + "/members/" + removeRole;
   deleteMember(url, onMemberRemoved);
 }
 
 function onAddMember(role) {
-  var addToRole = encodeURIComponent(selectedRole);
-  var addRole = encodeURIComponent(unescape(role));
+  var addToRole = selectedRole.to_rfc3986();
+  var addRole = unescape(role).to_rfc3986();
   if (addToBasicMembers) {
     var url = "/rest/groups/" + addToRole + "/basicmembers/" + addRole;
   } else {
@@ -249,7 +249,7 @@
 
 function saveRole() {
   var method = document.getElementById(currentView + "_method").value;
-  var name = encodeURIComponent(document.getElementById(currentView + 
"_name").value);
+  var name = document.getElementById(currentView + "_name").value.to_rfc3986();
 
   if (currentView == "user") {
     var newpassword = document.getElementById('password').value
@@ -380,6 +380,16 @@
   loadRoles(url, onRolesLoadedForSelection);
 }
 
+String.prototype.to_rfc3986 = function (){
+   var tmp =  encodeURIComponent(this);
+   tmp = tmp.replace('!','%21');
+   tmp = tmp.replace('*','%2A');
+   tmp = tmp.replace('(','%28');
+   tmp = tmp.replace(')','%29');
+   tmp = tmp.replace("'",'%27');
+   return tmp;
+}
+
 $(document).ready(function(){
   loadRoles(restUrl + "/users?maxResults=5", onRolesLoaded);
 });

Modified: 
trunk/amdatu-web/rest-wink/src/main/java/org/amdatu/web/rest/wink/service/WinkServletFilter.java
==============================================================================
--- 
trunk/amdatu-web/rest-wink/src/main/java/org/amdatu/web/rest/wink/service/WinkServletFilter.java
    (original)
+++ 
trunk/amdatu-web/rest-wink/src/main/java/org/amdatu/web/rest/wink/service/WinkServletFilter.java
    Thu Jan  6 14:07:52 2011
@@ -60,7 +60,7 @@
     }
 
     public void doFilter(ServletRequest request, ServletResponse response, 
FilterChain chain) throws IOException, ServletException {
-        String path = ((HttpServletRequest) request).getPathInfo();
+        String path = ((HttpServletRequest) request).getRequestURI();
 
         // To prevent endless recursion we verify that the path doesn't start 
with our target path. There is one
         // situation in which this fails; the case that a rest service with 
path 'example' also annotates one of

Modified: trunk/src/main/resources/shell/run.sh
==============================================================================
--- trunk/src/main/resources/shell/run.sh       (original)
+++ trunk/src/main/resources/shell/run.sh       Thu Jan  6 14:07:52 2011
@@ -9,5 +9,8 @@
 # Felix property file
 JAVA_OPTS="$JAVA_OPTS 
-Dfelix.config.properties=file:conf/felix-config.properties"
 
+# Set encoding to UTF-8
+JAVA_OPTS="$JAVA_OPTS -Dfile.encoding=utf-8"
+
 # Run the platform...
-java $JAVA_OPTS -jar amdatu-system/org.apache.felix.main-2.0.5.jar 
+java $JAVA_OPTS -jar amdatu-system/org.apache.felix.main-2.0.5.jar

Modified: trunk/src/main/resources/shell/startup.bat
==============================================================================
--- trunk/src/main/resources/shell/startup.bat  (original)
+++ trunk/src/main/resources/shell/startup.bat  Thu Jan  6 14:07:52 2011
@@ -7,5 +7,8 @@
 rem Felix property file
 set JAVA_OPTS=%JAVA_OPTS% 
-Dfelix.config.properties=file:conf/felix-config.properties
 
-java %JAVA_OPTS% -jar amdatu-system/org.apache.felix.main-2.0.5.jar 
+rem Set encoding to UTF-8
+set JAVA_OPTS=%JAVA_OPTS% -Dfile.encoding=utf-8
+
+java %JAVA_OPTS% -jar amdatu-system/org.apache.felix.main-2.0.5.jar
 

Reply via email to