]> source.dussan.org Git - archiva.git/blob
aced6a79c1f4a75515e3c79582d8c74d37d64d8c
[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     /**\r
60      * plexus.requirement role="org.apache.archiva.audit.AuditListener"\r
61      */\r
62     @Inject\r
63     private List<AuditListener> auditListeners = new ArrayList<AuditListener>();\r
64 \r
65     /**\r
66      * plexus.requirement\r
67      */\r
68     @Inject\r
69     @Named( value = "repositorySessionFactory" )\r
70     protected RepositorySessionFactory repositorySessionFactory;\r
71 \r
72     @Inject\r
73     protected ApplicationContext applicationContext;\r
74 \r
75     private String principal;\r
76 \r
77     @PostConstruct\r
78     public void initialize()\r
79     {\r
80         // no op\r
81     }\r
82 \r
83     @SuppressWarnings( "unchecked" )\r
84     public void setSession( Map map )\r
85     {\r
86         this.session = map;\r
87     }\r
88 \r
89     public void addAuditListener( AuditListener listener )\r
90     {\r
91         this.auditListeners.add( listener );\r
92     }\r
93 \r
94     public void clearAuditListeners()\r
95     {\r
96         this.auditListeners.clear();\r
97     }\r
98 \r
99     public void removeAuditListener( AuditListener listener )\r
100     {\r
101         this.auditListeners.remove( listener );\r
102     }\r
103 \r
104     protected void triggerAuditEvent( String repositoryId, String resource, String action )\r
105     {\r
106         AuditEvent event = new AuditEvent( repositoryId, getPrincipal(), resource, action );\r
107         event.setRemoteIP( getRemoteAddr() );\r
108 \r
109         for ( AuditListener listener : auditListeners )\r
110         {\r
111             listener.auditEvent( event );\r
112         }\r
113     }\r
114 \r
115     protected void triggerAuditEvent( String resource, String action )\r
116     {\r
117         AuditEvent event = new AuditEvent( null, getPrincipal(), resource, action );\r
118         event.setRemoteIP( getRemoteAddr() );\r
119 \r
120         for ( AuditListener listener : auditListeners )\r
121         {\r
122             listener.auditEvent( event );\r
123         }\r
124     }\r
125 \r
126     protected void triggerAuditEvent( String action )\r
127     {\r
128         AuditEvent event = new AuditEvent( null, getPrincipal(), null, action );\r
129         event.setRemoteIP( getRemoteAddr() );\r
130 \r
131         for ( AuditListener listener : auditListeners )\r
132         {\r
133             listener.auditEvent( event );\r
134         }\r
135     }\r
136 \r
137     private String getRemoteAddr()\r
138     {\r
139         HttpServletRequest request = ServletActionContext.getRequest();\r
140         return request != null ? request.getRemoteAddr() : null;\r
141     }\r
142 \r
143     @SuppressWarnings( "unchecked" )\r
144     protected String getPrincipal()\r
145     {\r
146         if ( principal != null )\r
147         {\r
148             return principal;\r
149         }\r
150         return ArchivaXworkUser.getActivePrincipal( ActionContext.getContext().getSession() );\r
151     }\r
152 \r
153     void setPrincipal( String principal )\r
154     {\r
155         this.principal = principal;\r
156     }\r
157 \r
158     public void setAuditListeners( List<AuditListener> auditListeners )\r
159     {\r
160         this.auditListeners = auditListeners;\r
161     }\r
162 \r
163     public void setRepositorySessionFactory( RepositorySessionFactory repositorySessionFactory )\r
164     {\r
165         this.repositorySessionFactory = repositorySessionFactory;\r
166     }\r
167 \r
168     protected <T> Map<String, T> getBeansOfType( Class<T> clazz )\r
169     {\r
170         //TODO do some caching here !!!\r
171         // olamy : with plexus we get only roleHint\r
172         // as per convention we named spring bean role#hint remove role# if exists\r
173         Map<String, T> springBeans = applicationContext.getBeansOfType( clazz );\r
174 \r
175         Map<String, T> beans = new HashMap<String, T>( springBeans.size() );\r
176 \r
177         for ( Map.Entry<String, T> entry : springBeans.entrySet() )\r
178         {\r
179             String key = StringUtils.substringAfterLast( entry.getKey(), "#" );\r
180             beans.put( key, entry.getValue() );\r
181         }\r
182         return beans;\r
183     }\r
184 \r
185 \r
186     protected AuditInformation getAuditInformation()\r
187     {\r
188         AuditInformation auditInformation = new AuditInformation( new SimpleUser( getPrincipal() ), getRemoteAddr() );\r
189 \r
190         return auditInformation;\r
191     }\r
192 \r
193     /**\r
194      * dummy information for audit events\r
195      * @since 1.4\r
196      */\r
197     private static class SimpleUser\r
198         implements User\r
199     {\r
200 \r
201         private String principal;\r
202 \r
203         protected SimpleUser( String principal )\r
204         {\r
205             this.principal = principal;\r
206         }\r
207 \r
208         public Object getPrincipal()\r
209         {\r
210             return this.principal;\r
211         }\r
212 \r
213         public String getUsername()\r
214         {\r
215             return null;\r
216         }\r
217 \r
218         public void setUsername( String name )\r
219         {\r
220 \r
221         }\r
222 \r
223         public String getFullName()\r
224         {\r
225             return null;\r
226         }\r
227 \r
228         public void setFullName( String name )\r
229         {\r
230 \r
231         }\r
232 \r
233         public String getEmail()\r
234         {\r
235             return null;\r
236         }\r
237 \r
238         public void setEmail( String address )\r
239         {\r
240 \r
241         }\r
242 \r
243         public String getPassword()\r
244         {\r
245             return null;\r
246         }\r
247 \r
248         public void setPassword( String rawPassword )\r
249         {\r
250 \r
251         }\r
252 \r
253         public String getEncodedPassword()\r
254         {\r
255             return null;\r
256         }\r
257 \r
258         public void setEncodedPassword( String encodedPassword )\r
259         {\r
260 \r
261         }\r
262 \r
263         public Date getLastPasswordChange()\r
264         {\r
265             return null;\r
266         }\r
267 \r
268         public void setLastPasswordChange( Date passwordChangeDate )\r
269         {\r
270 \r
271         }\r
272 \r
273         public List<String> getPreviousEncodedPasswords()\r
274         {\r
275             return null;\r
276         }\r
277 \r
278         public void setPreviousEncodedPasswords( List<String> encodedPasswordList )\r
279         {\r
280 \r
281         }\r
282 \r
283         public void addPreviousEncodedPassword( String encodedPassword )\r
284         {\r
285 \r
286         }\r
287 \r
288         public boolean isPermanent()\r
289         {\r
290             return false;\r
291         }\r
292 \r
293         public void setPermanent( boolean permanent )\r
294         {\r
295 \r
296         }\r
297 \r
298         public boolean isLocked()\r
299         {\r
300             return false;\r
301         }\r
302 \r
303         public void setLocked( boolean locked )\r
304         {\r
305 \r
306         }\r
307 \r
308         public boolean isPasswordChangeRequired()\r
309         {\r
310             return false;\r
311         }\r
312 \r
313         public void setPasswordChangeRequired( boolean changeRequired )\r
314         {\r
315 \r
316         }\r
317 \r
318         public boolean isValidated()\r
319         {\r
320             return false;\r
321         }\r
322 \r
323         public void setValidated( boolean valid )\r
324         {\r
325 \r
326         }\r
327 \r
328         public int getCountFailedLoginAttempts()\r
329         {\r
330             return 0;\r
331         }\r
332 \r
333         public void setCountFailedLoginAttempts( int count )\r
334         {\r
335 \r
336         }\r
337 \r
338         public Date getAccountCreationDate()\r
339         {\r
340             return null;\r
341         }\r
342 \r
343         public void setAccountCreationDate( Date date )\r
344         {\r
345 \r
346         }\r
347 \r
348         public Date getLastLoginDate()\r
349         {\r
350             return null;\r
351         }\r
352 \r
353         public void setLastLoginDate( Date date )\r
354         {\r
355 \r
356         }\r
357     }\r
358 \r
359 \r
360 }\r