]> source.dussan.org Git - archiva.git/blob
78c5f851d57e9edecfa6b6e6496532178c0d5af9
[archiva.git] /
1 package org.apache.maven.archiva.web.action;\r
2 \r
3 /*\r
4  * Licensed to the Apache Software Foundation (ASF) under one\r
5  * or more contributor license agreements.  See the NOTICE file\r
6  * distributed with this work for additional information\r
7  * regarding copyright ownership.  The ASF licenses this file\r
8  * to you under the Apache License, Version 2.0 (the\r
9  * "License"); you may not use this file except in compliance\r
10  * with the License.  You may obtain a copy of the License at\r
11  *\r
12  *  http://www.apache.org/licenses/LICENSE-2.0\r
13  *\r
14  * Unless required by applicable law or agreed to in writing,\r
15  * software distributed under the License is distributed on an\r
16  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r
17  * KIND, either express or implied.  See the License for the\r
18  * specific language governing permissions and limitations\r
19  * under the License.\r
20  */\r
21 \r
22 import com.opensymphony.xwork2.ActionContext;\r
23 import com.opensymphony.xwork2.ActionSupport;\r
24 import org.apache.archiva.admin.AuditInformation;\r
25 import org.apache.archiva.audit.AuditEvent;\r
26 import org.apache.archiva.audit.AuditListener;\r
27 import org.apache.archiva.audit.Auditable;\r
28 import org.apache.archiva.metadata.repository.RepositorySessionFactory;\r
29 import org.apache.commons.lang.StringUtils;\r
30 import org.apache.archiva.security.ArchivaXworkUser;\r
31 import org.apache.struts2.ServletActionContext;\r
32 import org.apache.struts2.interceptor.SessionAware;\r
33 import org.codehaus.plexus.redback.users.User;\r
34 import org.slf4j.Logger;\r
35 import org.slf4j.LoggerFactory;\r
36 import org.springframework.context.ApplicationContext;\r
37 \r
38 import javax.annotation.PostConstruct;\r
39 import javax.inject.Inject;\r
40 import javax.inject.Named;\r
41 import javax.servlet.http.HttpServletRequest;\r
42 import java.util.ArrayList;\r
43 import java.util.Date;\r
44 import java.util.HashMap;\r
45 import java.util.List;\r
46 import java.util.Map;\r
47 \r
48 /**\r
49  * LogEnabled and SessionAware ActionSupport\r
50  */\r
51 public abstract class AbstractActionSupport\r
52     extends ActionSupport\r
53     implements SessionAware, Auditable\r
54 {\r
55     protected Map<?, ?> session;\r
56 \r
57     protected Logger log = LoggerFactory.getLogger( getClass() );\r
58 \r
59     @Inject\r
60     private List<AuditListener> auditListeners = new ArrayList<AuditListener>();\r
61 \r
62 \r
63     @Inject\r
64     @Named( value = "repositorySessionFactory" )\r
65     protected RepositorySessionFactory repositorySessionFactory;\r
66 \r
67     @Inject\r
68     protected ApplicationContext applicationContext;\r
69 \r
70     private String principal;\r
71 \r
72     @PostConstruct\r
73     public void initialize()\r
74     {\r
75         // no op\r
76     }\r
77 \r
78     @SuppressWarnings( "unchecked" )\r
79     public void setSession( Map map )\r
80     {\r
81         this.session = map;\r
82     }\r
83 \r
84     public void addAuditListener( AuditListener listener )\r
85     {\r
86         this.auditListeners.add( listener );\r
87     }\r
88 \r
89     public void clearAuditListeners()\r
90     {\r
91         this.auditListeners.clear();\r
92     }\r
93 \r
94     public void removeAuditListener( AuditListener listener )\r
95     {\r
96         this.auditListeners.remove( listener );\r
97     }\r
98 \r
99     protected void triggerAuditEvent( String repositoryId, String resource, String action )\r
100     {\r
101         AuditEvent event = new AuditEvent( repositoryId, getPrincipal(), resource, action );\r
102         event.setRemoteIP( getRemoteAddr() );\r
103 \r
104         for ( AuditListener listener : auditListeners )\r
105         {\r
106             listener.auditEvent( event );\r
107         }\r
108     }\r
109 \r
110     protected void triggerAuditEvent( String resource, String action )\r
111     {\r
112         AuditEvent event = new AuditEvent( null, getPrincipal(), resource, action );\r
113         event.setRemoteIP( getRemoteAddr() );\r
114 \r
115         for ( AuditListener listener : auditListeners )\r
116         {\r
117             listener.auditEvent( event );\r
118         }\r
119     }\r
120 \r
121     protected void triggerAuditEvent( String action )\r
122     {\r
123         AuditEvent event = new AuditEvent( null, getPrincipal(), null, action );\r
124         event.setRemoteIP( getRemoteAddr() );\r
125 \r
126         for ( AuditListener listener : auditListeners )\r
127         {\r
128             listener.auditEvent( event );\r
129         }\r
130     }\r
131 \r
132     private String getRemoteAddr()\r
133     {\r
134         HttpServletRequest request = ServletActionContext.getRequest();\r
135         return request != null ? request.getRemoteAddr() : null;\r
136     }\r
137 \r
138     @SuppressWarnings( "unchecked" )\r
139     protected String getPrincipal()\r
140     {\r
141         if ( principal != null )\r
142         {\r
143             return principal;\r
144         }\r
145         return ArchivaXworkUser.getActivePrincipal( ActionContext.getContext().getSession() );\r
146     }\r
147 \r
148     void setPrincipal( String principal )\r
149     {\r
150         this.principal = principal;\r
151     }\r
152 \r
153     public void setAuditListeners( List<AuditListener> auditListeners )\r
154     {\r
155         this.auditListeners = auditListeners;\r
156     }\r
157 \r
158     public void setRepositorySessionFactory( RepositorySessionFactory repositorySessionFactory )\r
159     {\r
160         this.repositorySessionFactory = repositorySessionFactory;\r
161     }\r
162 \r
163     protected <T> Map<String, T> getBeansOfType( Class<T> clazz )\r
164     {\r
165         //TODO do some caching here !!!\r
166         // olamy : with plexus we get only roleHint\r
167         // as per convention we named spring bean role#hint remove role# if exists\r
168         Map<String, T> springBeans = applicationContext.getBeansOfType( clazz );\r
169 \r
170         Map<String, T> beans = new HashMap<String, T>( springBeans.size() );\r
171 \r
172         for ( Map.Entry<String, T> entry : springBeans.entrySet() )\r
173         {\r
174             String key = StringUtils.substringAfterLast( entry.getKey(), "#" );\r
175             beans.put( key, entry.getValue() );\r
176         }\r
177         return beans;\r
178     }\r
179 \r
180 \r
181     protected AuditInformation getAuditInformation()\r
182     {\r
183         AuditInformation auditInformation = new AuditInformation( new SimpleUser( getPrincipal() ), getRemoteAddr() );\r
184 \r
185         return auditInformation;\r
186     }\r
187 \r
188     /**\r
189      * dummy information for audit events\r
190      * @since 1.4\r
191      */\r
192     private static class SimpleUser\r
193         implements User\r
194     {\r
195 \r
196         private String principal;\r
197 \r
198         protected SimpleUser( String principal )\r
199         {\r
200             this.principal = principal;\r
201         }\r
202 \r
203         public Object getPrincipal()\r
204         {\r
205             return this.principal;\r
206         }\r
207 \r
208         public String getUsername()\r
209         {\r
210             return null;\r
211         }\r
212 \r
213         public void setUsername( String name )\r
214         {\r
215 \r
216         }\r
217 \r
218         public String getFullName()\r
219         {\r
220             return null;\r
221         }\r
222 \r
223         public void setFullName( String name )\r
224         {\r
225 \r
226         }\r
227 \r
228         public String getEmail()\r
229         {\r
230             return null;\r
231         }\r
232 \r
233         public void setEmail( String address )\r
234         {\r
235 \r
236         }\r
237 \r
238         public String getPassword()\r
239         {\r
240             return null;\r
241         }\r
242 \r
243         public void setPassword( String rawPassword )\r
244         {\r
245 \r
246         }\r
247 \r
248         public String getEncodedPassword()\r
249         {\r
250             return null;\r
251         }\r
252 \r
253         public void setEncodedPassword( String encodedPassword )\r
254         {\r
255 \r
256         }\r
257 \r
258         public Date getLastPasswordChange()\r
259         {\r
260             return null;\r
261         }\r
262 \r
263         public void setLastPasswordChange( Date passwordChangeDate )\r
264         {\r
265 \r
266         }\r
267 \r
268         public List<String> getPreviousEncodedPasswords()\r
269         {\r
270             return null;\r
271         }\r
272 \r
273         public void setPreviousEncodedPasswords( List<String> encodedPasswordList )\r
274         {\r
275 \r
276         }\r
277 \r
278         public void addPreviousEncodedPassword( String encodedPassword )\r
279         {\r
280 \r
281         }\r
282 \r
283         public boolean isPermanent()\r
284         {\r
285             return false;\r
286         }\r
287 \r
288         public void setPermanent( boolean permanent )\r
289         {\r
290 \r
291         }\r
292 \r
293         public boolean isLocked()\r
294         {\r
295             return false;\r
296         }\r
297 \r
298         public void setLocked( boolean locked )\r
299         {\r
300 \r
301         }\r
302 \r
303         public boolean isPasswordChangeRequired()\r
304         {\r
305             return false;\r
306         }\r
307 \r
308         public void setPasswordChangeRequired( boolean changeRequired )\r
309         {\r
310 \r
311         }\r
312 \r
313         public boolean isValidated()\r
314         {\r
315             return false;\r
316         }\r
317 \r
318         public void setValidated( boolean valid )\r
319         {\r
320 \r
321         }\r
322 \r
323         public int getCountFailedLoginAttempts()\r
324         {\r
325             return 0;\r
326         }\r
327 \r
328         public void setCountFailedLoginAttempts( int count )\r
329         {\r
330 \r
331         }\r
332 \r
333         public Date getAccountCreationDate()\r
334         {\r
335             return null;\r
336         }\r
337 \r
338         public void setAccountCreationDate( Date date )\r
339         {\r
340 \r
341         }\r
342 \r
343         public Date getLastLoginDate()\r
344         {\r
345             return null;\r
346         }\r
347 \r
348         public void setLastLoginDate( Date date )\r
349         {\r
350 \r
351         }\r
352     }\r
353 \r
354 \r
355 }\r