Author: handyande
Date: Mon Jan 29 15:34:13 2007
New Revision: 501233

URL: http://svn.apache.org/viewvc?view=rev&rev=501233
Log:
Add public flags for the repositories and iDisk - this allows users to read 
without logging into a repository and to see other users files

Modified:
    
maven/sandbox/enterprise/enterprise-web/src/main/java/org/apache/maven/enterprise/web/WebdavServlet.java

Modified: 
maven/sandbox/enterprise/enterprise-web/src/main/java/org/apache/maven/enterprise/web/WebdavServlet.java
URL: 
http://svn.apache.org/viewvc/maven/sandbox/enterprise/enterprise-web/src/main/java/org/apache/maven/enterprise/web/WebdavServlet.java?view=diff&rev=501233&r1=501232&r2=501233
==============================================================================
--- 
maven/sandbox/enterprise/enterprise-web/src/main/java/org/apache/maven/enterprise/web/WebdavServlet.java
 (original)
+++ 
maven/sandbox/enterprise/enterprise-web/src/main/java/org/apache/maven/enterprise/web/WebdavServlet.java
 Mon Jan 29 15:34:13 2007
@@ -3,6 +3,7 @@
 import org.codehaus.plexus.webdav.servlet.multiplexed.MultiplexedWebDavServlet;
 import org.codehaus.plexus.webdav.servlet.DavServerRequest;
 import org.codehaus.plexus.webdav.DavServerException;
+import org.codehaus.plexus.webdav.util.WebdavMethodUtil;
 import 
org.codehaus.plexus.security.ui.web.filter.authentication.HttpAuthenticator;
 import org.codehaus.plexus.security.policy.AccountLockedException;
 import org.codehaus.plexus.security.policy.MustChangePasswordException;
@@ -32,6 +33,10 @@
 
     private File davRoot;
 
+    private boolean publicRepositories = true;
+
+    private boolean publicIDisk = true;
+
     public void initComponents()
         throws ServletException
     {
@@ -85,6 +90,12 @@
     {
         HttpServletRequest request = davRequest.getRequest();
 
+        /* we don't always need to authenticate read requests */
+        if ( isAnonRequest( davRequest ) )
+        {
+            return true;
+        }
+
         try
         {
             AuthenticationResult result = httpAuth.getAuthenticationResult( 
request, response );
@@ -118,6 +129,14 @@
     public boolean isAuthorized( DavServerRequest davRequest, 
HttpServletResponse response )
         throws ServletException, IOException
     {
+        HttpServletRequest request = davRequest.getRequest();
+
+        /* we don't always need to authenticate read requests */
+        if ( isAnonRequest( davRequest ) )
+        {
+            return true;
+        }
+
         if ( davRequest.getPrefix().equals("idisk") )
         {
             String resource = davRequest.getLogicalResource();
@@ -139,11 +158,45 @@
                 return true;
             }
 
-            httpAuth.challenge( davRequest.getRequest(), response, "Enterprise 
Repository",
+            httpAuth.challenge( request, response, "Enterprise Repository",
                                 new AuthenticationException( "Access denied." 
) );
             return false;
         }
 
         return true;
+    }
+
+    /**
+     * Tell if the passed request can be treated anonymously (no 
authentication needed).
+     * Only read requests can be anonymous, clearly!
+     *
+     * @param davRequest the request to check
+     * @return true if the request is a read request and the area we are 
requesting is publicly visible
+     */
+    private boolean isAnonRequest( DavServerRequest davRequest )
+    {
+        HttpServletRequest request = davRequest.getRequest();
+        boolean isRead = WebdavMethodUtil.isReadMethod( request.getMethod() );
+
+        if ( isRead )
+        {
+            if ( davRequest.getPrefix().equals("idisk") )
+            {
+                if ( publicIDisk )
+                {
+                    return true;
+                }
+            }
+            else
+            {
+                /* if the repositories are public we do not require 
authentication for non-idisk requests */
+                if ( publicRepositories )
+                {
+                    return true;
+                }
+            }
+        }
+
+        return false;
     }
 }


Reply via email to