Author: chathura
Date: Thu Jan  3 21:51:07 2008
New Revision: 11828

Log:


Implementing HTTP basic authentication support for resource content access.



Added:
   
trunk/registry/modules/core/src/main/java/org/wso2/registry/servlet/ResourceRequestProcessor.java
      - copied, changed from r11777, 
trunk/registry/modules/core/src/main/java/org/wso2/registry/servlet/ResourceHandlerUtil.java
Removed:
   
trunk/registry/modules/core/src/main/java/org/wso2/registry/servlet/ResourceHandlerUtil.java
Modified:
   
trunk/registry/modules/core/src/main/java/org/wso2/registry/servlet/RegistryServlet.java
   
trunk/registry/modules/core/src/main/java/org/wso2/registry/servlet/Utils.java

Modified: 
trunk/registry/modules/core/src/main/java/org/wso2/registry/servlet/RegistryServlet.java
==============================================================================
--- 
trunk/registry/modules/core/src/main/java/org/wso2/registry/servlet/RegistryServlet.java
    (original)
+++ 
trunk/registry/modules/core/src/main/java/org/wso2/registry/servlet/RegistryServlet.java
    Thu Jan  3 21:51:07 2008
@@ -35,6 +35,7 @@
 import org.wso2.registry.jdbc.realm.RegistryRealm;
 import org.wso2.registry.jdbc.utils.RegistryDataSource;
 import org.wso2.registry.secure.SecureRegistry;
+import org.wso2.registry.secure.AuthorizationFailedException;
 
 import javax.naming.Context;
 import javax.naming.InitialContext;
@@ -213,35 +214,7 @@
                 path = path + "?" + qPart;
             }
 
-            Resource resource ;
-            try {
-                resource = ResourceHandlerUtil.getResource(request, path);
-            } catch (RegistryException e) {
-                
request.getSession().setAttribute(RegistryConstants.ERROR_MESSAGE, 
e.getMessage());
-                request.getRequestDispatcher(RegistryConstants.ERROR_JSP);
-                return;
-            }
-
-            if (resource == null) {
-                
request.getSession().setAttribute(RegistryConstants.ERROR_MESSAGE, "404 Not 
Found");
-                request.getRequestDispatcher(RegistryConstants.ERROR_JSP);
-                return;
-            }
-
-            // handle if-modified-since header
-            long modifiedSince = request.getDateHeader("If-Modified-Since");
-            if (modifiedSince > 0 && !resource.getLastModified().after(new 
Date(modifiedSince))) {
-                response.setStatus(304);
-                response.getWriter().flush();
-                return;
-            }
-            
-
-            if (resource.isDirectory()) {
-                response.sendRedirect("/wso2registry/web" + path);
-            } else {
-                sendResourceContent(request, response, path);
-            }
+            ResourceRequestProcessor.processResourceGET(request, response, 
path);
         }
     }
 
@@ -289,45 +262,6 @@
         }
     }
 
-    private void sendResourceContent(HttpServletRequest request, 
HttpServletResponse response, String path) {
-
-        Resource resource = null;
-        try {
-            resource = ResourceHandlerUtil.getResource(request, path);
-        } catch (RegistryException e) {
-            setErrorMessage(request, e.getMessage());
-            e.printStackTrace();
-        }
-
-        try {
-            Object content = null;
-            if (resource != null) {
-                content = resource.getContent();
-            }
-            if (content != null) {
-
-                response.setDateHeader("Last-Modified", 
resource.getLastModified().getTime());
-
-                if (resource.getMediaType() != null && 
resource.getMediaType().length() > 0) {
-                    response.setContentType(resource.getMediaType());
-                } else {
-                    response.setContentType("application/download");
-                }
-
-                if (content instanceof byte[]) {
-                    response.getOutputStream().write((byte[]) content);
-                    response.flushBuffer();
-                } else {
-                    response.getWriter().write(content.toString());
-                }
-            }
-
-            response.getWriter().flush();
-        } catch (IOException e) {
-            e.printStackTrace();
-        }
-    }
-
     private void setErrorMessage(HttpServletRequest request, String message) {
         request.getSession().setAttribute(RegistryConstants.ERROR_MESSAGE, 
message);
     }

Copied: 
trunk/registry/modules/core/src/main/java/org/wso2/registry/servlet/ResourceRequestProcessor.java
 (from r11777, 
trunk/registry/modules/core/src/main/java/org/wso2/registry/servlet/ResourceHandlerUtil.java)
==============================================================================
--- 
trunk/registry/modules/core/src/main/java/org/wso2/registry/servlet/ResourceHandlerUtil.java
        (original)
+++ 
trunk/registry/modules/core/src/main/java/org/wso2/registry/servlet/ResourceRequestProcessor.java
   Thu Jan  3 21:51:07 2008
@@ -22,11 +22,124 @@
 import org.wso2.registry.RegistryConstants;
 import org.wso2.registry.jdbc.realm.RegistryRealm;
 import org.wso2.registry.secure.SecureRegistry;
+import org.wso2.registry.secure.AuthorizationFailedException;
+import org.apache.axiom.om.util.Base64;
 
 import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 import javax.servlet.ServletContext;
+import java.util.Date;
+import java.io.IOException;
 
