You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@archiva.apache.org by br...@apache.org on 2008/04/18 05:06:06 UTC
svn commit: r649352 [1/2] - in /archiva/trunk: ./ archiva-jetty/
archiva-modules/archiva-web/archiva-security/src/main/java/org/apache/maven/archiva/security/
archiva-modules/archiva-web/archiva-webapp/
archiva-modules/archiva-web/archiva-webapp/src/ma...
Author: brett
Date: Thu Apr 17 20:05:18 2008
New Revision: 649352
URL: http://svn.apache.org/viewvc?rev=649352&view=rev
Log:
[MRM-781] Removal of Archiva-Webdav implementation in favor of Jackrabbit-webdav
Submitted by: James William Dumay
Added:
archiva/trunk/archiva-modules/archiva-web/archiva-security/src/main/java/org/apache/maven/archiva/security/ArchivaXworkUser.java
- copied, changed from r649123, archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/util/ArchivaXworkUser.java
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/repository/MimeTypesLoaderTest.java
- copied, changed from r649123, archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/repository/ArchivaMimeTypeLoaderTest.java
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/repository/UnauthenticatedDavSessionProvider.java (with props)
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/maven/archiva/webdav/ArchivaDavLocatorFactory.java (with props)
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/maven/archiva/webdav/ArchivaDavResource.java (with props)
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/maven/archiva/webdav/ArchivaDavResourceFactory.java (with props)
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/maven/archiva/webdav/ArchivaDavResourceLocator.java (with props)
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/maven/archiva/webdav/ArchivaDavSession.java (with props)
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/maven/archiva/webdav/ArchivaDavSessionProvider.java (with props)
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/maven/archiva/webdav/LogicalResource.java (with props)
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/maven/archiva/webdav/UnauthorizedDavException.java (with props)
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/maven/archiva/webdav/util/IndexWriter.java (with props)
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/maven/archiva/webdav/util/RepositoryPathUtil.java (with props)
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/resources/org/apache/maven/archiva/webdav/util/mime.types
- copied, changed from r649123, archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/resources/org/apache/maven/archiva/webdav/util/mime-types.txt
Removed:
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/repository/ProxiedDavServer.java
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/util/ArchivaXworkUser.java
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/repository/ArchivaMimeTypeLoaderTest.java
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/it/could/util/StreamTools.java
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/it/could/util/StringTools.java
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/it/could/util/encoding/Encodable.java
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/it/could/util/encoding/EncodingAware.java
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/it/could/util/encoding/EncodingTools.java
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/it/could/util/encoding/package.html
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/it/could/util/http/HttpClient.java
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/it/could/util/http/WebDavClient.java
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/it/could/util/http/package.html
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/it/could/util/location/Location.java
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/it/could/util/location/Parameters.java
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/it/could/util/location/Path.java
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/it/could/util/location/package.html
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/it/could/util/package.html
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/it/could/webdav/DAVException.java
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/it/could/webdav/DAVInputStream.java
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/it/could/webdav/DAVListener.java
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/it/could/webdav/DAVLogger.java
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/it/could/webdav/DAVMethod.java
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/it/could/webdav/DAVMultiStatus.java
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/it/could/webdav/DAVNotModified.java
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/it/could/webdav/DAVOutputStream.java
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/it/could/webdav/DAVProcessor.java
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/it/could/webdav/DAVRepository.java
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/it/could/webdav/DAVResource.java
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/it/could/webdav/DAVServlet.java
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/it/could/webdav/DAVTransaction.java
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/it/could/webdav/DAVUtilities.java
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/it/could/webdav/XMLRepository.java
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/it/could/webdav/methods/COPY.java
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/it/could/webdav/methods/DELETE.java
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/it/could/webdav/methods/GET.java
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/it/could/webdav/methods/HEAD.java
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/it/could/webdav/methods/MKCOL.java
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/it/could/webdav/methods/MOVE.java
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/it/could/webdav/methods/OPTIONS.java
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/it/could/webdav/methods/PROPFIND.java
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/it/could/webdav/methods/PROPPATCH.java
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/it/could/webdav/methods/PUT.java
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/it/could/webdav/methods/package.html
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/it/could/webdav/package.html
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/it/could/webdav/replication/DAVReplica.java
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/it/could/webdav/replication/DAVReplicator.java
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/it/could/webdav/replication/package.html
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/maven/archiva/webdav/AbstractDavServerComponent.java
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/maven/archiva/webdav/DavServerComponent.java
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/maven/archiva/webdav/DavServerException.java
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/maven/archiva/webdav/DavServerListener.java
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/maven/archiva/webdav/DavServerManager.java
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/maven/archiva/webdav/DefaultDavServerManager.java
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/maven/archiva/webdav/servlet/AbstractWebDavServlet.java
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/maven/archiva/webdav/servlet/DavServerRequest.java
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/maven/archiva/webdav/servlet/basic/BasicDavServerRequest.java
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/maven/archiva/webdav/servlet/basic/BasicWebDavServlet.java
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/maven/archiva/webdav/servlet/multiplexed/MultiplexedDavServerRequest.java
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/maven/archiva/webdav/servlet/multiplexed/MultiplexedWebDavServlet.java
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/maven/archiva/webdav/simple/HackedMoveMethod.java
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/maven/archiva/webdav/simple/ReplacementGetMethod.java
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/maven/archiva/webdav/simple/SimpleDavServerComponent.java
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/maven/archiva/webdav/util/WrappedRepositoryRequest.java
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/betaversion/webdav/DAVServlet.java
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/betaversion/webdav/package.html
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/resources/org/apache/maven/archiva/webdav/util/mime-types.txt
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/resources/plexus-webdav/mime.types
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/resources/plexus-webdav/webdav.props
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/test/java/org/apache/maven/archiva/webdav/TestableHttpServletRequest.java
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/test/java/org/apache/maven/archiva/webdav/servlet/multiplexed/MultiplexedDavServerRequestTest.java
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/test/java/org/apache/maven/archiva/webdav/simple/SimpleDavServerComponentBasicTest.java
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/test/java/org/apache/maven/archiva/webdav/simple/SimpleDavServerComponentIndexHtmlTest.java
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/test/java/org/apache/maven/archiva/webdav/simple/SimpleDavServerComponentMultiTest.java
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/test/java/org/apache/maven/archiva/webdav/simple/SimpleWebdavServer.java
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/test/java/org/apache/maven/archiva/webdav/test/AbstractBasicWebdavProviderTestCase.java
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/test/java/org/apache/maven/archiva/webdav/test/AbstractMultiWebdavProviderTestCase.java
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/test/java/org/apache/maven/archiva/webdav/test/AbstractWebdavIndexHtmlTestCase.java
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/test/java/org/apache/maven/archiva/webdav/test/AbstractWebdavProviderTestCase.java
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/test/java/org/apache/maven/archiva/webdav/test/AbstractWebdavServer.java
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/test/java/org/apache/maven/archiva/webdav/test/TestMultiWebDavServlet.java
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/test/java/org/apache/maven/archiva/webdav/util/WrappedRepositoryRequestTest.java
Modified:
archiva/trunk/archiva-jetty/pom.xml
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/pom.xml
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/BrowseAction.java
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/SearchAction.java
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/ShowArtifactAction.java
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/UploadAction.java
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/repository/RepositoryServlet.java
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/resources/META-INF/plexus/application.xml
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/repository/UnauthenticatedRepositoryServlet.java
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/pom.xml
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/maven/archiva/webdav/util/MimeTypes.java
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/maven/archiva/webdav/util/WebdavMethodUtil.java
archiva/trunk/pom.xml
Modified: archiva/trunk/archiva-jetty/pom.xml
URL: http://svn.apache.org/viewvc/archiva/trunk/archiva-jetty/pom.xml?rev=649352&r1=649351&r2=649352&view=diff
==============================================================================
--- archiva/trunk/archiva-jetty/pom.xml (original)
+++ archiva/trunk/archiva-jetty/pom.xml Thu Apr 17 20:05:18 2008
@@ -255,7 +255,7 @@
</build>
<pluginRepositories>
<pluginRepository>
- <id>codehaus.org</id>
+ <id>codehaus.snapshots</id>
<url>http://snapshots.repository.codehaus.org/</url>
</pluginRepository>
</pluginRepositories>
Copied: archiva/trunk/archiva-modules/archiva-web/archiva-security/src/main/java/org/apache/maven/archiva/security/ArchivaXworkUser.java (from r649123, archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/util/ArchivaXworkUser.java)
URL: http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-security/src/main/java/org/apache/maven/archiva/security/ArchivaXworkUser.java?p2=archiva/trunk/archiva-modules/archiva-web/archiva-security/src/main/java/org/apache/maven/archiva/security/ArchivaXworkUser.java&p1=archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/util/ArchivaXworkUser.java&r1=649123&r2=649352&rev=649352&view=diff
==============================================================================
--- archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/util/ArchivaXworkUser.java (original)
+++ archiva/trunk/archiva-modules/archiva-web/archiva-security/src/main/java/org/apache/maven/archiva/security/ArchivaXworkUser.java Thu Apr 17 20:05:18 2008
@@ -1,4 +1,4 @@
-package org.apache.maven.archiva.web.util;
+package org.apache.maven.archiva.security;
/*
* Licensed to the Apache Software Foundation (ASF) under one
@@ -27,8 +27,6 @@
import org.codehaus.plexus.redback.system.SecuritySystemConstants;
import org.codehaus.plexus.redback.users.User;
-import com.opensymphony.xwork.ActionContext;
-
/**
* ArchivaXworkUser
*
@@ -37,35 +35,21 @@
*/
public class ArchivaXworkUser
{
- private static Map<String, Object> getContextSession()
+ public static String getActivePrincipal( Map<String, Object> sessionMap )
{
- ActionContext context = ActionContext.getContext();
- Map<String, Object> sessionMap = context.getSession();
if ( sessionMap == null )
{
- sessionMap = new HashMap<String, Object>();
+ return ArchivaRoleConstants.PRINCIPAL_GUEST;
}
- return sessionMap;
- }
-
- private static SecuritySession getSecuritySession()
- {
SecuritySession securitySession =
- (SecuritySession) getContextSession().get( SecuritySystemConstants.SECURITY_SESSION_KEY );
+ (SecuritySession) sessionMap.get( SecuritySystemConstants.SECURITY_SESSION_KEY );
if ( securitySession == null )
{
- securitySession = (SecuritySession) getContextSession().get( SecuritySession.ROLE );
+ securitySession = (SecuritySession) sessionMap.get( SecuritySession.ROLE );
}
- return securitySession;
- }
-
- public static String getActivePrincipal()
- {
- SecuritySession securitySession = getSecuritySession();
-
if ( securitySession == null )
{
return ArchivaRoleConstants.PRINCIPAL_GUEST;
Modified: archiva/trunk/archiva-modules/archiva-web/archiva-webapp/pom.xml
URL: http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-webapp/pom.xml?rev=649352&r1=649351&r2=649352&view=diff
==============================================================================
--- archiva/trunk/archiva-modules/archiva-web/archiva-webapp/pom.xml (original)
+++ archiva/trunk/archiva-modules/archiva-web/archiva-webapp/pom.xml Thu Apr 17 20:05:18 2008
@@ -137,16 +137,6 @@
<artifactId>commons-lang</artifactId>
</dependency>
<dependency>
- <groupId>org.apache.maven.wagon</groupId>
- <artifactId>wagon-http</artifactId>
- <scope>runtime</scope>
- </dependency>
- <dependency>
- <groupId>org.apache.maven.wagon</groupId>
- <artifactId>wagon-file</artifactId>
- <scope>runtime</scope>
- </dependency>
- <dependency>
<groupId>com.opensymphony</groupId>
<artifactId>webwork</artifactId>
</dependency>
Modified: archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/BrowseAction.java
URL: http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/BrowseAction.java?rev=649352&r1=649351&r2=649352&view=diff
==============================================================================
--- archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/BrowseAction.java (original)
+++ archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/BrowseAction.java Thu Apr 17 20:05:18 2008
@@ -22,15 +22,13 @@
import java.util.Collections;
import java.util.List;
+import com.opensymphony.xwork.ActionContext;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.maven.archiva.database.browsing.BrowsingResults;
import org.apache.maven.archiva.database.browsing.RepositoryBrowsing;
-import org.apache.maven.archiva.security.AccessDeniedException;
-import org.apache.maven.archiva.security.ArchivaSecurityException;
-import org.apache.maven.archiva.security.PrincipalNotFoundException;
-import org.apache.maven.archiva.security.UserRepositories;
-import org.apache.maven.archiva.web.util.ArchivaXworkUser;
+import org.apache.maven.archiva.security.*;
+import org.apache.maven.archiva.security.ArchivaXworkUser;
import org.codehaus.plexus.xwork.action.PlexusActionSupport;
/**
@@ -121,7 +119,7 @@
private String getPrincipal()
{
- return ArchivaXworkUser.getActivePrincipal();
+ return ArchivaXworkUser.getActivePrincipal( ActionContext.getContext().getSession() );
}
private List<String> getObservableRepos()
Modified: archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/SearchAction.java
URL: http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/SearchAction.java?rev=649352&r1=649351&r2=649352&view=diff
==============================================================================
--- archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/SearchAction.java (original)
+++ archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/SearchAction.java Thu Apr 17 20:05:18 2008
@@ -23,6 +23,7 @@
import java.util.Collections;
import java.util.List;
+import com.opensymphony.xwork.ActionContext;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.maven.archiva.database.ArchivaDAO;
@@ -33,11 +34,8 @@
import org.apache.maven.archiva.indexer.search.CrossRepositorySearch;
import org.apache.maven.archiva.indexer.search.SearchResultLimits;
import org.apache.maven.archiva.indexer.search.SearchResults;
-import org.apache.maven.archiva.security.AccessDeniedException;
-import org.apache.maven.archiva.security.ArchivaSecurityException;
-import org.apache.maven.archiva.security.PrincipalNotFoundException;
-import org.apache.maven.archiva.security.UserRepositories;
-import org.apache.maven.archiva.web.util.ArchivaXworkUser;
+import org.apache.maven.archiva.security.*;
+import org.apache.maven.archiva.security.ArchivaXworkUser;
import org.codehaus.plexus.xwork.action.PlexusActionSupport;
/**
@@ -155,7 +153,7 @@
private String getPrincipal()
{
- return ArchivaXworkUser.getActivePrincipal();
+ return ArchivaXworkUser.getActivePrincipal( ActionContext.getContext().getSession() );
}
private List<String> getObservableRepos()
Modified: archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/ShowArtifactAction.java
URL: http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/ShowArtifactAction.java?rev=649352&r1=649351&r2=649352&view=diff
==============================================================================
--- archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/ShowArtifactAction.java (original)
+++ archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/ShowArtifactAction.java Thu Apr 17 20:05:18 2008
@@ -31,9 +31,10 @@
import org.apache.maven.archiva.security.ArchivaSecurityException;
import org.apache.maven.archiva.security.PrincipalNotFoundException;
import org.apache.maven.archiva.security.UserRepositories;
-import org.apache.maven.archiva.web.util.ArchivaXworkUser;
+import org.apache.maven.archiva.security.ArchivaXworkUser;
import org.codehaus.plexus.xwork.action.PlexusActionSupport;
+import com.opensymphony.xwork.ActionContext;
import com.opensymphony.xwork.Validateable;
/**
@@ -173,7 +174,7 @@
private String getPrincipal()
{
- return ArchivaXworkUser.getActivePrincipal();
+ return ArchivaXworkUser.getActivePrincipal( ActionContext.getContext().getSession() );
}
private List<String> getObservableRepos()
Modified: archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/UploadAction.java
URL: http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/UploadAction.java?rev=649352&r1=649351&r2=649352&view=diff
==============================================================================
--- archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/UploadAction.java (original)
+++ archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/UploadAction.java Thu Apr 17 20:05:18 2008
@@ -51,9 +51,10 @@
import org.apache.maven.archiva.security.ArchivaSecurityException;
import org.apache.maven.archiva.security.PrincipalNotFoundException;
import org.apache.maven.archiva.security.UserRepositories;
-import org.apache.maven.archiva.web.util.ArchivaXworkUser;
+import org.apache.maven.archiva.security.ArchivaXworkUser;
import org.codehaus.plexus.xwork.action.PlexusActionSupport;
+import com.opensymphony.xwork.ActionContext;
import com.opensymphony.xwork.Preparable;
import com.opensymphony.xwork.Validateable;
@@ -325,7 +326,7 @@
private String getPrincipal()
{
- return ArchivaXworkUser.getActivePrincipal();
+ return ArchivaXworkUser.getActivePrincipal( ActionContext.getContext().getSession() );
}
private void copyFile( File targetPath, String artifactFilename )
Modified: archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/repository/RepositoryServlet.java
URL: http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/repository/RepositoryServlet.java?rev=649352&r1=649351&r2=649352&view=diff
==============================================================================
--- archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/repository/RepositoryServlet.java (original)
+++ archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/repository/RepositoryServlet.java Thu Apr 17 20:05:18 2008
@@ -23,29 +23,24 @@
import org.apache.maven.archiva.configuration.ConfigurationEvent;
import org.apache.maven.archiva.configuration.ConfigurationListener;
import org.apache.maven.archiva.configuration.ManagedRepositoryConfiguration;
-import org.apache.maven.archiva.security.ArchivaRoleConstants;
-import org.apache.maven.archiva.webdav.DavServerComponent;
-import org.apache.maven.archiva.webdav.DavServerException;
-import org.apache.maven.archiva.webdav.servlet.DavServerRequest;
-import org.apache.maven.archiva.webdav.servlet.multiplexed.MultiplexedWebDavServlet;
-import org.apache.maven.archiva.webdav.util.WebdavMethodUtil;
-import org.codehaus.plexus.redback.authentication.AuthenticationException;
-import org.codehaus.plexus.redback.authentication.AuthenticationResult;
-import org.codehaus.plexus.redback.authorization.AuthorizationException;
-import org.codehaus.plexus.redback.authorization.AuthorizationResult;
-import org.codehaus.plexus.redback.policy.AccountLockedException;
-import org.codehaus.plexus.redback.policy.MustChangePasswordException;
-import org.codehaus.plexus.redback.system.SecuritySession;
+import org.apache.maven.archiva.webdav.ArchivaDavLocatorFactory;
+import org.apache.maven.archiva.webdav.ArchivaDavResourceFactory;
+import org.apache.maven.archiva.webdav.ArchivaDavSessionProvider;
+import org.apache.maven.archiva.webdav.UnauthorizedDavException;
+import org.apache.jackrabbit.webdav.server.AbstractWebdavServlet;
+import org.apache.jackrabbit.webdav.*;
import org.codehaus.plexus.redback.system.SecuritySystem;
import org.codehaus.plexus.redback.xwork.filter.authentication.HttpAuthenticator;
import org.codehaus.plexus.spring.PlexusToSpringUtils;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
import java.util.Map;
@@ -57,9 +52,11 @@
* @version $Id$
*/
public class RepositoryServlet
- extends MultiplexedWebDavServlet
+ extends AbstractWebdavServlet
implements ConfigurationListener
{
+ private Logger log = LoggerFactory.getLogger(RepositoryServlet.class);
+
private SecuritySystem securitySystem;
private HttpAuthenticator httpAuth;
@@ -67,17 +64,76 @@
private ArchivaConfiguration configuration;
private Map<String, ManagedRepositoryConfiguration> repositoryMap;
-
- private ArchivaMimeTypeLoader mimeTypeLoader;
+
+ private DavLocatorFactory locatorFactory;
+
+ private DavResourceFactory resourceFactory;
+
+ private DavSessionProvider sessionProvider;
+
+ private final Object reloadLock = new Object();
+
+ public void init(javax.servlet.ServletConfig servletConfig)
+ throws ServletException
+ {
+ super.init(servletConfig);
+ initServers(servletConfig);
+ }
+
+ /**
+ * Service the given request.
+ *
+ * @param request
+ * @param response
+ * @throws ServletException
+ * @throws java.io.IOException
+ */
+ @Override
+ protected void service(HttpServletRequest request, HttpServletResponse response)
+ throws ServletException, IOException
+ {
+ WebdavRequest webdavRequest = new WebdavRequestImpl(request, getLocatorFactory());
+ // DeltaV requires 'Cache-Control' header for all methods except 'VERSION-CONTROL' and 'REPORT'.
+ int methodCode = DavMethods.getMethodCode(request.getMethod());
+ boolean noCache = DavMethods.isDeltaVMethod(webdavRequest) && !(DavMethods.DAV_VERSION_CONTROL == methodCode || DavMethods.DAV_REPORT == methodCode);
+ WebdavResponse webdavResponse = new WebdavResponseImpl(response, noCache);
+ try {
+ // make sure there is a authenticated user
+ if (!getDavSessionProvider().attachSession(webdavRequest)) {
+ return;
+ }
+
+ // check matching if=header for lock-token relevant operations
+ DavResource resource = getResourceFactory().createResource(webdavRequest.getRequestLocator(), webdavRequest, webdavResponse);
+ if (!isPreconditionValid(webdavRequest, resource)) {
+ webdavResponse.sendError(DavServletResponse.SC_PRECONDITION_FAILED);
+ return;
+ }
+ if (!execute(webdavRequest, webdavResponse, methodCode, resource)) {
+ super.service(request, response);
+ }
+
+ }
+ catch (UnauthorizedDavException e)
+ {
+ webdavResponse.setHeader("WWW-Authenticate", getAuthenticateHeaderValue(e.getRepositoryName()));
+ webdavResponse.sendError(e.getErrorCode(), e.getStatusPhrase());
+ }
+ catch (DavException e) {
+ if (e.getErrorCode() == HttpServletResponse.SC_UNAUTHORIZED) {
+ log.error("Should throw UnauthorizedDavException");
+ } else {
+ webdavResponse.sendError(e);
+ }
+ } finally {
+ getDavSessionProvider().releaseSession(webdavRequest);
+ }
+ }
public synchronized void initServers( ServletConfig servletConfig )
- throws DavServerException
{
WebApplicationContext wac = WebApplicationContextUtils.getRequiredWebApplicationContext( servletConfig.getServletContext() );
- mimeTypeLoader = (ArchivaMimeTypeLoader) wac.getBean(
- PlexusToSpringUtils.buildSpringId( ArchivaMimeTypeLoader.class.getName() ) );
-
securitySystem = (SecuritySystem) wac.getBean( PlexusToSpringUtils.buildSpringId( SecuritySystem.ROLE ) );
httpAuth =
(HttpAuthenticator) wac.getBean( PlexusToSpringUtils.buildSpringId( HttpAuthenticator.ROLE, "basic" ) );
@@ -101,157 +157,91 @@
continue;
}
}
-
- DavServerComponent server = createServer( repo.getId(), repoDir, servletConfig );
-
- server.setUseIndexHtml( true );
}
+
+ resourceFactory = (DavResourceFactory)wac.getBean(PlexusToSpringUtils.buildSpringId(ArchivaDavResourceFactory.class));
+ locatorFactory = new ArchivaDavLocatorFactory();
+ sessionProvider = new ArchivaDavSessionProvider(wac);
}
- @Override
- protected void service( HttpServletRequest httpRequest, HttpServletResponse httpResponse )
- throws ServletException, IOException
+ public void configurationEvent( ConfigurationEvent event )
{
- // Wrap the incoming request to adjust paths and whatnot.
- super.service( new PolicingServletRequest( httpRequest ), httpResponse );
+ if( event.getType() == ConfigurationEvent.SAVED )
+ {
+ initRepositories();
+ }
}
- public synchronized ManagedRepositoryConfiguration getRepository( String prefix )
+ private void initRepositories()
{
- if ( repositoryMap.isEmpty() )
+ synchronized ( repositoryMap )
{
+ repositoryMap.clear();
repositoryMap.putAll( configuration.getConfiguration().getManagedRepositoriesAsMap() );
}
- return repositoryMap.get( prefix );
- }
- private String getRepositoryName( DavServerRequest request )
- {
- ManagedRepositoryConfiguration repoConfig = getRepository( request.getPrefix() );
- if ( repoConfig == null )
+ synchronized ( reloadLock )
{
- return "Unknown";
+ initServers( getServletConfig() );
}
-
- return repoConfig.getName();
}
- public boolean isAuthenticated( DavServerRequest davRequest, HttpServletResponse response )
- throws ServletException, IOException
+ public synchronized ManagedRepositoryConfiguration getRepository( String prefix )
{
- HttpServletRequest request = davRequest.getRequest();
-
- // Authentication Tests.
- try
- {
- AuthenticationResult result = httpAuth.getAuthenticationResult( request, response );
-
- if ( result != null && !result.isAuthenticated() )
- {
- // Must Authenticate.
- httpAuth.challenge( request, response, "Repository " + getRepositoryName( davRequest ),
- new AuthenticationException( "User Credentials Invalid" ) );
- return false;
- }
- }
- catch ( AuthenticationException e )
- {
- log( "Fatal Http Authentication Error.", e );
- throw new ServletException( "Fatal Http Authentication Error.", e );
- }
- catch ( AccountLockedException e )
- {
- httpAuth.challenge( request, response, "Repository " + getRepositoryName( davRequest ),
- new AuthenticationException( "User account is locked" ) );
- }
- catch ( MustChangePasswordException e )
+ if ( repositoryMap.isEmpty() )
{
- httpAuth.challenge( request, response, "Repository " + getRepositoryName( davRequest ),
- new AuthenticationException( "You must change your password." ) );
+ repositoryMap.putAll( configuration.getConfiguration().getManagedRepositoriesAsMap() );
}
-
- return true;
+ return repositoryMap.get( prefix );
}
- public boolean isAuthorized( DavServerRequest davRequest, HttpServletResponse response )
- throws ServletException, IOException
+ ArchivaConfiguration getConfiguration()
{
- // Authorization Tests.
- HttpServletRequest request = davRequest.getRequest();
-
- boolean isWriteRequest = WebdavMethodUtil.isWriteMethod( request.getMethod() );
-
- SecuritySession securitySession = httpAuth.getSecuritySession();
- try
- {
- String permission = ArchivaRoleConstants.OPERATION_REPOSITORY_ACCESS;
-
- if ( isWriteRequest )
- {
- permission = ArchivaRoleConstants.OPERATION_REPOSITORY_UPLOAD;
- }
+ return configuration;
+ }
- AuthorizationResult authzResult =
- securitySystem.authorize( securitySession, permission, davRequest.getPrefix() );
+ protected boolean isPreconditionValid(final WebdavRequest request, final DavResource davResource)
+ {
+ return true;
+ }
- if ( !authzResult.isAuthorized() )
- {
- if ( authzResult.getException() != null )
- {
- log( "Authorization Denied [ip=" + request.getRemoteAddr() + ",isWriteRequest=" + isWriteRequest +
- ",permission=" + permission + ",repo=" + davRequest.getPrefix() + "] : " +
- authzResult.getException().getMessage() );
- }
+ public DavSessionProvider getDavSessionProvider()
+ {
+ return sessionProvider;
+ }
- // Issue HTTP Challenge.
- httpAuth.challenge( request, response, "Repository " + getRepositoryName( davRequest ),
- new AuthenticationException( "Authorization Denied." ) );
- return false;
- }
- }
- catch ( AuthorizationException e )
- {
- throw new ServletException( "Fatal Authorization Subsystem Error." );
- }
+ public void setDavSessionProvider(final DavSessionProvider davSessionProvider)
+ {
+ this.sessionProvider = davSessionProvider;
+ }
- return true;
+ public DavLocatorFactory getLocatorFactory()
+ {
+ return locatorFactory;
}
-
- public void configurationEvent( ConfigurationEvent event )
+
+ public void setLocatorFactory(final DavLocatorFactory davLocatorFactory)
{
- if( event.getType() == ConfigurationEvent.SAVED )
- {
- initRepositories();
- }
+ locatorFactory = davLocatorFactory;
}
- private void initRepositories()
+ public DavResourceFactory getResourceFactory()
{
- synchronized ( repositoryMap )
- {
- repositoryMap.clear();
- repositoryMap.putAll( configuration.getConfiguration().getManagedRepositoriesAsMap() );
- }
+ return resourceFactory;
+ }
- synchronized ( davManager )
- {
- // Clear out the old servers.
- davManager.removeAllServers();
+ public void setResourceFactory(final DavResourceFactory davResourceFactory)
+ {
+ resourceFactory = davResourceFactory;
+ }
- // Create new servers.
- try
- {
- initServers( getServletConfig() );
- }
- catch ( DavServerException e )
- {
- log( "Unable to init servers: " + e.getMessage(), e );
- }
- }
+ public String getAuthenticateHeaderValue()
+ {
+ throw new UnsupportedOperationException("");
}
- ArchivaConfiguration getConfiguration()
+ public String getAuthenticateHeaderValue(String repository)
{
- return configuration;
+ return "Basic realm=\"Repository Archiva Managed " + repository + " Repository\"";
}
}
Modified: archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/resources/META-INF/plexus/application.xml
URL: http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/resources/META-INF/plexus/application.xml?rev=649352&r1=649351&r2=649352&view=diff
==============================================================================
--- archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/resources/META-INF/plexus/application.xml (original)
+++ archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/resources/META-INF/plexus/application.xml Thu Apr 17 20:05:18 2008
@@ -67,19 +67,6 @@
</component>
<component>
- <role>org.apache.maven.archiva.webdav.DavServerManager</role>
- <role-hint>default</role-hint>
- <implementation>org.apache.maven.archiva.webdav.DefaultDavServerManager</implementation>
- <description>DefaultDavServerManager</description>
- <requirements>
- <requirement>
- <role>org.apache.maven.archiva.webdav.DavServerComponent</role>
- <role-hint>proxied</role-hint>
- </requirement>
- </requirements>
- </component>
-
- <component>
<role>org.codehaus.plexus.jdo.JdoFactory</role>
<role-hint>archiva</role-hint>
<implementation>org.codehaus.plexus.jdo.DataSourceConfigurableJdoFactory</implementation>
@@ -187,14 +174,14 @@
</configuration>
</component>
- <component>
+ <!-- <component>
<role>org.apache.maven.archiva.webdav.util.MimeTypes</role>
<implementation>org.apache.maven.archiva.webdav.util.MimeTypes</implementation>
<description>MimeTypes</description>
<configuration>
<resource>archiva-mime-types.txt</resource>
</configuration>
- </component>
+ </component> -->
<!--
| Logger manager
Copied: archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/repository/MimeTypesLoaderTest.java (from r649123, archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/repository/ArchivaMimeTypeLoaderTest.java)
URL: http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/repository/MimeTypesLoaderTest.java?p2=archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/repository/MimeTypesLoaderTest.java&p1=archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/repository/ArchivaMimeTypeLoaderTest.java&r1=649123&r2=649352&rev=649352&view=diff
==============================================================================
--- archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/repository/ArchivaMimeTypeLoaderTest.java (original)
+++ archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/repository/MimeTypesLoaderTest.java Thu Apr 17 20:05:18 2008
@@ -28,13 +28,13 @@
* @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
* @version $Id$
*/
-public class ArchivaMimeTypeLoaderTest
+public class MimeTypesLoaderTest
extends PlexusInSpringTestCase
{
public void testArchivaTypes()
throws Exception
{
- lookup( ArchivaMimeTypeLoader.class );
+ lookup( MimeTypes.class );
MimeTypes mimeTypes = (MimeTypes) lookup( MimeTypes.class );
assertNotNull( mimeTypes );
@@ -43,5 +43,6 @@
assertEquals( "md5", "text/plain", mimeTypes.getMimeType( "foo.md5" ) );
assertEquals( "pgp", "application/pgp-encrypted", mimeTypes.getMimeType( "foo.pgp" ) );
assertEquals( "jar", "application/java-archive", mimeTypes.getMimeType( "foo.jar" ) );
+ assertEquals( "Default", "application/octet-stream", mimeTypes.getMimeType(".SomeUnknownExtension"));
}
}
Added: archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/repository/UnauthenticatedDavSessionProvider.java
URL: http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/repository/UnauthenticatedDavSessionProvider.java?rev=649352&view=auto
==============================================================================
--- archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/repository/UnauthenticatedDavSessionProvider.java (added)
+++ archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/repository/UnauthenticatedDavSessionProvider.java Thu Apr 17 20:05:18 2008
@@ -0,0 +1,50 @@
+package org.apache.maven.archiva.web.repository;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.archiva.webdav.ArchivaDavSessionProvider;
+import org.apache.jackrabbit.webdav.WebdavRequest;
+import org.apache.jackrabbit.webdav.DavException;
+import org.springframework.web.context.WebApplicationContext;
+
+/**
+ * @author <a href="mailto:james@atlassian.com">James William Dumay</a>
+ */
+public class UnauthenticatedDavSessionProvider extends ArchivaDavSessionProvider
+{
+ public UnauthenticatedDavSessionProvider(WebApplicationContext applicationContext)
+ {
+ super(applicationContext);
+ }
+
+ @Override
+ protected boolean isAuthorized( WebdavRequest request, String repositoryId )
+ throws DavException
+ {
+ return true;
+ }
+
+ @Override
+ protected boolean isAuthenticated( WebdavRequest request, String repositoryId )
+ throws DavException
+ {
+ return true;
+ }
+}
Propchange: archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/repository/UnauthenticatedDavSessionProvider.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/repository/UnauthenticatedRepositoryServlet.java
URL: http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/repository/UnauthenticatedRepositoryServlet.java?rev=649352&r1=649351&r2=649352&view=diff
==============================================================================
--- archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/repository/UnauthenticatedRepositoryServlet.java (original)
+++ archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/repository/UnauthenticatedRepositoryServlet.java Thu Apr 17 20:05:18 2008
@@ -19,11 +19,10 @@
* under the License.
*/
-import org.apache.maven.archiva.webdav.servlet.DavServerRequest;
+import org.springframework.web.context.WebApplicationContext;
+import org.springframework.web.context.support.WebApplicationContextUtils;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
+import javax.servlet.ServletConfig;
/**
* UnauthenticatedRepositoryServlet
@@ -34,16 +33,14 @@
public class UnauthenticatedRepositoryServlet
extends RepositoryServlet
{
- public boolean isAuthorized( DavServerRequest davRequest, HttpServletResponse response )
- throws ServletException, IOException
- {
- return true;
- }
-
@Override
- public boolean isAuthenticated( DavServerRequest davRequest, HttpServletResponse response )
- throws ServletException, IOException
+ public synchronized void initServers( ServletConfig servletConfig )
{
- return true;
+ super.initServers(servletConfig);
+
+ WebApplicationContext wac = WebApplicationContextUtils.getRequiredWebApplicationContext( servletConfig.getServletContext() );
+
+ UnauthenticatedDavSessionProvider sessionProvider = new UnauthenticatedDavSessionProvider(wac);
+ setDavSessionProvider(sessionProvider);
}
}
Modified: archiva/trunk/archiva-modules/archiva-web/archiva-webdav/pom.xml
URL: http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-webdav/pom.xml?rev=649352&r1=649351&r2=649352&view=diff
==============================================================================
--- archiva/trunk/archiva-modules/archiva-web/archiva-webdav/pom.xml (original)
+++ archiva/trunk/archiva-modules/archiva-web/archiva-webdav/pom.xml Thu Apr 17 20:05:18 2008
@@ -27,9 +27,45 @@
</parent>
<artifactId>archiva-webdav</artifactId>
- <name>Archiva WebDAV Provider</name>
+ <name>Archiva Web :: WebDAV</name>
<dependencies>
+ <!-- Archiva Modules -->
+ <dependency>
+ <groupId>org.apache.archiva</groupId>
+ <artifactId>archiva-repository-layer</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.archiva</groupId>
+ <artifactId>archiva-proxy</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.archiva</groupId>
+ <artifactId>archiva-security</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.archiva</groupId>
+ <artifactId>archiva-configuration</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus.redback</groupId>
+ <artifactId>redback-xwork-integration</artifactId>
+ <exclusions>
+ <exclusion>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-container-default</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <!-- end Archiva Modules -->
+ <dependency>
+ <groupId>org.apache.maven.wagon</groupId>
+ <artifactId>wagon-http</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.wagon</groupId>
+ <artifactId>wagon-file</artifactId>
+ </dependency>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
@@ -37,14 +73,17 @@
<dependency>
<groupId>org.codehaus.plexus</groupId>
<artifactId>plexus-component-api</artifactId>
- </dependency>
- <dependency>
- <groupId>org.codehaus.plexus</groupId>
- <artifactId>plexus-utils</artifactId>
+ <exclusions>
+ <exclusion>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-container-default</artifactId>
+ </exclusion>
+ </exclusions>
</dependency>
<dependency>
<groupId>org.codehaus.plexus</groupId>
<artifactId>plexus-spring</artifactId>
+ <version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
@@ -52,35 +91,21 @@
<version>2.5.1</version>
</dependency>
<dependency>
+ <groupId>org.apache.jackrabbit</groupId>
+ <artifactId>jackrabbit-webdav</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-model</artifactId>
+ </dependency>
+ <dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
</dependency>
-<!-- We import these classes directly to be able to patch them, since this library hasn't been released in some time
- <dependency>
- <groupId>it.could</groupId>
- <artifactId>webdav</artifactId>
- <version>0.4</version>
- </dependency>
--->
-
- <!-- Required by it.could classes -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
- <version>2.3</version>
<scope>provided</scope>
- </dependency>
- <dependency>
- <groupId>slide</groupId>
- <artifactId>slide-webdavlib</artifactId>
- <version>2.1</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.mortbay.jetty</groupId>
- <artifactId>jetty</artifactId>
- <version>6.0.2</version>
- <scope>test</scope>
</dependency>
</dependencies>
Added: archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/maven/archiva/webdav/ArchivaDavLocatorFactory.java
URL: http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/maven/archiva/webdav/ArchivaDavLocatorFactory.java?rev=649352&view=auto
==============================================================================
--- archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/maven/archiva/webdav/ArchivaDavLocatorFactory.java (added)
+++ archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/maven/archiva/webdav/ArchivaDavLocatorFactory.java Thu Apr 17 20:05:18 2008
@@ -0,0 +1,72 @@
+package org.apache.maven.archiva.webdav;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.jackrabbit.webdav.DavLocatorFactory;
+import org.apache.jackrabbit.webdav.DavResourceLocator;
+import org.apache.jackrabbit.util.Text;
+import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang.ArrayUtils;
+import org.apache.maven.archiva.webdav.util.RepositoryPathUtil;
+
+/**
+ * @author <a href="mailto:james@atlassian.com">James William Dumay</a>
+ */
+public class ArchivaDavLocatorFactory implements DavLocatorFactory
+{
+ public DavResourceLocator createResourceLocator(String prefix, String href)
+ {
+ // build prefix string and remove all prefixes from the given href.
+ StringBuilder b = new StringBuilder();
+ if (prefix != null && prefix.length() > 0) {
+ b.append(prefix);
+ if (!prefix.endsWith("/"))
+ {
+ b.append('/');
+ }
+ if (href.startsWith(prefix)) {
+ href = href.substring(prefix.length());
+ }
+ }
+
+ // special treatment for root item, that has no name but '/' path.
+ if (href == null || "".equals(href)) {
+ href = "/";
+ }
+
+ final String workspaceName = RepositoryPathUtil.getRepositoryName(href);
+
+ return new ArchivaDavResourceLocator(b.toString(), Text.unescape(href), workspaceName, this);
+ }
+
+ public DavResourceLocator createResourceLocator(String prefix, String workspacePath, String resourcePath)
+ {
+ return createResourceLocator(prefix, workspacePath, resourcePath, true);
+ }
+
+ public DavResourceLocator createResourceLocator(String prefix, String workspacePath,
+ String path, boolean isResourcePath)
+ {
+ final String repository = RepositoryPathUtil.getRepositoryName(path);
+ return new ArchivaDavResourceLocator(prefix, path, repository, this);
+ }
+
+
+}
Propchange: archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/maven/archiva/webdav/ArchivaDavLocatorFactory.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/maven/archiva/webdav/ArchivaDavResource.java
URL: http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/maven/archiva/webdav/ArchivaDavResource.java?rev=649352&view=auto
==============================================================================
--- archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/maven/archiva/webdav/ArchivaDavResource.java (added)
+++ archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/maven/archiva/webdav/ArchivaDavResource.java Thu Apr 17 20:05:18 2008
@@ -0,0 +1,301 @@
+package org.apache.maven.archiva.webdav;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.jackrabbit.webdav.*;
+import org.apache.jackrabbit.webdav.property.DavPropertySet;
+import org.apache.jackrabbit.webdav.property.DavPropertyNameSet;
+import org.apache.jackrabbit.webdav.property.DavProperty;
+import org.apache.jackrabbit.webdav.property.DavPropertyName;
+import org.apache.jackrabbit.webdav.io.InputContext;
+import org.apache.jackrabbit.webdav.io.OutputContext;
+import org.apache.jackrabbit.webdav.lock.*;
+import org.apache.jackrabbit.util.Text;
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.io.FileUtils;
+import org.apache.maven.archiva.webdav.util.MimeTypes;
+import org.apache.maven.archiva.webdav.util.IndexWriter;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+import java.util.Date;
+import java.io.*;
+
+/**
+ * @author <a href="mailto:james@atlassian.com">James William Dumay</a>
+ */
+public class ArchivaDavResource implements DavResource
+{
+ private final MimeTypes mimeTypes;
+
+ private final DavResourceLocator locator;
+
+ private final DavResourceFactory factory;
+
+ private final DavSession session;
+
+ private final File localResource;
+
+ private final String logicalResource;
+
+ private static final String METHODS = "OPTIONS, GET, HEAD, POST, TRACE, PROPFIND, PROPPATCH, MKCOL, COPY, PUT, DELETE, MOVE";
+
+ private static final String COMPLIANCE_CLASS = "1";
+
+ private DavPropertySet properties;
+
+ public ArchivaDavResource(String localResource, String logicalResource, MimeTypes mimeTypes, DavResourceLocator locator, DavResourceFactory factory, DavSession session)
+ {
+ this.mimeTypes = mimeTypes;
+ this.localResource = new File(localResource);
+ this.logicalResource = logicalResource;
+ this.locator = locator;
+ this.factory = factory;
+ this.session = session;
+ this.properties = new DavPropertySet();
+ }
+
+ public String getContentType()
+ {
+ return mimeTypes.getMimeType(localResource.getName());
+ }
+
+ public String getComplianceClass()
+ {
+ return COMPLIANCE_CLASS;
+ }
+
+ public String getSupportedMethods()
+ {
+ return METHODS;
+ }
+
+ public boolean exists()
+ {
+ return localResource.exists();
+ }
+
+ public boolean isCollection()
+ {
+ return localResource.isDirectory();
+ }
+
+ public String getDisplayName()
+ {
+ String resPath = getResourcePath();
+ return (resPath != null) ? Text.getName(resPath) : resPath;
+ }
+
+ public DavResourceLocator getLocator()
+ {
+ return locator;
+ }
+
+ public String getResourcePath()
+ {
+ return locator.getResourcePath();
+ }
+
+ public String getHref()
+ {
+ return locator.getHref(isCollection());
+ }
+
+ public long getModificationTime()
+ {
+ return localResource.lastModified();
+ }
+
+ public long getContentLength()
+ {
+ return localResource.length();
+ }
+
+ public void spool(OutputContext outputContext) throws IOException
+ {
+ if (!isCollection())
+ {
+ IOUtils.copy(new FileInputStream(localResource), outputContext.getOutputStream());
+ }
+ else
+ {
+ IndexWriter writer = new IndexWriter(this, localResource, logicalResource);
+ writer.write(outputContext);
+ }
+ }
+
+ public DavPropertyName[] getPropertyNames()
+ {
+ return new DavPropertyName[0];
+ }
+
+ public DavProperty getProperty(DavPropertyName name)
+ {
+ return null;
+ }
+
+ public DavPropertySet getProperties()
+ {
+ return properties;
+ }
+
+ public void setProperty(DavProperty property) throws DavException
+ {
+ }
+
+ public void removeProperty(DavPropertyName propertyName) throws DavException
+ {
+ }
+
+ public MultiStatusResponse alterProperties(DavPropertySet setProperties, DavPropertyNameSet removePropertyNames) throws DavException
+ {
+ return null;
+ }
+
+ public MultiStatusResponse alterProperties(List changeList) throws DavException
+ {
+ return null;
+ }
+
+ public DavResource getCollection()
+ {
+ DavResource parent = null;
+ if (getResourcePath() != null && !getResourcePath().equals("/")) {
+ String parentPath = Text.getRelativeParent(getResourcePath(), 1);
+ if (parentPath.equals("")) {
+ parentPath = "/";
+ }
+ DavResourceLocator parentloc = locator.getFactory().createResourceLocator(locator.getPrefix(), locator.getWorkspacePath(), parentPath);
+ try {
+ parent = factory.createResource(parentloc, session);
+ } catch (DavException e) {
+ // should not occur
+ }
+ }
+ return parent;
+ }
+
+ public void addMember(DavResource resource, InputContext inputContext) throws DavException
+ {
+ File localFile = new File(localResource, resource.getDisplayName());
+ if (!resource.isCollection() && isCollection() && inputContext.hasStream()) //New File
+ {
+ boolean deleteFile = false;
+ FileOutputStream stream = null;
+ try
+ {
+ stream = new FileOutputStream(localFile);
+ IOUtils.copy(inputContext.getInputStream(), stream);
+ if (inputContext.getContentLength() != localFile.length())
+ {
+ deleteFile = true;
+ throw new DavException(HttpServletResponse.SC_BAD_REQUEST, "Content Header length was "
+ + inputContext.getContentLength() + " but was " + localFile.length());
+ }
+ }
+ catch (IOException e)
+ {
+ throw new DavException(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e);
+ }
+ finally
+ {
+ IOUtils.closeQuietly(stream);
+ if (deleteFile)
+ {
+ FileUtils.deleteQuietly(localFile);
+ }
+ }
+ }
+ else if (resource.isCollection() && isCollection()) //New directory
+ {
+ localFile.mkdir();
+ }
+ else
+ {
+ throw new DavException(HttpServletResponse.SC_BAD_REQUEST, "Could not write member "
+ + resource.getResourcePath() + " at " + getResourcePath());
+ }
+ }
+
+ public DavResourceIterator getMembers()
+ {
+ return null;
+ }
+
+ public void removeMember(DavResource member) throws DavException
+ {
+ }
+
+ public void move(DavResource destination) throws DavException
+ {
+ }
+
+ public void copy(DavResource destination, boolean shallow) throws DavException
+ {
+ }
+
+ public boolean isLockable(Type type, Scope scope)
+ {
+ return false;
+ }
+
+ public boolean hasLock(Type type, Scope scope)
+ {
+ return false;
+ }
+
+ public ActiveLock getLock(Type type, Scope scope)
+ {
+ return null;
+ }
+
+ public ActiveLock[] getLocks()
+ {
+ return new ActiveLock[0];
+ }
+
+ public ActiveLock lock(LockInfo reqLockInfo) throws DavException
+ {
+ return null;
+ }
+
+ public ActiveLock refreshLock(LockInfo reqLockInfo, String lockToken) throws DavException
+ {
+ return null;
+ }
+
+ public void unlock(String lockToken) throws DavException
+ {
+ }
+
+ public void addLockManager(LockManager lockmgr)
+ {
+ }
+
+ public DavResourceFactory getFactory()
+ {
+ return factory;
+ }
+
+ public DavSession getSession()
+ {
+ return session;
+ }
+}
Propchange: archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/maven/archiva/webdav/ArchivaDavResource.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/maven/archiva/webdav/ArchivaDavResourceFactory.java
URL: http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/maven/archiva/webdav/ArchivaDavResourceFactory.java?rev=649352&view=auto
==============================================================================
--- archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/maven/archiva/webdav/ArchivaDavResourceFactory.java (added)
+++ archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/maven/archiva/webdav/ArchivaDavResourceFactory.java Thu Apr 17 20:05:18 2008
@@ -0,0 +1,497 @@
+package org.apache.maven.archiva.webdav;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import com.opensymphony.xwork.ActionContext;
+import org.apache.jackrabbit.webdav.*;
+import org.apache.maven.archiva.repository.ManagedRepositoryContent;
+import org.apache.maven.archiva.repository.RepositoryNotFoundException;
+import org.apache.maven.archiva.repository.RepositoryException;
+import org.apache.maven.archiva.repository.RepositoryContentFactory;
+import org.apache.maven.archiva.repository.layout.LayoutException;
+import org.apache.maven.archiva.repository.content.RepositoryRequest;
+import org.apache.maven.archiva.repository.audit.AuditListener;
+import org.apache.maven.archiva.repository.audit.Auditable;
+import org.apache.maven.archiva.repository.audit.AuditEvent;
+import org.apache.maven.archiva.repository.metadata.MetadataTools;
+import org.apache.maven.archiva.repository.metadata.RepositoryMetadataException;
+import org.apache.maven.archiva.webdav.util.WebdavMethodUtil;
+import org.apache.maven.archiva.webdav.util.MimeTypes;
+import org.apache.maven.archiva.webdav.util.RepositoryPathUtil;
+import org.apache.maven.archiva.proxy.RepositoryProxyConnectors;
+import org.apache.maven.archiva.common.utils.PathUtil;
+import org.apache.maven.archiva.model.ArtifactReference;
+import org.apache.maven.archiva.model.ProjectReference;
+import org.apache.maven.archiva.model.VersionedReference;
+import org.apache.maven.archiva.policies.ProxyDownloadException;
+import org.apache.maven.archiva.security.ArchivaXworkUser;
+import org.apache.maven.model.DistributionManagement;
+import org.apache.maven.model.Model;
+import org.apache.maven.model.Relocation;
+import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
+import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.ServletException;
+import java.util.ArrayList;
+import java.util.List;
+import java.io.*;
+
+/**
+ * @author <a href="mailto:james@atlassian.com">James William Dumay</a>
+ * @plexus.component role="org.apache.maven.archiva.webdav.ArchivaDavResourceFactory"
+ */
+public class ArchivaDavResourceFactory implements DavResourceFactory, Auditable
+{
+ private Logger log = LoggerFactory.getLogger(ArchivaDavResourceFactory.class);
+
+ /**
+ * @plexus.requirement role="org.apache.maven.archiva.repository.audit.AuditListener"
+ */
+ private List<AuditListener> auditListeners = new ArrayList<AuditListener>();
+
+ /**
+ * @plexus.requirement
+ */
+ private RepositoryContentFactory repositoryFactory;
+
+ /**
+ * @plexus.requirement
+ */
+ private RepositoryRequest repositoryRequest;
+
+ /**
+ * @plexus.requirement role-hint="default"
+ */
+ private RepositoryProxyConnectors connectors;
+
+ /**
+ * @plexus.requirement
+ */
+ private MetadataTools metadataTools;
+
+ /**
+ * @plexus.requirement
+ */
+ private MimeTypes mimeTypes;
+
+ public DavResource createResource(final DavResourceLocator locator, final DavServletRequest request, final DavServletResponse response) throws DavException
+ {
+ final ManagedRepositoryContent managedRepository = getManagedRepository(locator.getWorkspaceName());
+ final LogicalResource logicalResource = new LogicalResource(RepositoryPathUtil.getLogicalResource(locator.getResourcePath()));
+
+ DavResource resource = null;
+
+ if (managedRepository != null)
+ {
+ final boolean isGet = WebdavMethodUtil.isReadMethod( request.getMethod() );
+ final boolean isPut = WebdavMethodUtil.isWriteMethod( request.getMethod() );
+
+ if (isGet)
+ {
+ resource = doGet(managedRepository, request, locator, logicalResource);
+ }
+
+ if (isPut)
+ {
+ resource = doPut(managedRepository, request, locator, logicalResource);
+ }
+ }
+ else
+ {
+ throw new DavException(HttpServletResponse.SC_NOT_FOUND, "Repository does not exist");
+ }
+
+ if (resource != null)
+ {
+ setHeaders(locator, response);
+ return resource;
+ }
+
+ throw new DavException(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Could not get resource for method " + request.getMethod());
+ }
+
+ public DavResource createResource(final DavResourceLocator locator, final DavSession davSession) throws DavException
+ {
+ final ManagedRepositoryContent managedRepository = getManagedRepository(locator.getWorkspaceName());
+ final String logicalResource = RepositoryPathUtil.getLogicalResource(locator.getResourcePath());
+ final File resourceFile = new File ( managedRepository.getRepoRoot(), logicalResource);
+
+ return new ArchivaDavResource(resourceFile.getAbsolutePath(), logicalResource, mimeTypes, locator, this, null);
+ }
+
+ private DavResource doGet(ManagedRepositoryContent managedRepository, DavServletRequest request, DavResourceLocator locator, LogicalResource logicalResource) throws DavException
+ {
+ File resourceFile = new File ( managedRepository.getRepoRoot(), logicalResource.getPath());
+ ArchivaDavResource resource = new ArchivaDavResource(resourceFile.getAbsolutePath(), logicalResource.getPath(), mimeTypes, locator, this, null);
+
+ if ( !resource.isCollection() )
+ {
+ // At this point the incoming request can either be in default or
+ // legacy layout format.
+ try
+ {
+ boolean fromProxy = fetchContentFromProxies(managedRepository, request, logicalResource );
+
+ // Perform an adjustment of the resource to the managed
+ // repository expected path.
+ String localResourcePath = repositoryRequest.toNativePath( logicalResource.getPath(), managedRepository );
+ resourceFile = new File( managedRepository.getRepoRoot(), localResourcePath );
+
+ boolean previouslyExisted = resourceFile.exists();
+
+ // Attempt to fetch the resource from any defined proxy.
+ if ( fromProxy )
+ {
+ processAuditEvents(request, locator.getWorkspaceName(), logicalResource.getPath(), previouslyExisted, resourceFile, " (proxied)");
+ }
+ resource = new ArchivaDavResource(resourceFile.getAbsolutePath(), logicalResource.getPath(), mimeTypes, locator, this, null);
+
+ }
+ catch ( LayoutException e )
+ {
+ throw new DavException(HttpServletResponse.SC_NOT_FOUND, e);
+ }
+ }
+ return resource;
+ }
+
+ private DavResource doPut(ManagedRepositoryContent managedRepository, DavServletRequest request, DavResourceLocator locator, LogicalResource logicalResource) throws DavException
+ {
+ /*
+ * Create parent directories that don't exist when writing a file
+ * This actually makes this implementation not compliant to the
+ * WebDAV RFC - but we have enough knowledge about how the
+ * collection is being used to do this reasonably and some versions
+ * of Maven's WebDAV don't correctly create the collections
+ * themselves.
+ */
+
+ File rootDirectory = new File(managedRepository.getRepoRoot());
+ File destDir = new File( rootDirectory, logicalResource.getPath() ).getParentFile();
+ if ( !destDir.exists() )
+ {
+ destDir.mkdirs();
+ String relPath =
+ PathUtil.getRelative( rootDirectory.getAbsolutePath(), destDir );
+ triggerAuditEvent(request, logicalResource.getPath(), relPath, AuditEvent.CREATE_DIR );
+ }
+
+ File resourceFile = new File( managedRepository.getRepoRoot(), logicalResource.getPath() );
+
+ boolean previouslyExisted = resourceFile.exists();
+
+ processAuditEvents(request, locator.getWorkspaceName(), logicalResource.getPath(), previouslyExisted, resourceFile, null );
+
+ return new ArchivaDavResource(resourceFile.getAbsolutePath(), logicalResource.getPath(), mimeTypes, locator, this, null);
+ }
+
+ private boolean fetchContentFromProxies( ManagedRepositoryContent managedRepository, DavServletRequest request, LogicalResource resource )
+ throws DavException
+ {
+ if ( repositoryRequest.isSupportFile( resource.getPath() ) )
+ {
+ // Checksums are fetched with artifact / metadata.
+
+ // Need to adjust the path for the checksum resource.
+ return false;
+ }
+
+ // Is it a Metadata resource?
+ if ( repositoryRequest.isDefault( resource.getPath() ) && repositoryRequest.isMetadata( resource.getPath() ) )
+ {
+ return fetchMetadataFromProxies(managedRepository, request, resource );
+ }
+
+ // Not any of the above? Then it's gotta be an artifact reference.
+ try
+ {
+ // Get the artifact reference in a layout neutral way.
+ ArtifactReference artifact = repositoryRequest.toArtifactReference( resource.getPath() );
+
+ if ( artifact != null )
+ {
+ applyServerSideRelocation(managedRepository, artifact );
+
+ File proxiedFile = connectors.fetchFromProxies( managedRepository, artifact );
+
+ resource.setPath( managedRepository.toPath( artifact ) );
+
+ return ( proxiedFile != null );
+ }
+ }
+ catch ( LayoutException e )
+ {
+ /* eat it */
+ }
+ catch ( ProxyDownloadException e )
+ {
+ log.error(e.getMessage(), e);
+ throw new DavException(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Unable to fetch artifact resource.");
+ }
+ return false;
+ }
+
+ private boolean fetchMetadataFromProxies(ManagedRepositoryContent managedRepository, DavServletRequest request, LogicalResource resource )
+ throws DavException
+ {
+ ProjectReference project;
+ VersionedReference versioned;
+
+ try
+ {
+
+ versioned = metadataTools.toVersionedReference( resource.getPath() );
+ if ( versioned != null )
+ {
+ connectors.fetchFromProxies( managedRepository, versioned );
+ return true;
+ }
+ }
+ catch ( RepositoryMetadataException e )
+ {
+ log.error(e.getMessage(), e);
+ }
+
+ try
+ {
+ project = metadataTools.toProjectReference( resource.getPath() );
+ if ( project != null )
+ {
+ connectors.fetchFromProxies( managedRepository, project );
+ return true;
+ }
+ }
+ catch ( RepositoryMetadataException e )
+ {
+ log.error(e.getMessage(), e);
+ }
+
+ return false;
+ }
+
+ /**
+ * A relocation capable client will request the POM prior to the artifact,
+ * and will then read meta-data and do client side relocation. A simplier
+ * client (like maven 1) will only request the artifact and not use the
+ * metadatas.
+ * <p>
+ * For such clients, archiva does server-side relocation by reading itself
+ * the <relocation> element in metadatas and serving the expected
+ * artifact.
+ */
+ protected void applyServerSideRelocation( ManagedRepositoryContent managedRepository, ArtifactReference artifact )
+ throws ProxyDownloadException
+ {
+ if ( "pom".equals( artifact.getType() ) )
+ {
+ return;
+ }
+
+ // Build the artifact POM reference
+ ArtifactReference pomReference = new ArtifactReference();
+ pomReference.setGroupId( artifact.getGroupId() );
+ pomReference.setArtifactId( artifact.getArtifactId() );
+ pomReference.setVersion( artifact.getVersion() );
+ pomReference.setType( "pom" );
+
+ // Get the artifact POM from proxied repositories if needed
+ connectors.fetchFromProxies( managedRepository, pomReference );
+
+ // Open and read the POM from the managed repo
+ File pom = managedRepository.toFile( pomReference );
+
+ if ( !pom.exists() )
+ {
+ return;
+ }
+
+ try
+ {
+ Model model = new MavenXpp3Reader().read( new FileReader( pom ) );
+ DistributionManagement dist = model.getDistributionManagement();
+ if ( dist != null )
+ {
+ Relocation relocation = dist.getRelocation();
+ if ( relocation != null )
+ {
+ // artifact is relocated : update the repositoryPath
+ if ( relocation.getGroupId() != null )
+ {
+ artifact.setGroupId( relocation.getGroupId() );
+ }
+ if ( relocation.getArtifactId() != null )
+ {
+ artifact.setArtifactId( relocation.getArtifactId() );
+ }
+ if ( relocation.getVersion() != null )
+ {
+ artifact.setVersion( relocation.getVersion() );
+ }
+ }
+ }
+ }
+ catch ( FileNotFoundException e )
+ {
+ // Artifact has no POM in repo : ignore
+ }
+ catch ( IOException e )
+ {
+ // Unable to read POM : ignore.
+ }
+ catch ( XmlPullParserException e )
+ {
+ // Invalid POM : ignore
+ }
+ }
+
+ private void processAuditEvents( DavServletRequest request, String repositoryId, String resource,
+ boolean previouslyExisted, File resourceFile, String suffix )
+ {
+ if ( suffix == null )
+ {
+ suffix = "";
+ }
+
+ // Process Create Audit Events.
+ if ( !previouslyExisted && resourceFile.exists() )
+ {
+ if ( resourceFile.isFile() )
+ {
+ triggerAuditEvent( request, repositoryId, resource, AuditEvent.CREATE_FILE + suffix );
+ }
+ else if ( resourceFile.isDirectory() )
+ {
+ triggerAuditEvent( request, repositoryId, resource, AuditEvent.CREATE_DIR + suffix );
+ }
+ }
+ // Process Remove Audit Events.
+ else if ( previouslyExisted && !resourceFile.exists() )
+ {
+ if ( resourceFile.isFile() )
+ {
+ triggerAuditEvent( request, repositoryId, resource, AuditEvent.REMOVE_FILE + suffix );
+ }
+ else if ( resourceFile.isDirectory() )
+ {
+ triggerAuditEvent( request, repositoryId, resource, AuditEvent.REMOVE_DIR + suffix );
+ }
+ }
+ // Process modify events.
+ else
+ {
+ if ( resourceFile.isFile() )
+ {
+ triggerAuditEvent( request, repositoryId, resource, AuditEvent.MODIFY_FILE + suffix );
+ }
+ }
+ }
+
+ private void triggerAuditEvent( String user, String remoteIP, String repositoryId, String resource, String action )
+ {
+ AuditEvent event = new AuditEvent( repositoryId, user, resource, action );
+ event.setRemoteIP( remoteIP );
+
+ for ( AuditListener listener : auditListeners )
+ {
+ listener.auditEvent( event );
+ }
+ }
+
+ private void triggerAuditEvent( DavServletRequest request, String repositoryId, String resource, String action )
+ {
+ triggerAuditEvent( ArchivaXworkUser.getActivePrincipal( ActionContext.getContext().getSession() ), getRemoteIP( request ), repositoryId, resource, action );
+ }
+
+ private String getRemoteIP( DavServletRequest request )
+ {
+ return request.getRemoteAddr();
+ }
+
+ public void addAuditListener( AuditListener listener )
+ {
+ this.auditListeners.add( listener );
+ }
+
+ public void clearAuditListeners()
+ {
+ this.auditListeners.clear();
+ }
+
+ public void removeAuditListener( AuditListener listener )
+ {
+ this.auditListeners.remove( listener );
+ }
+
+ private void setHeaders(DavResourceLocator locator, DavServletResponse response)
+ {
+ // [MRM-503] - Metadata file need Pragma:no-cache response
+ // header.
+ if ( locator.getResourcePath().endsWith( "/maven-metadata.xml" ) )
+ {
+ response.addHeader( "Pragma", "no-cache" );
+ response.addHeader( "Cache-Control", "no-cache" );
+ }
+
+ // TODO: [MRM-524] determine http caching options for other types of files (artifacts, sha1, md5, snapshots)
+ }
+
+ private ManagedRepositoryContent getManagedRepository(String respositoryId) throws DavException
+ {
+ if (respositoryId != null)
+ {
+ try
+ {
+ return repositoryFactory.getManagedRepositoryContent(respositoryId);
+ }
+ catch (RepositoryNotFoundException e)
+ {
+ throw new DavException(HttpServletResponse.SC_NOT_FOUND, e);
+ }
+ catch (RepositoryException e)
+ {
+ throw new DavException(HttpServletResponse.SC_NOT_FOUND, e);
+ }
+ }
+ return null;
+ }
+
+ class LogicalResource
+ {
+ private String path;
+
+ public LogicalResource(String path)
+ {
+ this.path = path;
+ }
+
+ public String getPath()
+ {
+ return path;
+ }
+
+ public void setPath(String path)
+ {
+ this.path = path;
+ }
+ }
+}
Propchange: archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/maven/archiva/webdav/ArchivaDavResourceFactory.java
------------------------------------------------------------------------------
svn:eol-style = native