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