]> source.dussan.org Git - archiva.git/blob
07d16aa3a6484fd480d760736b741520e22fb208
[archiva.git] /
1 package org.apache.archiva.redback.struts2.action.admin;
2
3 /*
4  * Licensed to the Apache Software Foundation (ASF) under one
5  * or more contributor license agreements.  See the NOTICE file
6  * distributed with this work for additional information
7  * regarding copyright ownership.  The ASF licenses this file
8  * to you under the Apache License, Version 2.0 (the
9  * "License"); you may not use this file except in compliance
10  * with the License.  You may obtain a copy of the License at
11  *
12  * http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing,
15  * software distributed under the License is distributed on an
16  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17  * KIND, either express or implied.  See the License for the
18  * specific language governing permissions and limitations
19  * under the License.
20  */
21
22 import org.apache.archiva.redback.rbac.Permission;
23 import org.apache.archiva.redback.rbac.RbacManagerException;
24 import org.apache.archiva.redback.rbac.Resource;
25 import org.apache.archiva.redback.rbac.Role;
26 import org.apache.archiva.redback.rbac.RBACManager;
27 import org.apache.archiva.redback.struts2.action.AuditEvent;
28 import org.apache.archiva.redback.struts2.action.AbstractSecurityAction;
29 import org.codehaus.plexus.util.StringUtils;
30 import org.apache.archiva.redback.integration.interceptor.SecureActionBundle;
31 import org.apache.archiva.redback.integration.interceptor.SecureActionException;
32 import org.apache.archiva.redback.integration.model.SimplePermission;
33 import org.apache.archiva.redback.integration.role.RoleConstants;
34 import org.springframework.context.annotation.Scope;
35 import org.springframework.stereotype.Controller;
36
37 import javax.inject.Inject;
38 import javax.inject.Named;
39 import java.util.ArrayList;
40 import java.util.Arrays;
41 import java.util.List;
42
43 /**
44  * RoleCreateAction
45  *
46  * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
47  *
48  */
49 @Controller( "redback-role-create" )
50 @Scope( "prototype" )
51 public class RoleCreateAction
52     extends AbstractSecurityAction
53 {
54     // ------------------------------------------------------------------
55     //  Component Requirements
56     // ------------------------------------------------------------------
57
58     /**
59      *  role-hint="cached"
60      */
61     @Inject
62     @Named( value = "rBACManager#cached" )
63     private RBACManager manager;
64
65     // ------------------------------------------------------------------
66     // Action Parameters
67     // ------------------------------------------------------------------
68
69     private String principal;
70
71     private String roleName;
72
73     private String description;
74
75     private List<SimplePermission> permissions;
76
77     private List<String> childRoles;
78
79     private SimplePermission addpermission;
80
81     private String submitMode;
82
83     protected static final String VALID_ROLENAME_CHARS = "[a-zA-Z_0-9\\-\\s.,]*";
84
85     // ------------------------------------------------------------------
86     // Action Entry Points - (aka Names)
87     // ------------------------------------------------------------------
88
89     public String show()
90     {
91         if ( permissions == null )
92         {
93             permissions = new ArrayList<SimplePermission>();
94         }
95
96         if ( childRoles == null )
97         {
98             childRoles = new ArrayList<String>();
99         }
100
101         if ( addpermission == null )
102         {
103             addpermission = new SimplePermission();
104         }
105
106         return INPUT;
107     }
108
109     public String addpermission()
110     {
111         if ( addpermission == null )
112         {
113             addActionError( getText( "cannot.add.null.permission" ) );
114             return ERROR;
115         }
116
117         if ( permissions == null )
118         {
119             permissions = new ArrayList<SimplePermission>();
120         }
121
122         permissions.add( addpermission );
123
124         addpermission = new SimplePermission();
125
126         return INPUT;
127     }
128
129     public String submit()
130     {
131         if ( StringUtils.equals( getSubmitMode(), "addPermission" ) )
132         {
133             return addpermission();
134         }
135
136         if ( StringUtils.isEmpty( roleName ) )
137         {
138             addActionError( getText( "cannot.add.empty.role" ) );
139             return ERROR;
140         }
141         if ( !roleName.matches( VALID_ROLENAME_CHARS ) )
142         {
143             addActionError( getText( "roleName.invalid.characters" ) );
144             return ERROR;
145         }
146
147         try
148         {
149             Role _role;
150             if ( manager.roleExists( roleName ) )
151             {
152                 _role = manager.getRole( roleName );
153             }
154             else
155             {
156                 _role = manager.createRole( roleName );
157             }
158
159             _role.setDescription( description );
160             _role.setChildRoleNames( childRoles );
161
162             List<Permission> _permissionList = new ArrayList<Permission>();
163             for ( SimplePermission perm : permissions )
164             {
165                 _permissionList.add(
166                     manager.createPermission( perm.getName(), perm.getOperationName(), perm.getResourceIdentifier() ) );
167             }
168
169             _role.setPermissions( _permissionList );
170
171             manager.saveRole( _role );
172
173             addActionMessage( getText( "save.role.success", Arrays.asList( (Object) roleName ) ) );
174             String currentUser = getCurrentUser();
175             AuditEvent event = new AuditEvent( getText( "log.role.create" ) );
176             event.setRole( roleName );
177             event.setCurrentUser( currentUser );
178             event.log();
179         }
180         catch ( RbacManagerException e )
181         {
182             addActionError( getText( "cannot.get.role", Arrays.asList( (Object) roleName, e.getMessage() ) ) );
183             return ERROR;
184         }
185
186         return SUCCESS;
187     }
188
189     // ------------------------------------------------------------------
190     // Parameter Accessor Methods
191     // ------------------------------------------------------------------
192
193     public String getPrincipal()
194     {
195         return principal;
196     }
197
198     public void setPrincipal( String principal )
199     {
200         this.principal = principal;
201     }
202
203     public SimplePermission getAddpermission()
204     {
205         return addpermission;
206     }
207
208     public void setAddpermission( SimplePermission addpermission )
209     {
210         this.addpermission = addpermission;
211     }
212
213     public String getSubmitMode()
214     {
215         return submitMode;
216     }
217
218     public void setSubmitMode( String submitMode )
219     {
220         this.submitMode = submitMode;
221     }
222
223     public SecureActionBundle initSecureActionBundle()
224         throws SecureActionException
225     {
226         SecureActionBundle bundle = new SecureActionBundle();
227         bundle.setRequiresAuthentication( true );
228         bundle.addRequiredAuthorization( RoleConstants.USER_MANAGEMENT_RBAC_ADMIN_OPERATION, Resource.GLOBAL );
229         return bundle;
230     }
231
232 }