-public class ResourceHandlerUtil {
+public class ResourceRequestProcessor {
+
+    public static void processResourceGET(
+            HttpServletRequest request, HttpServletResponse response, String 
path)
+            throws IOException {
+
+        Resource resource;
+        try {
+            // if the client has sent "Authorization" header, log in as the 
new user.
+            String auth = request.getHeader("Authorization");
+            if (auth != null && auth.length() > 0) {
+                String[] aParts = auth.trim().split(" ");
+                if (aParts.length == 2) {
+                    String credentials = aParts[1];
+                    String decodedCredentials = new 
String(Base64.decode(credentials));
+                    String[] cParts = decodedCredentials.trim().split(":");
+                    if (cParts.length == 2) {
+                        String userName = cParts[0];
+                        String password = cParts[1];
+                        Utils.logInUser(request, userName, password);
+                    }
+                }
+            }
+
+            resource = ResourceRequestProcessor.getResource(request, path);
+
+        } catch(AuthorizationFailedException ae) {
+
+            response.setStatus(401);
+
+            // if the user is not logged in, give him a challange
+            if (!Utils.isLoggedIn(request)) {
+                response.setHeader("WWW-Authenticate", "Basic 
realm=\"WSO2-Registry\"");
+            }
+
+            try {
+                response.getWriter().flush();
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+
+            return;
+
+        } catch (RegistryException e) {
+            request.getSession().setAttribute(RegistryConstants.ERROR_MESSAGE, 
e.getMessage());
+            request.getRequestDispatcher(RegistryConstants.ERROR_JSP);
+            return;
+        }
+
+        if (resource == null) {
+            request.getSession().setAttribute(RegistryConstants.ERROR_MESSAGE, 
"404 Not Found");
+            request.getRequestDispatcher(RegistryConstants.ERROR_JSP);
+            return;
+        }
+
+        // handle if-modified-since header
+        long modifiedSince = request.getDateHeader("If-Modified-Since");
+        if (modifiedSince > 0 && !resource.getLastModified().after(new 
Date(modifiedSince))) {
+            response.setStatus(304);
+            response.getWriter().flush();
+            return;
+        }
+
+        if (resource.isDirectory()) {
+            response.sendRedirect("/wso2registry/web" + path);
+        } else {
+            sendResourceContent(request, response, path);
+        }
+    }
+
+    private static void sendResourceContent(HttpServletRequest request, 
HttpServletResponse response, String path) {
+
+        Resource resource = null;
+        try {
+            resource = ResourceRequestProcessor.getResource(request, path);
+        } catch (RegistryException e) {
+            setErrorMessage(request, e.getMessage());
+            e.printStackTrace();
+        }
+
+        try {
+            Object content = resource.getContent();
+            if (content != null) {
+
+                response.setDateHeader("Last-Modified", 
resource.getLastModified().getTime());
+
+                if (resource.getMediaType() != null && 
resource.getMediaType().length() > 0) {
+                    response.setContentType(resource.getMediaType());
+                } else {
+                    response.setContentType("application/download");
+                }
+
+                if (content instanceof byte[]) {
+                    response.getOutputStream().write((byte[]) content);
+                    response.flushBuffer();
+                } else {
+                    response.getWriter().write(content.toString());
+                }
+            }
+
+            response.getWriter().flush();
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+
+    private static void setErrorMessage(HttpServletRequest request, String 
message) {
+        request.getSession().setAttribute(RegistryConstants.ERROR_MESSAGE, 
message);
+    }
 
     public static Resource getResource(HttpServletRequest request, String path)
             throws RegistryException {

Modified: 
trunk/registry/modules/core/src/main/java/org/wso2/registry/servlet/Utils.java
==============================================================================
--- 
trunk/registry/modules/core/src/main/java/org/wso2/registry/servlet/Utils.java  
    (original)
+++ 
trunk/registry/modules/core/src/main/java/org/wso2/registry/servlet/Utils.java  
    Thu Jan  3 21:51:07 2008
@@ -26,6 +26,7 @@
 import org.wso2.registry.secure.SecureRegistry;
 
 import javax.servlet.http.HttpServletRequest;
+import javax.servlet.ServletContext;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -82,4 +83,36 @@
             HttpServletRequest request, SecureRegistry secureRegistry) {
         request.getSession().setAttribute(RegistryConstants.USER_REGISTRY, 
secureRegistry);
     }
+
+    public static boolean isLoggedIn(HttpServletRequest request) {
+
+        SecureRegistry userRegistry =
+                (SecureRegistry) 
request.getSession().getAttribute(RegistryConstants.USER_REGISTRY);
+
+        if (userRegistry == null) {
+            return false;
+
+        } else {
+            if 
(userRegistry.getUserID().equals(RegistryConstants.ANONYMOUS_USER)) {
+                return false;
+            } else {
+                return true;
+            }
+        }
+    }
+
+    public static void logInUser(HttpServletRequest request, String userName, 
String password)
+            throws RegistryException {
+
+        ServletContext context = request.getSession().getServletContext();
+        Registry jdbcRegistry = (Registry) 
context.getAttribute(RegistryConstants.REGISTRY);
+
+        RegistryRealm realm = (RegistryRealm) 
request.getSession().getServletContext().
+                getAttribute(RegistryConstants.REGISTRY_REALM);
+
+        SecureRegistry secureRegistry = new SecureRegistry(
+                userName, password, jdbcRegistry, realm);
+
+        request.getSession().setAttribute(RegistryConstants.USER_REGISTRY, 
secureRegistry);
+    }
 }

_______________________________________________
Registry-dev mailing list
[email protected]
http://wso2.org/cgi-bin/mailman/listinfo/registry-dev

Reply via email to