]> source.dussan.org Git - archiva.git/blob
9fc4d979c09dc0e612f72d234cbace1cbeede18a
[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     private String principal;\r
57 \r
58     @SuppressWarnings("unchecked")\r
59     public void setSession( Map map )\r
60     {\r
61         this.session = map;\r
62     }\r
63 \r
64     public void addAuditListener( AuditListener listener )\r
65     {\r
66         this.auditListeners.add( listener );\r
67     }\r
68 \r
69     public void clearAuditListeners()\r
70     {\r
71         this.auditListeners.clear();\r
72     }\r
73 \r
74     public void removeAuditListener( AuditListener listener )\r
75     {\r
76         this.auditListeners.remove( listener );\r
77     }\r
78 \r
79     protected void triggerAuditEvent( String repositoryId, String resource, String action )\r
80     {\r
81         AuditEvent event = new AuditEvent( repositoryId, getPrincipal(), resource, action );\r
82         event.setRemoteIP( getRemoteAddr() );\r
83     \r
84         for ( AuditListener listener : auditListeners )\r
85         {\r
86             listener.auditEvent( event );\r
87         }\r
88     }\r
89 \r
90     protected void triggerAuditEvent( String resource, String action )\r
91     {\r
92         AuditEvent event = new AuditEvent( null, getPrincipal(), resource, action );\r
93         event.setRemoteIP( getRemoteAddr() );\r
94         \r
95         for ( AuditListener listener : auditListeners )\r
96         {\r
97             listener.auditEvent( event );\r
98         }\r
99     }\r
100 \r
101     protected void triggerAuditEvent( String action )\r
102     {\r
103         AuditEvent event = new AuditEvent( null, getPrincipal(), null, action );\r
104         event.setRemoteIP( getRemoteAddr() );\r
105         \r
106         for ( AuditListener listener : auditListeners )\r
107         {\r
108             listener.auditEvent( event );\r
109         }\r
110     }\r
111 \r
112     private String getRemoteAddr()\r
113     {\r
114         HttpServletRequest request = ServletActionContext.getRequest();\r
115         return request != null ? request.getRemoteAddr() : null;\r
116     }\r
117 \r
118     @SuppressWarnings( "unchecked" )\r
119     protected String getPrincipal()\r
120     {\r
121         if ( principal != null )\r
122         {\r
123             return principal;\r
124         }\r
125         return ArchivaXworkUser.getActivePrincipal( ActionContext.getContext().getSession() );\r
126     }\r
127     \r
128     void setPrincipal( String principal )\r
129     {\r
130         this.principal = principal;\r
131     }\r
132 }\r