]> source.dussan.org Git - archiva.git/blob
e092fe319229b7f24490f3baebd76baf14bf7dab
[archiva.git] /
1 package org.apache.archiva.web.action;
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 com.opensymphony.xwork2.ActionContext;
23 import com.opensymphony.xwork2.ActionSupport;
24 import org.apache.archiva.admin.model.AuditInformation;
25 import org.apache.archiva.audit.AuditEvent;
26 import org.apache.archiva.audit.AuditListener;
27 import org.apache.archiva.audit.Auditable;
28 import org.apache.archiva.metadata.repository.RepositorySessionFactory;
29 import org.apache.archiva.redback.users.User;
30 import org.apache.archiva.security.ArchivaXworkUser;
31 import org.apache.archiva.web.runtime.ArchivaRuntimeInfo;
32 import org.apache.commons.lang.StringUtils;
33 import org.apache.struts2.ServletActionContext;
34 import org.apache.struts2.interceptor.SessionAware;
35 import org.apache.archiva.redback.rest.services.RedbackRequestInformation;
36 import org.slf4j.Logger;
37 import org.slf4j.LoggerFactory;
38 import org.springframework.context.ApplicationContext;
39
40 import javax.annotation.PostConstruct;
41 import javax.inject.Inject;
42 import javax.inject.Named;
43 import javax.servlet.http.HttpServletRequest;
44 import java.text.SimpleDateFormat;
45 import java.util.ArrayList;
46 import java.util.Date;
47 import java.util.HashMap;
48 import java.util.List;
49 import java.util.Map;
50
51 /**
52  * LogEnabled and SessionAware ActionSupport
53  */
54 public abstract class AbstractActionSupport
55     extends ActionSupport
56     implements SessionAware, Auditable
57 {
58     protected Map<?, ?> session;
59
60     protected Logger log = LoggerFactory.getLogger( getClass() );
61
62     @Inject
63     private List<AuditListener> auditListeners = new ArrayList<AuditListener>();
64
65
66     @Inject
67     @Named( value = "repositorySessionFactory" )
68     protected RepositorySessionFactory repositorySessionFactory;
69
70     @Inject
71     protected ApplicationContext applicationContext;
72
73     private String principal;
74
75     @Inject
76     private ArchivaRuntimeInfo archivaRuntimeInfo;
77
78     @PostConstruct
79     public void initialize()
80     {
81         // no op
82     }
83
84     @SuppressWarnings( "unchecked" )
85     public void setSession( Map map )
86     {
87         this.session = map;
88     }
89
90     public void addAuditListener( AuditListener listener )
91     {
92         this.auditListeners.add( listener );
93     }
94
95     public void clearAuditListeners()
96     {
97         this.auditListeners.clear();
98     }
99
100     public void removeAuditListener( AuditListener listener )
101     {
102         this.auditListeners.remove( listener );
103     }
104
105     protected void triggerAuditEvent( String repositoryId, String resource, String action )
106     {
107         AuditEvent event = new AuditEvent( repositoryId, getPrincipal(), resource, action );
108         event.setRemoteIP( getRemoteAddr() );
109
110         for ( AuditListener listener : auditListeners )
111         {
112             listener.auditEvent( event );
113         }
114     }
115
116     protected void triggerAuditEvent( String resource, String action )
117     {
118         AuditEvent event = new AuditEvent( null, getPrincipal(), resource, action );
119         event.setRemoteIP( getRemoteAddr() );
120
121         for ( AuditListener listener : auditListeners )
122         {
123             listener.auditEvent( event );
124         }
125     }
126
127     protected void triggerAuditEvent( String action )
128     {
129         AuditEvent event = new AuditEvent( null, getPrincipal(), null, action );
130         event.setRemoteIP( getRemoteAddr() );
131
132         for ( AuditListener listener : auditListeners )
133         {
134             listener.auditEvent( event );
135         }
136     }
137
138     private String getRemoteAddr()
139     {
140         HttpServletRequest request = ServletActionContext.getRequest();
141         return request != null ? request.getRemoteAddr() : null;
142     }
143
144     @SuppressWarnings( "unchecked" )
145     protected String getPrincipal()
146     {
147         if ( principal != null )
148         {
149             return principal;
150         }
151         return ArchivaXworkUser.getActivePrincipal( ActionContext.getContext().getSession() );
152     }
153
154     void setPrincipal( String principal )
155     {
156         this.principal = principal;
157     }
158
159     public void setAuditListeners( List<AuditListener> auditListeners )
160     {
161         this.auditListeners = auditListeners;
162     }
163
164     public void setRepositorySessionFactory( RepositorySessionFactory repositorySessionFactory )
165     {
166         this.repositorySessionFactory = repositorySessionFactory;
167     }
168
169     protected <T> Map<String, T> getBeansOfType( Class<T> clazz )
170     {
171         //TODO do some caching here !!!
172         // olamy : with plexus we get only roleHint
173         // as per convention we named spring bean role#hint remove role# if exists
174         Map<String, T> springBeans = applicationContext.getBeansOfType( clazz );
175
176         Map<String, T> beans = new HashMap<String, T>( springBeans.size() );
177
178         for ( Map.Entry<String, T> entry : springBeans.entrySet() )
179         {
180             String key = StringUtils.substringAfterLast( entry.getKey(), "#" );
181             beans.put( key, entry.getValue() );
182         }
183         return beans;
184     }
185
186
187     protected AuditInformation getAuditInformation()
188     {
189         AuditInformation auditInformation = new AuditInformation( new SimpleUser( getPrincipal() ), getRemoteAddr() );
190
191         return auditInformation;
192     }
193
194     protected RedbackRequestInformation getRedbackRequestInformation()
195     {
196         return new RedbackRequestInformation( new SimpleUser( getPrincipal() ), getRemoteAddr() );
197     }
198
199     public String getArchivaVersion()
200     {
201         return archivaRuntimeInfo.getVersion();
202     }
203
204     public String getArchivaBuildNumber()
205     {
206         return archivaRuntimeInfo.getBuildNumber();
207     }
208
209     public String getArchivaBuildTimestamp()
210     {
211         return Long.toString(
212             archivaRuntimeInfo.getTimestamp() );
213     }
214
215     public String getArchivaBuildTimestampDateStr()
216     {
217         SimpleDateFormat sfd = new SimpleDateFormat( "yyyy-MM-dd'T'HH:mm:ssz", getLocale() );
218         return sfd.format( new Date( archivaRuntimeInfo.getTimestamp() ) );
219     }
220
221     /**
222      * dummy information for audit events
223      *
224      * @since 1.4-M1
225      */
226     private static class SimpleUser
227         implements User
228     {
229
230         private String principal;
231
232         protected SimpleUser( String principal )
233         {
234             this.principal = principal;
235         }
236
237         public Object getPrincipal()
238         {
239             return this.principal;
240         }
241
242         public String getUsername()
243         {
244             return this.principal;
245         }
246
247         public void setUsername( String name )
248         {
249
250         }
251
252         public String getFullName()
253         {
254             return null;
255         }
256
257         public void setFullName( String name )
258         {
259
260         }
261
262         public String getEmail()
263         {
264             return null;
265         }
266
267         public void setEmail( String address )
268         {
269
270         }
271
272         public String getPassword()
273         {
274             return null;
275         }
276
277         public void setPassword( String rawPassword )
278         {
279
280         }
281
282         public String getEncodedPassword()
283         {
284             return null;
285         }
286
287         public void setEncodedPassword( String encodedPassword )
288         {
289
290         }
291
292         public Date getLastPasswordChange()
293         {
294             return null;
295         }
296
297         public void setLastPasswordChange( Date passwordChangeDate )
298         {
299
300         }
301
302         public List<String> getPreviousEncodedPasswords()
303         {
304             return null;
305         }
306
307         public void setPreviousEncodedPasswords( List<String> encodedPasswordList )
308         {
309
310         }
311
312         public void addPreviousEncodedPassword( String encodedPassword )
313         {
314
315         }
316
317         public boolean isPermanent()
318         {
319             return false;
320         }
321
322         public void setPermanent( boolean permanent )
323         {
324
325         }
326
327         public boolean isLocked()
328         {
329             return false;
330         }
331
332         public void setLocked( boolean locked )
333         {
334
335         }
336
337         public boolean isPasswordChangeRequired()
338         {
339             return false;
340         }
341
342         public void setPasswordChangeRequired( boolean changeRequired )
343         {
344
345         }
346
347         public boolean isValidated()
348         {
349             return false;
350         }
351
352         public void setValidated( boolean valid )
353         {
354
355         }
356
357         public int getCountFailedLoginAttempts()
358         {
359             return 0;
360         }
361
362         public void setCountFailedLoginAttempts( int count )
363         {
364
365         }
366
367         public Date getAccountCreationDate()
368         {
369             return null;
370         }
371
372         public void setAccountCreationDate( Date date )
373         {
374
375         }
376
377         public Date getLastLoginDate()
378         {
379             return null;
380         }
381
382         public void setLastLoginDate( Date date )
383         {
384
385         }
386     }
387
388
389 }