diff --git a/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/maven/archiva/webdav/ArchivaDavSessionProvider.java b/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/maven/archiva/webdav/ArchivaDavSessionProvider.java
index b2200aac6..085a6e770 100644
--- a/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/maven/archiva/webdav/ArchivaDavSessionProvider.java
+++ b/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/maven/archiva/webdav/ArchivaDavSessionProvider.java
@@ -30,10 +30,9 @@ import org.codehaus.plexus.redback.authentication.AuthenticationResult;
import org.codehaus.plexus.redback.policy.MustChangePasswordException;
import org.codehaus.plexus.redback.policy.AccountLockedException;
import org.codehaus.plexus.redback.xwork.filter.authentication.HttpAuthenticator;
-import org.codehaus.plexus.spring.PlexusToSpringUtils;
-import org.springframework.web.context.WebApplicationContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.context.ApplicationContext;
/**
* @author James William Dumay
@@ -47,13 +46,10 @@ public class ArchivaDavSessionProvider
private HttpAuthenticator httpAuth;
- public ArchivaDavSessionProvider( WebApplicationContext applicationContext )
+ public ArchivaDavSessionProvider( ServletAuthenticator servletAuth, HttpAuthenticator httpAuth )
{
- servletAuth =
- (ServletAuthenticator) applicationContext.getBean( PlexusToSpringUtils.buildSpringId( ServletAuthenticator.class.getName() ) );
- httpAuth =
- (HttpAuthenticator) applicationContext.getBean( PlexusToSpringUtils.buildSpringId( HttpAuthenticator.ROLE,
- "basic" ) );
+ this.servletAuth = servletAuth;
+ this.httpAuth = httpAuth;
}
public boolean attachSession( WebdavRequest request )
@@ -86,11 +82,7 @@ public class ArchivaDavSessionProvider
public void releaseSession( WebdavRequest request )
{
- //Remove DavSession
- if (request.getDavSession() != null)
- {
- request.setDavSession(null);
- }
+ request.setDavSession(null);
}
private String removeContextPath( final DavServletRequest request )
diff --git a/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/maven/archiva/webdav/RepositoryServlet.java b/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/maven/archiva/webdav/RepositoryServlet.java
index ca6cc9bc7..969b75da3 100644
--- a/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/maven/archiva/webdav/RepositoryServlet.java
+++ b/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/maven/archiva/webdav/RepositoryServlet.java
@@ -38,6 +38,8 @@ import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
import java.util.Map;
+import org.apache.maven.archiva.security.ServletAuthenticator;
+import org.codehaus.plexus.redback.xwork.filter.authentication.HttpAuthenticator;
/**
* RepositoryServlet
@@ -175,7 +177,13 @@ public class RepositoryServlet
resourceFactory =
(DavResourceFactory) wac.getBean( PlexusToSpringUtils.buildSpringId( ArchivaDavResourceFactory.class ) );
locatorFactory = new ArchivaDavLocatorFactory();
- sessionProvider = new ArchivaDavSessionProvider( wac );
+
+ ServletAuthenticator servletAuth =
+ (ServletAuthenticator) wac.getBean( PlexusToSpringUtils.buildSpringId( ServletAuthenticator.class.getName() ) );
+ HttpAuthenticator httpAuth =
+ (HttpAuthenticator) wac.getBean( PlexusToSpringUtils.buildSpringId( HttpAuthenticator.ROLE, "basic" ) );
+
+ sessionProvider = new ArchivaDavSessionProvider( servletAuth, httpAuth );
}
public void configurationEvent( ConfigurationEvent event )
diff --git a/archiva-modules/archiva-web/archiva-webdav/src/test/java/org/apache/maven/archiva/webdav/ArchivaDavSessionProviderTest.java b/archiva-modules/archiva-web/archiva-webdav/src/test/java/org/apache/maven/archiva/webdav/ArchivaDavSessionProviderTest.java
new file mode 100644
index 000000000..2a53bf99d
--- /dev/null
+++ b/archiva-modules/archiva-web/archiva-webdav/src/test/java/org/apache/maven/archiva/webdav/ArchivaDavSessionProviderTest.java
@@ -0,0 +1,444 @@
+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 java.io.BufferedReader;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.security.Principal;
+import java.util.Enumeration;
+import java.util.Locale;
+import java.util.Map;
+import javax.servlet.RequestDispatcher;
+import javax.servlet.ServletInputStream;
+import javax.servlet.http.Cookie;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
+import junit.framework.TestCase;
+import org.apache.jackrabbit.webdav.DavSessionProvider;
+import org.apache.jackrabbit.webdav.WebdavRequest;
+import org.apache.jackrabbit.webdav.WebdavRequestImpl;
+import org.apache.maven.archiva.security.ServletAuthenticator;
+import org.codehaus.plexus.redback.authentication.AuthenticationDataSource;
+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.UnauthorizedException;
+import org.codehaus.plexus.redback.policy.AccountLockedException;
+import org.codehaus.plexus.redback.policy.MustChangePasswordException;
+import org.codehaus.plexus.redback.system.SecuritySession;
+import org.codehaus.plexus.redback.users.User;
+import org.codehaus.plexus.redback.xwork.filter.authentication.HttpAuthenticator;
+
+public class ArchivaDavSessionProviderTest extends TestCase
+{
+ private DavSessionProvider sessionProvider;
+
+ private WebdavRequest request;
+
+ @Override
+ protected void setUp()
+ throws Exception
+ {
+ super.setUp();
+ sessionProvider = new ArchivaDavSessionProvider(new ServletAuthenticatorMock(), new HttpAuthenticatorMock());
+ request = new WebdavRequestImpl(new HttpServletRequestMock(), null);
+ }
+
+ public void testAttachSession()
+ throws Exception
+ {
+ assertNull(request.getDavSession());
+ sessionProvider.attachSession(request);
+ assertNotNull(request.getDavSession());
+ }
+
+ public void testReleaseSession()
+ throws Exception
+ {
+ assertNull(request.getDavSession());
+ sessionProvider.attachSession(request);
+ assertNotNull(request.getDavSession());
+
+ sessionProvider.releaseSession(request);
+ assertNull(request.getDavSession());
+ }
+
+ private class HttpServletRequestMock implements HttpServletRequest
+ {
+ public Object getAttribute(String arg0) {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ public Enumeration getAttributeNames() {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ public String getCharacterEncoding() {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ public int getContentLength() {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ public String getContentType() {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ public ServletInputStream getInputStream()
+ throws IOException
+ {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ public String getLocalAddr() {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ public String getLocalName() {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ public int getLocalPort() {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ public Locale getLocale() {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ public Enumeration getLocales()
+ {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ public String getParameter(String arg0)
+ {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ public Map getParameterMap()
+ {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ public Enumeration getParameterNames()
+ {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ public String[] getParameterValues(String arg0)
+ {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ public String getProtocol() {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ public BufferedReader getReader()
+ throws IOException
+ {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ public String getRealPath(String arg0)
+ {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ public String getRemoteAddr()
+ {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ public String getRemoteHost()
+ {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ public int getRemotePort()
+ {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ public RequestDispatcher getRequestDispatcher(String arg0)
+ {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ public String getScheme()
+ {
+ return "";
+ }
+
+ public String getServerName()
+ {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ public int getServerPort()
+ {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ public boolean isSecure()
+ {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ public void removeAttribute(String arg0)
+ {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ public void setAttribute(String arg0, Object arg1)
+ {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ public void setCharacterEncoding(String arg0)
+ throws UnsupportedEncodingException
+ {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+
+ public String getAuthType()
+ {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ public String getContextPath()
+ {
+ return "/";
+ }
+
+ public Cookie[] getCookies()
+ {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ public long getDateHeader(String arg0)
+ {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ public String getHeader(String arg0) {
+ return "";
+ }
+
+ public Enumeration getHeaderNames()
+ {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ public Enumeration getHeaders(String arg0)
+ {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ public int getIntHeader(String arg0)
+ {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ public String getMethod()
+ {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ public String getPathInfo()
+ {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ public String getPathTranslated()
+ {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ public String getQueryString()
+ {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ public String getRemoteUser()
+ {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ public String getRequestURI()
+ {
+ return "/";
+ }
+
+ public StringBuffer getRequestURL()
+ {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ public String getRequestedSessionId()
+ {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ public String getServletPath()
+ {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ public HttpSession getSession(boolean arg0)
+ {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ public HttpSession getSession()
+ {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ public Principal getUserPrincipal()
+ {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ public boolean isRequestedSessionIdFromCookie()
+ {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ public boolean isRequestedSessionIdFromURL()
+ {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ public boolean isRequestedSessionIdFromUrl()
+ {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ public boolean isRequestedSessionIdValid()
+ {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ public boolean isUserInRole(String arg0)
+ {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+ }
+
+ private class ServletAuthenticatorMock implements ServletAuthenticator
+ {
+ public boolean isAuthenticated(HttpServletRequest arg0, AuthenticationResult arg1)
+ throws AuthenticationException, AccountLockedException, MustChangePasswordException
+ {
+ return true;
+ }
+
+ public boolean isAuthorized(HttpServletRequest arg0, SecuritySession arg1, String arg2, boolean arg3)
+ throws AuthorizationException, UnauthorizedException
+ {
+ return true;
+ }
+
+ public boolean isAuthorizedToAccessVirtualRepository(String arg0, String arg1)
+ throws UnauthorizedException
+ {
+ return true;
+ }
+ }
+
+ private class HttpAuthenticatorMock extends HttpAuthenticator
+ {
+ @Override
+ public void challenge(HttpServletRequest arg0, HttpServletResponse arg1, String arg2, AuthenticationException arg3)
+ throws IOException
+ {
+ //Do nothing
+ }
+
+ @Override
+ public AuthenticationResult getAuthenticationResult(HttpServletRequest arg0, HttpServletResponse arg1)
+ throws AuthenticationException, AccountLockedException, MustChangePasswordException
+ {
+ return new AuthenticationResult();
+ }
+
+
+ @Override
+ public AuthenticationResult authenticate(AuthenticationDataSource arg0)
+ throws AuthenticationException, AccountLockedException, MustChangePasswordException
+ {
+ return new AuthenticationResult();
+ }
+
+ @Override
+ public void authenticate(HttpServletRequest arg0, HttpServletResponse arg1)
+ throws AuthenticationException
+ {
+ //Do nothing
+ }
+
+ @Override
+ public Map getContextSession()
+ {
+ return super.getContextSession();
+ }
+
+ @Override
+ public SecuritySession getSecuritySession()
+ {
+ return super.getSecuritySession();
+ }
+
+ @Override
+ public User getSessionUser()
+ {
+ return super.getSessionUser();
+ }
+
+ @Override
+ public boolean isAlreadyAuthenticated()
+ {
+ return super.isAlreadyAuthenticated();
+ }
+
+ @Override
+ public void setSecuritySession(SecuritySession session)
+ {
+ super.setSecuritySession(session);
+ }
+
+ @Override
+ public void setSessionUser(User user) {
+ super.setSessionUser(user);
+ }
+
+ @Override
+ public String storeDefaultUser(String user) {
+ return super.storeDefaultUser(user);
+ }
+
+ }
+}
diff --git a/archiva-modules/archiva-web/archiva-webdav/src/test/java/org/apache/maven/archiva/webdav/UnauthenticatedDavSessionProvider.java b/archiva-modules/archiva-web/archiva-webdav/src/test/java/org/apache/maven/archiva/webdav/UnauthenticatedDavSessionProvider.java
index 567f348f0..13082cf4d 100644
--- a/archiva-modules/archiva-web/archiva-webdav/src/test/java/org/apache/maven/archiva/webdav/UnauthenticatedDavSessionProvider.java
+++ b/archiva-modules/archiva-web/archiva-webdav/src/test/java/org/apache/maven/archiva/webdav/UnauthenticatedDavSessionProvider.java
@@ -19,25 +19,24 @@ package org.apache.maven.archiva.webdav;
* under the License.
*/
-import org.apache.maven.archiva.webdav.ArchivaDavSessionProvider;
import org.apache.jackrabbit.webdav.DavException;
import org.apache.jackrabbit.webdav.WebdavRequest;
-import org.springframework.web.context.WebApplicationContext;
/**
* @author James William Dumay
*/
public class UnauthenticatedDavSessionProvider extends ArchivaDavSessionProvider
{
- public UnauthenticatedDavSessionProvider(WebApplicationContext applicationContext)
+ public UnauthenticatedDavSessionProvider()
{
- super(applicationContext);
+ super(null, null);
}
@Override
public boolean attachSession( WebdavRequest request )
throws DavException
{
+ request.setDavSession(new ArchivaDavSession());
return true;
- }
+ }
}
diff --git a/archiva-modules/archiva-web/archiva-webdav/src/test/java/org/apache/maven/archiva/webdav/UnauthenticatedRepositoryServlet.java b/archiva-modules/archiva-web/archiva-webdav/src/test/java/org/apache/maven/archiva/webdav/UnauthenticatedRepositoryServlet.java
index 57f37931c..d62ddf9ac 100644
--- a/archiva-modules/archiva-web/archiva-webdav/src/test/java/org/apache/maven/archiva/webdav/UnauthenticatedRepositoryServlet.java
+++ b/archiva-modules/archiva-web/archiva-webdav/src/test/java/org/apache/maven/archiva/webdav/UnauthenticatedRepositoryServlet.java
@@ -19,10 +19,6 @@ package org.apache.maven.archiva.webdav;
* under the License.
*/
-import org.springframework.web.context.WebApplicationContext;
-import org.springframework.web.context.support.WebApplicationContextUtils;
-import org.apache.maven.archiva.webdav.RepositoryServlet;
-
import javax.servlet.ServletConfig;
/**
@@ -38,10 +34,8 @@ public class UnauthenticatedRepositoryServlet
public synchronized void initServers( ServletConfig servletConfig )
{
super.initServers(servletConfig);
-
- WebApplicationContext wac = WebApplicationContextUtils.getRequiredWebApplicationContext( servletConfig.getServletContext() );
-
- UnauthenticatedDavSessionProvider sessionProvider = new UnauthenticatedDavSessionProvider(wac);
+
+ UnauthenticatedDavSessionProvider sessionProvider = new UnauthenticatedDavSessionProvider();
setDavSessionProvider(sessionProvider);
}
}