]> source.dussan.org Git - archiva.git/blob
03ea5274d9498ec3961c4757f12fb000df42edba
[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 java.util.ArrayList;\r
23 import java.util.List;\r
24 import java.util.Map;\r
25 \r
26 import javax.servlet.http.HttpServletRequest;\r
27 \r
28 import org.apache.maven.archiva.repository.audit.AuditEvent;\r
29 import org.apache.maven.archiva.repository.audit.AuditListener;\r
30 import org.apache.maven.archiva.repository.audit.Auditable;\r
31 import org.apache.maven.archiva.security.ArchivaXworkUser;\r
32 import org.apache.struts2.ServletActionContext;\r
33 import org.apache.struts2.interceptor.SessionAware;\r
34 import org.slf4j.Logger;\r
35 import org.slf4j.LoggerFactory;\r
36 \r
37 import com.opensymphony.xwork2.ActionContext;\r
38 import com.opensymphony.xwork2.ActionSupport;\r
39 \r
40 /**\r
41  * LogEnabled and SessionAware ActionSupport\r
42  */\r
43 public abstract class PlexusActionSupport\r
44     extends ActionSupport\r
45     implements SessionAware, Auditable\r
46 {\r
47     protected Map<?, ?> session;\r
48 \r
49     protected Logger log = LoggerFactory.getLogger( getClass() );\r
50 \r
51     /**\r
52      * @plexus.requirement role="org.apache.maven.archiva.repository.audit.AuditListener"\r
53      */\r
54     private List<AuditListener> auditListeners = new ArrayList<AuditListener>();\r
55 \r
56     @SuppressWarnings("unchecked")\r
57     public void setSession( Map map )\r
58     {\r
59         this.session = map;\r
60     }\r
61 \r
62     public void addAuditListener( AuditListener listener )\r
63     {\r
64         this.auditListeners.add( listener );\r
65     }\r
66 \r
67     public void clearAuditListeners()\r
68     {\r
69         this.auditListeners.clear();\r
70     }\r
71 \r
72     public void removeAuditListener( AuditListener listener )\r
73     {\r
74         this.auditListeners.remove( listener );\r
75     }\r
76 \r
77     protected void triggerAuditEvent( String repositoryId, String resource, String action )\r
78     {\r
79         AuditEvent event = new AuditEvent( repositoryId, getPrincipal(), resource, action );\r
80         event.setRemoteIP( getRemoteAddr() );\r
81     \r
82         for ( AuditListener listener : auditListeners )\r
83         {\r
84             listener.auditEvent( event );\r
85         }\r
86     }\r
87 \r
88     protected void triggerAuditEvent( String resource, String action )\r
89     {\r
90         AuditEvent event = new AuditEvent( getPrincipal(), resource, action );\r
91         event.setRemoteIP( getRemoteAddr() );\r
92         \r
93         for ( AuditListener listener : auditListeners )\r
94         {\r
95             listener.auditEvent( event );\r
96         }\r
97     }\r
98 \r
99     protected void triggerAuditEvent( String action )\r
100     {\r
101         AuditEvent event = new AuditEvent( getPrincipal(), 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     private String getRemoteAddr()\r
111     {\r
112         HttpServletRequest request = ServletActionContext.getRequest();\r
113         return request != null ? request.getRemoteAddr() : null;\r
114     }\r
115 \r
116     @SuppressWarnings( "unchecked" )\r
117     protected String getPrincipal()\r
118     {\r
119         return ArchivaXworkUser.getActivePrincipal( ActionContext.getContext().getSession() );\r
120     }\r
121 }\r