Author: oching
Date: Sun May 11 00:30:52 2008
New Revision: 655274

URL: http://svn.apache.org/viewvc?rev=655274&view=rev
Log:
[MRM-773]
set response header to 'authenticate' if no username and password were supplied

Modified:
    
archiva/trunk/archiva-modules/archiva-web/archiva-security/src/main/java/org/apache/maven/archiva/security/ArchivaServletAuthenticator.java
    
archiva/trunk/archiva-modules/archiva-web/archiva-security/src/main/java/org/apache/maven/archiva/security/ServletAuthenticator.java
    
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/rss/RssFeedServlet.java
    
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/maven/archiva/webdav/ArchivaDavSessionProvider.java

Modified: 
archiva/trunk/archiva-modules/archiva-web/archiva-security/src/main/java/org/apache/maven/archiva/security/ArchivaServletAuthenticator.java
URL: 
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-security/src/main/java/org/apache/maven/archiva/security/ArchivaServletAuthenticator.java?rev=655274&r1=655273&r2=655274&view=diff
==============================================================================
--- 
archiva/trunk/archiva-modules/archiva-web/archiva-security/src/main/java/org/apache/maven/archiva/security/ArchivaServletAuthenticator.java
 (original)
+++ 
archiva/trunk/archiva-modules/archiva-web/archiva-security/src/main/java/org/apache/maven/archiva/security/ArchivaServletAuthenticator.java
 Sun May 11 00:30:52 2008
@@ -26,6 +26,7 @@
 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.authorization.UnauthorizedException;
 import org.codehaus.plexus.redback.policy.AccountLockedException;
 import org.codehaus.plexus.redback.policy.MustChangePasswordException;
 import org.codehaus.plexus.redback.system.SecuritySession;
@@ -43,7 +44,7 @@
     private Logger log = LoggerFactory.getLogger( 
ArchivaServletAuthenticator.class );
 
     /**
-     * @plexus.requirement 
+     * @plexus.requirement
      */
     private SecuritySystem securitySystem;
 
@@ -60,7 +61,7 @@
 
     public boolean isAuthorized( HttpServletRequest request, SecuritySession 
securitySession, String repositoryId,
                                  boolean isWriteRequest )
