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;
}
}