diff options
author | James William Dumay <jdumay@apache.org> | 2009-02-26 05:32:30 +0000 |
---|---|---|
committer | James William Dumay <jdumay@apache.org> | 2009-02-26 05:32:30 +0000 |
commit | c2497e80a70fbb460c1f82b1fb832f39b1a1a2a0 (patch) | |
tree | 33af01ffb428f379d1a5cc88cae6286ea1b4c942 | |
parent | ff25a896f517e5182b53a8ca3f2fa63f0e568c4b (diff) | |
download | archiva-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
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" ); |