]> source.dussan.org Git - archiva.git/commitdiff
UserManagementAction is now implementing the SecureAction interface from plexus-secur...
authorJesse McConnell <jmcconnell@apache.org>
Thu, 14 Sep 2006 21:56:43 +0000 (21:56 +0000)
committerJesse McConnell <jmcconnell@apache.org>
Thu, 14 Sep 2006 21:56:43 +0000 (21:56 +0000)
git-svn-id: https://svn.apache.org/repos/asf/maven/archiva/trunk@443495 13f79535-47bb-0310-9956-ffa450edef68

archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/UserManagementAction.java
archiva-webapp/src/main/resources/xwork.xml
archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/findUser.jsp
archiva-webapp/src/main/webapp/WEB-INF/jsp/alert.jsp [new file with mode: 0644]

index d2f2b0e485f3b93e2852c5d4071c3d112eb3492d..47410926cc111d80beb08ad5bb60ad62c1c2fe82 100644 (file)
@@ -1,21 +1,20 @@
 package org.apache.maven.archiva.web.action.admin;
 
-
 /*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed 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.
- */
+* Copyright 2005 The Apache Software Foundation.
+*
+* Licensed 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.Preparable;
 import org.codehaus.plexus.security.rbac.RBACManager;
@@ -23,6 +22,9 @@ import org.codehaus.plexus.security.system.SecuritySession;
 import org.codehaus.plexus.security.user.User;
 import org.codehaus.plexus.security.user.UserManager;
 import org.codehaus.plexus.security.user.UserNotFoundException;
+import org.codehaus.plexus.security.user.UserManagerException;
+import org.codehaus.plexus.security.authorization.rbac.web.interceptor.SecureAction;
+import org.codehaus.plexus.security.authorization.rbac.web.interceptor.SecureActionException;
 import org.codehaus.plexus.xwork.action.PlexusActionSupport;
 
 import java.util.ArrayList;
@@ -38,7 +40,8 @@ import java.util.List;
  * role-hint="userManagement"
  */
 public class UserManagementAction
-    extends PlexusActionSupport implements Preparable
+    extends PlexusActionSupport
+    implements Preparable, SecureAction
 {
     /**
      * @plexus.requirement
@@ -73,38 +76,51 @@ public class UserManagementAction
     public void prepare()
         throws Exception
     {
-        if ( username == null || "".equals( username ) )
-        {
-            user = userManager.findUser( (String) session.get( "MANAGED_USERNAME" ) );
-            username = user.getUsername();
-        }
-        else
+        try
         {
-            user = userManager.findUser( username );
-        }
+            if ( username == null || "".equals( username ) )
+            {
+                user = userManager.findUser( (String) session.get( "MANAGED_USERNAME" ) );
+                username = user.getUsername();
+            }
+            else
+            {
+                user = userManager.findUser( username );
+            }
 
-        session.put( "MANAGED_USERNAME", username );
+            session.put( "MANAGED_USERNAME", username );
 
-        principal = user.getPrincipal().toString();
-        fullName = user.getFullName();
-        email = user.getEmail();
+            principal = user.getPrincipal().toString();
+            fullName = user.getFullName();
+            email = user.getEmail();
 
-        if ( principal != null && rbacManager.userAssignmentExists( principal ) )
+            if ( principal != null && rbacManager.userAssignmentExists( principal ) )
+            {
+                assignedRoles = new ArrayList( rbacManager.getAssignedRoles( principal ) );
+                availableRoles = new ArrayList( rbacManager.getUnassignedRoles( principal ) );
+            }
+            else
+            {
+                assignedRoles = new ArrayList();
+                availableRoles = rbacManager.getAllAssignableRoles();
+            }
+        }
+        catch ( UserNotFoundException ne )
         {
-            assignedRoles = new ArrayList( rbacManager.getAssignedRoles( principal ) );
-            availableRoles = new ArrayList( rbacManager.getUnassignedRoles( principal ) );
+            addActionError( "user cound not found" );
+            assignedRoles = new ArrayList();
+            availableRoles = new ArrayList();
         }
-        else
+        catch ( UserManagerException ume )
         {
             assignedRoles = new ArrayList();
-            availableRoles = rbacManager.getAllAssignableRoles();
+            availableRoles = new ArrayList();
         }
-
     }
 
     /**
      * for this method username should be populated
-     * 
+     *
      * @return
      */
     public String findUser()
@@ -124,7 +140,7 @@ public class UserManagementAction
         }
         catch ( UserNotFoundException ne )
         {
-            addActionError( "user could not be found "  + username );
+            addActionError( "user could not be found " + username );
             return ERROR;
         }
     }
