]> source.dussan.org Git - archiva.git/blob
682e788082ff7b309485282dff68786f8177d150
[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 import javax.servlet.http.HttpServletRequest;\r
26 \r
27 import com.opensymphony.xwork2.ActionContext;\r
28 import com.opensymphony.xwork2.ActionSupport;\r
29 import org.apache.maven.archiva.repository.audit.AuditEvent;\r
30 import org.apache.maven.archiva.repository.audit.AuditListener;\r
31 import org.apache.maven.archiva.repository.audit.Auditable;\r
32 import org.apache.maven.archiva.security.ArchivaXworkUser;\r
33 import org.apache.struts2.ServletActionContext;\r
34 import org.apache.struts2.interceptor.SessionAware;\r
35 import org.slf4j.Logger;\r
36 import org.slf4j.LoggerFactory;\r
37 \r
38 /**\r
39  * LogEnabled and SessionAware ActionSupport\r
40  */\r
41 public abstract class PlexusActionSupport\r
42     extends ActionSupport\r
43     implements SessionAware, Auditable\r
44 {\r
45     protected Map<?, ?> session;\r
46 \r
47     protected Logger log = LoggerFactory.getLogger( getClass() );\r
48 \r
49     /**\r
50      * @plexus.requirement role="org.apache.maven.archiva.repository.audit.AuditListener"\r
51      */\r
52     private List<AuditListener> auditListeners = new ArrayList<AuditListener>();\r
53 \r
54     private String principal;\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( null, 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( null, getPrincipal(), null, 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         if ( principal != null )\r
120         {\r
121             return principal;\r
122         }\r
123         return ArchivaXworkUser.getActivePrincipal( ActionContext.getContext().getSession() );\r
124     }\r
125     \r
126     void setPrincipal( String principal )\r
127     {\r
128         this.principal = principal;\r
129     }\r
130 \r
131     public void setAuditListeners( List<AuditListener> auditListeners )\r
132     {\r
133         this.auditListeners = auditListeners;\r
134     }\r
135 }\r