-        throws AuthorizationException
+        throws AuthorizationException, UnauthorizedException
     {
         String permission = ArchivaRoleConstants.OPERATION_REPOSITORY_ACCESS;
 
@@ -74,13 +75,14 @@
         if ( !authzResult.isAuthorized() )
         {
             if ( authzResult.getException() != null )
-            {                
+            {
                 log.info( "Authorization Denied [ip=" + 
request.getRemoteAddr() + ",isWriteRequest=" + isWriteRequest +
                     ",permission=" + permission + ",repo=" + repositoryId + "] 
: " +
                     authzResult.getException().getMessage() );
-                
-                return false;
+
+                throw new UnauthorizedException( "Access denied for repository 
" + repositoryId );
             }
+            throw new UnauthorizedException( "User account is locked" );
         }
 
         return true;

Modified: 
archiva/trunk/archiva-modules/archiva-web/archiva-security/src/main/java/org/apache/maven/archiva/security/ServletAuthenticator.java
URL: 
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-security/src/main/java/org/apache/maven/archiva/security/ServletAuthenticator.java?rev=655274&r1=655273&r2=655274&view=diff
==============================================================================
--- 
archiva/trunk/archiva-modules/archiva-web/archiva-security/src/main/java/org/apache/maven/archiva/security/ServletAuthenticator.java
 (original)
+++ 
archiva/trunk/archiva-modules/archiva-web/archiva-security/src/main/java/org/apache/maven/archiva/security/ServletAuthenticator.java
 Sun May 11 00:30:52 2008
@@ -24,6 +24,7 @@
 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;
@@ -38,5 +39,5 @@
         throws AuthenticationException, AccountLockedException, 
MustChangePasswordException;
 
     public boolean isAuthorized( HttpServletRequest request, SecuritySession 
securitySession, String repositoryId,
-        boolean isWriteRequest ) throws AuthorizationException;
+        boolean isWriteRequest ) throws AuthorizationException, 
UnauthorizedException;
 }

Modified: 
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/rss/RssFeedServlet.java
URL: 
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/rss/RssFeedServlet.java?rev=655274&r1=655273&r2=655274&view=diff
==============================================================================
--- 
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/rss/RssFeedServlet.java
 (original)
+++ 
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/rss/RssFeedServlet.java
 Sun May 11 00:30:52 2008
@@ -44,6 +44,7 @@
 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;
@@ -104,14 +105,15 @@
     public void doGet( HttpServletRequest req, HttpServletResponse res )
         throws ServletException, IOException
     {
+        String repoId = req.getParameter( "repoId" );
+        String groupId = req.getParameter( "groupId" );
+        String artifactId = req.getParameter( "artifactId" );
+        
         try
         {
             Map<String, String> map = new HashMap<String, String>();
             SyndFeed feed = null;
-            String repoId = req.getParameter( "repoId" );
-            String groupId = req.getParameter( "groupId" );
-            String artifactId = req.getParameter( "artifactId" );
-
+        
             if ( ( repoId == null ) && ( groupId == null && artifactId == null 
) )
             {
                 res.sendError( HttpServletResponse.SC_BAD_REQUEST, "Required 
fields not found in request." );
@@ -173,6 +175,7 @@
         }
         catch ( AuthenticationException authe )
         {
+            authe.printStackTrace();
             log.error( COULD_NOT_AUTHENTICATE_USER, authe );
             res.sendError( HttpServletResponse.SC_UNAUTHORIZED, 
COULD_NOT_AUTHENTICATE_USER );
         }
@@ -186,6 +189,20 @@
             log.error( COULD_NOT_AUTHENTICATE_USER, e );
             res.sendError( HttpServletResponse.SC_UNAUTHORIZED, 
COULD_NOT_AUTHENTICATE_USER );
         }
+        catch ( UnauthorizedException e )
+        {
+            log.error( e.getMessage() );
+            if ( repoId != null )
+            {
+                res.setHeader("WWW-Authenticate", "Basic realm=\"Repository 
Archiva Managed " + repoId + " Repository" );
+            }
+            else
+            {
+                res.setHeader("WWW-Authenticate", "Basic realm=\"Artifact " + 
groupId + ":" + artifactId );
+            }
+            
+            res.sendError( HttpServletResponse.SC_UNAUTHORIZED, 
USER_NOT_AUTHORIZED );
+        }
     }
 
     /**
@@ -195,7 +212,8 @@
      * @return
      */
     private boolean isAllowed( HttpServletRequest req )
-        throws UserNotFoundException, AccountLockedException, 
AuthenticationException, MustChangePasswordException
+        throws UserNotFoundException, AccountLockedException, 
AuthenticationException, MustChangePasswordException,
+        UnauthorizedException
     {
         String auth = req.getHeader( "Authorization" );
         List<String> repoIds = new ArrayList<String>();
@@ -262,9 +280,13 @@
             {
                 log.error( "Fatal Authorization Subsystem Error." );
             }
+            catch ( UnauthorizedException e )
+            {
+                log.error( e.getMessage() );
+            }
         }
 
-        return false;
+        throw new UnauthorizedException( "Access denied." );
     }
 
     private List<String> getObservableRepos( String principal )

Modified: 
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/maven/archiva/webdav/ArchivaDavSessionProvider.java
URL: 
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/maven/archiva/webdav/ArchivaDavSessionProvider.java?rev=655274&r1=655273&r2=655274&view=diff
==============================================================================
--- 
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/maven/archiva/webdav/ArchivaDavSessionProvider.java
 (original)
+++ 
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/maven/archiva/webdav/ArchivaDavSessionProvider.java
 Sun May 11 00:30:52 2008
@@ -33,6 +33,7 @@
 import org.codehaus.plexus.redback.system.SecuritySession;
 import 
org.codehaus.plexus.redback.xwork.filter.authentication.HttpAuthenticator;
 import org.codehaus.plexus.redback.authorization.AuthorizationException;
+import org.codehaus.plexus.redback.authorization.UnauthorizedException;
 import org.codehaus.plexus.spring.PlexusToSpringUtils;
 import org.springframework.web.context.WebApplicationContext;
 import org.slf4j.Logger;
@@ -90,6 +91,11 @@
             log.error( "Fatal Authorization Subsystem Error." );
             throw new DavException( 
HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Fatal Authorization Subsystem 
Error." );
         }
+        catch ( UnauthorizedException e )
+        {
+            log.error( e.getMessage() );
+            throw new UnauthorizedDavException(repositoryId, e.getMessage() );
+        }
     }
 
     public void releaseSession(WebdavRequest webdavRequest)


Reply via email to