@@ -162,6 +178,39 @@ public class UserManagementAction
         return SUCCESS;
     }
 
+
+    public List getRequiredOperations()
+        throws SecureActionException
+    {
+        List operations = new ArrayList();
+        operations.add( "edit-all-users" );
+        operations.add( "edit-user" );
+        return operations;
+    }
+
+    public String getRequiredResource()
+        throws SecureActionException
+    {
+        SecuritySession securitySession = (SecuritySession) session.get( SecuritySession.ROLE );
+
+        User user = securitySession.getUser();
+
+        if ( user != null )
+        {
+            return user.getPrincipal().toString();
+        }
+        else
+        {
+            throw new SecureActionException( "unable to obtain principal from users session" );
+        }
+    }
+
+    public boolean authenticationRequired()
+        throws SecureActionException
+    {
+        return true;
+    }
+
     public String getUsername()
     {
         return username;
index e43734cf471c7d270e428154178a720b79734bff..c4552137ad1952e74748ae8bb1ac255304cf794e 100644 (file)
   <package name="base" extends="webwork-default">
     <interceptors>
       <interceptor name="configuration" class="configurationInterceptor"/>
+      <interceptor name="pssSecureActions" class="pssSecureActionInterceptor"/>
       <interceptor-stack name="configuredStack">
         <interceptor-ref name="defaultStack"/>
         <interceptor-ref name="configuration"/>
+        <interceptor-ref name="pssSecureActions"/>
       </interceptor-stack>
       <interceptor-stack name="configuredPrepareParamsStack">
         <interceptor-ref name="paramsPrepareParamsStack"/>
         <interceptor-ref name="configuration"/>
+        <interceptor-ref name="pssSecureActions"/>
       </interceptor-stack>
     </interceptors>
 
@@ -57,6 +60,8 @@
         <param name="method">input</param>
       </result>
       <result name="error">/WEB-INF/jsp/generalError.jsp</result>
+      <result name="requires-authentication">/WEB-INF/jsp/alert.jsp</result>
+      <result name="requires-authorization">/WEB-INF/jsp/alert.jsp</result>
     </global-results>
   </package>
 
@@ -67,6 +72,7 @@
       <interceptor-stack name="configuredStack">
         <interceptor-ref name="defaultStack"/>
         <interceptor-ref name="configuration"/>
+        <interceptor-ref name="pssSecureActions"/>
       </interceptor-stack>
     </interceptors>
 
index 067693e1549e0916cc1bb544f1454764f45207d7..258ac3864b6a4eed4374b196b10f146cde4b3601 100644 (file)
@@ -28,6 +28,9 @@
 
     <div id="contentArea">
       <div id="searchBox">
+        <div id="results">
+          <ww:actionerror/>  
+        </div>
         <ww:form action="userManagement" method="post" namespace="/admin">
           <p>
             <ww:textfield label="Find a user" name="username"/>
diff --git a/archiva-webapp/src/main/webapp/WEB-INF/jsp/alert.jsp b/archiva-webapp/src/main/webapp/WEB-INF/jsp/alert.jsp
new file mode 100644 (file)
index 0000000..c2d91d9
--- /dev/null
@@ -0,0 +1,42 @@
+<%--
+  ~ Copyright 2005-2006 The Apache Software Foundation.
+  ~
+  ~ Licensed 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.
+  --%>
+
+<%@ taglib prefix="ww" uri="/webwork" %>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+
+<html>
+<head>
+  <title>Security Alert Page</title>
+  <ww:head/>
+</head>
+
+<body>
+
+<div id="contentArea">
+  <div id="searchBox">
+    <div id="results">
+      You are not authorized for this activity.
+    </div>
+  </div>
+</div>
+
+<div class="clear">
+  <hr/>
+</div>
+
+</body>
+
+</html>