summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJames William Dumay <jdumay@apache.org>2009-02-26 05:32:30 +0000
committerJames William Dumay <jdumay@apache.org>2009-02-26 05:32:30 +0000
commitc2497e80a70fbb460c1f82b1fb832f39b1a1a2a0 (patch)
tree33af01ffb428f379d1a5cc88cae6286ea1b4c942
parentff25a896f517e5182b53a8ca3f2fa63f0e568c4b (diff)
downloadarchiva-c2497e80a70fbb460c1f82b1fb832f39b1a1a2a0.tar.gz
archiva-c2497e80a70fbb460c1f82b1fb832f39b1a1a2a0.zip
Audit logging interceptor changes
git-svn-id: https://svn.apache.org/repos/asf/archiva/branches/archiva-with-new-repoapi@748021 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--archiva-modules/archiva-base/archiva-proxy/src/main/java/org/apache/maven/archiva/proxy/ProxyRepositoryManager.java1
-rw-r--r--archiva-modules/archiva-base/archiva-repository-api/src/main/java/org/apache/archiva/repository/api/RepositoryContext.java8
-rw-r--r--archiva-modules/archiva-base/archiva-repository/src/main/java/org/apache/archiva/repository/AuditLoggingPostRepositoryInterceptor.java64
-rw-r--r--archiva-modules/archiva-base/archiva-repository/src/main/java/org/apache/archiva/repository/GroupRepositoryManager.java6
-rw-r--r--archiva-modules/archiva-base/archiva-repository/src/main/resources/META-INF/spring-context.xml2
-rw-r--r--archiva-modules/archiva-web/archiva-repository-servlet/src/main/java/org/apache/archiva/web/servlet/HttpRepositoryContext.java5
6 files changed, 82 insertions, 4 deletions
diff --git a/archiva-modules/archiva-base/archiva-proxy/src/main/java/org/apache/maven/archiva/proxy/ProxyRepositoryManager.java b/archiva-modules/archiva-base/archiva-proxy/src/main/java/org/apache/maven/archiva/proxy/ProxyRepositoryManager.java
index e7431da30..5366b150f 100644
--- a/archiva-modules/archiva-base/archiva-proxy/src/main/java/org/apache/maven/archiva/proxy/ProxyRepositoryManager.java
+++ b/archiva-modules/archiva-base/archiva-proxy/src/main/java/org/apache/maven/archiva/proxy/ProxyRepositoryManager.java
@@ -41,6 +41,7 @@ import org.apache.maven.archiva.repository.ManagedRepositoryContent;
import org.apache.maven.archiva.repository.RepositoryContentFactory;
import org.apache.maven.archiva.repository.RepositoryException;
import org.apache.maven.archiva.repository.RepositoryNotFoundException;
+import org.apache.maven.archiva.repository.audit.Auditable;
import org.apache.maven.archiva.repository.content.RepositoryRequest;
import org.apache.maven.archiva.repository.layout.LayoutException;
import org.apache.maven.model.DistributionManagement;
diff --git a/archiva-modules/archiva-base/archiva-repository-api/src/main/java/org/apache/archiva/repository/api/RepositoryContext.java b/archiva-modules/archiva-base/archiva-repository-api/src/main/java/org/apache/archiva/repository/api/RepositoryContext.java
index 8f1dd7c55..ef927adc8 100644
--- a/archiva-modules/archiva-base/archiva-repository-api/src/main/java/org/apache/archiva/repository/api/RepositoryContext.java
+++ b/archiva-modules/archiva-base/archiva-repository-api/src/main/java/org/apache/archiva/repository/api/RepositoryContext.java
@@ -72,7 +72,13 @@ public interface RepositoryContext extends ResourceContext
/**
* Gets the ContentType of the Response
- * @return
+ * @return contentType
*/
String getContentType();
+
+ /**
+ * Gets the IP Address of the requester
+ * @return ipAdress
+ */
+ String getRemoteIP();
}
diff --git a/archiva-modules/archiva-base/archiva-repository/src/main/java/org/apache/archiva/repository/AuditLoggingPostRepositoryInterceptor.java b/archiva-modules/archiva-base/archiva-repository/src/main/java/org/apache/archiva/repository/AuditLoggingPostRepositoryInterceptor.java
new file mode 100644
index 000000000..f319f0f20
--- /dev/null
+++ b/archiva-modules/archiva-base/archiva-repository/src/main/java/org/apache/archiva/repository/AuditLoggingPostRepositoryInterceptor.java
@@ -0,0 +1,64 @@
+package org.apache.archiva.repository;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.ArrayList;
+import java.util.List;
+import org.apache.archiva.repository.api.RepositoryContext;
+import org.apache.archiva.repository.api.interceptor.PostRepositoryInterceptor;
+import org.apache.maven.archiva.repository.audit.AuditEvent;
+import org.apache.maven.archiva.repository.audit.AuditListener;
+import org.apache.maven.archiva.repository.audit.Auditable;
+
+public class AuditLoggingPostRepositoryInterceptor implements PostRepositoryInterceptor, Auditable
+{
+ private final List<AuditListener> auditListeners = new ArrayList<AuditListener>();
+
+ public void intercept(RepositoryContext context)
+ {
+ triggerAuditEvent(context);
+ }
+
+ private void triggerAuditEvent( RepositoryContext context )
+ {
+ AuditEvent event = new AuditEvent( context.getRepositoryId(), context.getPrincipal(), context.getLogicalPath(), context.getRequestType().toString() );
+ event.setRemoteIP( context.getRemoteIP() );
+
+ for ( AuditListener listener : auditListeners )
+ {
+ listener.auditEvent( event );
+ }
+ }
+
+ public void addAuditListener(AuditListener auditListener)
+ {
+ auditListeners.add(auditListener);
+ }
+
+ public void clearAuditListeners()
+ {
+ auditListeners.clear();
+ }
+
+ public void removeAuditListener(AuditListener auditListener)
+ {
+ auditListeners.add(auditListener);
+ }
+}
diff --git a/archiva-modules/archiva-base/archiva-repository/src/main/java/org/apache/archiva/repository/GroupRepositoryManager.java b/archiva-modules/archiva-base/archiva-repository/src/main/java/org/apache/archiva/repository/GroupRepositoryManager.java
index 810de270e..afb3ef2fc 100644
--- a/archiva-modules/archiva-base/archiva-repository/src/main/java/org/apache/archiva/repository/GroupRepositoryManager.java
+++ b/archiva-modules/archiva-base/archiva-repository/src/main/java/org/apache/archiva/repository/GroupRepositoryManager.java
@@ -97,7 +97,7 @@ public class GroupRepositoryManager implements RepositoryManager
if (isMetadataRequest(context) && isProjectReference(context))
{
ArchivaRepositoryMetadata mainMetadata = null;
- for (final String repositoryId : groupConfiguration.getRepositories() )
+ for (final String repositoryId : new ArrayList<String>(groupConfiguration.getRepositories()) )
{
final ByteArrayOutputStream baos = new ByteArrayOutputStream();
final MutableResourceContext resourceContext = getMetadataLogicalPathWithoutChecksum(context);
@@ -173,7 +173,7 @@ public class GroupRepositoryManager implements RepositoryManager
final RepositoryGroupConfiguration groupConfiguration = getGroupConfiguration(context.getRepositoryId());
final LinkedHashMap<String, Status> statusMap = new LinkedHashMap<String, Status>();
- for (final String repositoryId : groupConfiguration.getRepositories())
+ for (final String repositoryId : new ArrayList<String>(groupConfiguration.getRepositories()))
{
final MutableResourceContext resourceContext = getMetadataLogicalPathWithoutChecksum(context);
resourceContext.setRepositoryId(repositoryId);
@@ -229,7 +229,7 @@ public class GroupRepositoryManager implements RepositoryManager
private boolean readFromGroup(final RepositoryGroupConfiguration groupConfiguration, ResourceContext context, OutputStream os)
{
- for (final String repositoryId : groupConfiguration.getRepositories())
+ for (final String repositoryId : new ArrayList<String>(groupConfiguration.getRepositories()))
{
final MutableResourceContext resourceContext = new MutableResourceContext(context);
resourceContext.setRepositoryId(repositoryId);
diff --git a/archiva-modules/archiva-base/archiva-repository/src/main/resources/META-INF/spring-context.xml b/archiva-modules/archiva-base/archiva-repository/src/main/resources/META-INF/spring-context.xml
index 5d236ccae..eb3f3be5c 100644
--- a/archiva-modules/archiva-base/archiva-repository/src/main/resources/META-INF/spring-context.xml
+++ b/archiva-modules/archiva-base/archiva-repository/src/main/resources/META-INF/spring-context.xml
@@ -3,6 +3,8 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
+ <bean name="auditLoggingPostRepositoryInteceptor" class="org.apache.archiva.repository.AuditLoggingPostRepositoryInterceptor"/>
+
<bean name="repositoryFactory" class="org.apache.archiva.repository.DefaultRepositoryFactory" lazy-init="true">
<constructor-arg ref="repositoryContentFactory"/>
</bean>
diff --git a/archiva-modules/archiva-web/archiva-repository-servlet/src/main/java/org/apache/archiva/web/servlet/HttpRepositoryContext.java b/archiva-modules/archiva-web/archiva-repository-servlet/src/main/java/org/apache/archiva/web/servlet/HttpRepositoryContext.java
index 971421f2a..0af34283a 100644
--- a/archiva-modules/archiva-web/archiva-repository-servlet/src/main/java/org/apache/archiva/web/servlet/HttpRepositoryContext.java
+++ b/archiva-modules/archiva-web/archiva-repository-servlet/src/main/java/org/apache/archiva/web/servlet/HttpRepositoryContext.java
@@ -66,6 +66,11 @@ public class HttpRepositoryContext implements RepositoryContext
}
}
+ public String getRemoteIP()
+ {
+ return request.getRemoteAddr();
+ }
+
private static String getPrincipal(HttpServletRequest request)
{
String header = request.getHeader( "Authorization" );