From 3387b53fcaebe7228ad212b833e929f1c14eaa51 Mon Sep 17 00:00:00 2001 From: Brett Porter Date: Thu, 11 Mar 2010 11:05:46 +0000 Subject: [PATCH] remove dependency on repository-layer from audit module git-svn-id: https://svn.apache.org/repos/asf/archiva/trunk@921799 13f79535-47bb-0310-9956-ffa450edef68 --- .../archiva-core-consumers/pom.xml | 5 + .../repository/AbstractRepositoryPurge.java | 2 +- .../web/action/DeleteArtifactAction.java | 4 +- .../web/action/PlexusActionSupport.java | 18 +- .../archiva/web/action/UploadAction.java | 32 +- .../AbstractRepositoriesAdminAction.java | 10 +- .../AddManagedRepositoryAction.java | 4 +- .../AddRemoteRepositoryAction.java | 3 +- .../DeleteManagedRepositoryAction.java | 10 +- .../DeleteRemoteRepositoryAction.java | 3 +- .../DeleteRepositoryGroupAction.java | 3 +- .../EditManagedRepositoryAction.java | 8 +- .../EditRemoteRepositoryAction.java | 3 +- .../repositories/RepositoryGroupsAction.java | 18 +- .../scanning/RepositoryScanningAction.java | 14 +- .../reports/ViewAuditLogReportAction.java | 18 +- .../action/AuditEventArgumentsMatcher.java | 6 +- .../archiva/web/action/UploadActionTest.java | 24 +- .../DeleteManagedRepositoryActionTest.java | 16 +- .../archiva-web/archiva-webdav/pom.xml | 5 + .../archiva/webdav/ArchivaDavResource.java | 4 +- .../webdav/ArchivaDavResourceFactory.java | 8 +- .../maven/archiva/webdav/DavResourceTest.java | 8 +- .../webdav/RepositoryServletSecurityTest.java | 29 +- .../repository/audit/TestAuditListener.java | 4 +- archiva-modules/plugins/audit/pom.xml | 2 +- .../org/apache/archiva/audit/AuditEvent.java | 330 ++++++++++++++++++ .../archiva/audit/AuditEventFactory.java | 3 +- .../apache/archiva/audit/AuditListener.java | 35 ++ .../org/apache/archiva/audit/AuditLog.java | 60 ++++ .../apache/archiva/audit/AuditManager.java | 4 +- .../org/apache/archiva/audit/Auditable.java | 47 +++ .../archiva/audit/DefaultAuditManager.java | 9 +- .../archiva/audit/MetadataAuditListener.java | 3 - .../archiva/audit/AuditManagerTest.java | 23 +- 35 files changed, 614 insertions(+), 161 deletions(-) create mode 100644 archiva-modules/plugins/audit/src/main/java/org/apache/archiva/audit/AuditEvent.java create mode 100644 archiva-modules/plugins/audit/src/main/java/org/apache/archiva/audit/AuditListener.java create mode 100644 archiva-modules/plugins/audit/src/main/java/org/apache/archiva/audit/AuditLog.java create mode 100644 archiva-modules/plugins/audit/src/main/java/org/apache/archiva/audit/Auditable.java diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/pom.xml b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/pom.xml index c3c302f93..a0edd975f 100644 --- a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/pom.xml +++ b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/pom.xml @@ -31,6 +31,11 @@ Archiva Consumers :: Core Consumers + + + org.apache.archiva + audit + org.apache.archiva archiva-configuration diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/maven/archiva/consumers/core/repository/AbstractRepositoryPurge.java b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/maven/archiva/consumers/core/repository/AbstractRepositoryPurge.java index 9ec6c8e5a..1bd3f95f1 100644 --- a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/maven/archiva/consumers/core/repository/AbstractRepositoryPurge.java +++ b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/maven/archiva/consumers/core/repository/AbstractRepositoryPurge.java @@ -19,10 +19,10 @@ package org.apache.maven.archiva.consumers.core.repository; * under the License. */ +import org.apache.archiva.audit.AuditEvent; import org.apache.archiva.repository.events.RepositoryListener; import org.apache.maven.archiva.model.ArtifactReference; import org.apache.maven.archiva.repository.ManagedRepositoryContent; -import org.apache.maven.archiva.repository.audit.AuditEvent; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/DeleteArtifactAction.java b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/DeleteArtifactAction.java index aae9ac692..c91dae1f7 100644 --- a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/DeleteArtifactAction.java +++ b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/DeleteArtifactAction.java @@ -21,6 +21,8 @@ package org.apache.maven.archiva.web.action; import com.opensymphony.xwork2.Preparable; import com.opensymphony.xwork2.Validateable; +import org.apache.archiva.audit.AuditEvent; +import org.apache.archiva.audit.Auditable; import org.apache.archiva.checksum.ChecksumAlgorithm; import org.apache.archiva.checksum.ChecksummedFile; import org.apache.archiva.metadata.model.ArtifactMetadata; @@ -37,8 +39,6 @@ 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.AuditEvent; -import org.apache.maven.archiva.repository.audit.Auditable; import org.apache.maven.archiva.repository.metadata.MetadataTools; import org.apache.maven.archiva.repository.metadata.RepositoryMetadataException; import org.apache.maven.archiva.repository.metadata.RepositoryMetadataReader; diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/PlexusActionSupport.java b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/PlexusActionSupport.java index 682e78808..aadc0bd34 100644 --- a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/PlexusActionSupport.java +++ b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/PlexusActionSupport.java @@ -19,22 +19,22 @@ package org.apache.maven.archiva.web.action; * under the License. */ -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import javax.servlet.http.HttpServletRequest; - import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; -import org.apache.maven.archiva.repository.audit.AuditEvent; -import org.apache.maven.archiva.repository.audit.AuditListener; -import org.apache.maven.archiva.repository.audit.Auditable; +import org.apache.archiva.audit.AuditEvent; +import org.apache.archiva.audit.AuditListener; +import org.apache.archiva.audit.Auditable; import org.apache.maven.archiva.security.ArchivaXworkUser; import org.apache.struts2.ServletActionContext; import org.apache.struts2.interceptor.SessionAware; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import javax.servlet.http.HttpServletRequest; + /** * LogEnabled and SessionAware ActionSupport */ @@ -47,7 +47,7 @@ public abstract class PlexusActionSupport protected Logger log = LoggerFactory.getLogger( getClass() ); /** - * @plexus.requirement role="org.apache.maven.archiva.repository.audit.AuditListener" + * @plexus.requirement role="org.apache.archiva.audit.AuditListener" */ private List auditListeners = new ArrayList(); diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/UploadAction.java b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/UploadAction.java index 1106d9426..2846384f5 100644 --- a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/UploadAction.java +++ b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/UploadAction.java @@ -19,22 +19,10 @@ package org.apache.maven.archiva.web.action; * under the License. */ -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.FileWriter; -import java.io.IOException; -import java.text.DateFormat; -import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Calendar; -import java.util.Collections; -import java.util.Date; -import java.util.List; -import java.util.TimeZone; - import com.opensymphony.xwork2.Preparable; import com.opensymphony.xwork2.Validateable; +import org.apache.archiva.audit.AuditEvent; +import org.apache.archiva.audit.Auditable; import org.apache.archiva.checksum.ChecksumAlgorithm; import org.apache.archiva.checksum.ChecksummedFile; import org.apache.archiva.scheduler.ArchivaTaskScheduler; @@ -53,8 +41,6 @@ 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.AuditEvent; -import org.apache.maven.archiva.repository.audit.Auditable; import org.apache.maven.archiva.repository.metadata.MetadataTools; import org.apache.maven.archiva.repository.metadata.RepositoryMetadataException; import org.apache.maven.archiva.repository.metadata.RepositoryMetadataReader; @@ -68,6 +54,20 @@ import org.apache.maven.model.io.xpp3.MavenXpp3Writer; import org.codehaus.plexus.taskqueue.TaskQueueException; import org.codehaus.plexus.util.IOUtil; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.FileWriter; +import java.io.IOException; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Collections; +import java.util.Date; +import java.util.List; +import java.util.TimeZone; + /** * Upload an artifact using Jakarta file upload in webwork. If set by the user a pom will also be generated. Metadata * will also be updated if one exists, otherwise it would be created. diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/AbstractRepositoriesAdminAction.java b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/AbstractRepositoriesAdminAction.java index 144bbaa00..aad944204 100644 --- a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/AbstractRepositoriesAdminAction.java +++ b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/AbstractRepositoriesAdminAction.java @@ -19,16 +19,12 @@ package org.apache.maven.archiva.web.action.admin.repositories; * under the License. */ -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; - +import org.apache.archiva.audit.Auditable; import org.apache.maven.archiva.configuration.ArchivaConfiguration; import org.apache.maven.archiva.configuration.Configuration; import org.apache.maven.archiva.configuration.IndeterminateConfigurationException; import org.apache.maven.archiva.configuration.InvalidConfigurationException; import org.apache.maven.archiva.configuration.ProxyConnectorConfiguration; -import org.apache.maven.archiva.repository.audit.Auditable; import org.apache.maven.archiva.security.ArchivaRoleConstants; import org.apache.maven.archiva.web.action.PlexusActionSupport; import org.codehaus.plexus.redback.rbac.Resource; @@ -37,6 +33,10 @@ import org.codehaus.redback.integration.interceptor.SecureAction; import org.codehaus.redback.integration.interceptor.SecureActionBundle; import org.codehaus.redback.integration.interceptor.SecureActionException; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + /** * Abstract AdminRepositories Action base. * diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/AddManagedRepositoryAction.java b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/AddManagedRepositoryAction.java index 97151c816..156e084bd 100644 --- a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/AddManagedRepositoryAction.java +++ b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/AddManagedRepositoryAction.java @@ -21,12 +21,12 @@ package org.apache.maven.archiva.web.action.admin.repositories; import com.opensymphony.xwork2.Preparable; import com.opensymphony.xwork2.Validateable; - +import org.apache.archiva.audit.AuditEvent; import org.apache.maven.archiva.configuration.Configuration; import org.apache.maven.archiva.configuration.ManagedRepositoryConfiguration; -import org.apache.maven.archiva.repository.audit.AuditEvent; import org.codehaus.plexus.redback.role.RoleManagerException; import org.codehaus.plexus.scheduler.CronExpressionValidator; + import java.io.File; import java.io.IOException; diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/AddRemoteRepositoryAction.java b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/AddRemoteRepositoryAction.java index 3b3d7b1d6..b2f718294 100644 --- a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/AddRemoteRepositoryAction.java +++ b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/AddRemoteRepositoryAction.java @@ -21,10 +21,9 @@ package org.apache.maven.archiva.web.action.admin.repositories; import com.opensymphony.xwork2.Preparable; import com.opensymphony.xwork2.Validateable; - +import org.apache.archiva.audit.AuditEvent; import org.apache.maven.archiva.configuration.Configuration; import org.apache.maven.archiva.configuration.RemoteRepositoryConfiguration; -import org.apache.maven.archiva.repository.audit.AuditEvent; import org.codehaus.plexus.redback.role.RoleManagerException; import java.io.IOException; diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/DeleteManagedRepositoryAction.java b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/DeleteManagedRepositoryAction.java index 237a1936b..5107e7c9a 100644 --- a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/DeleteManagedRepositoryAction.java +++ b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/DeleteManagedRepositoryAction.java @@ -19,20 +19,20 @@ package org.apache.maven.archiva.web.action.admin.repositories; * under the License. */ -import java.io.IOException; -import java.util.List; -import java.util.Map; - import com.opensymphony.xwork2.Preparable; +import org.apache.archiva.audit.AuditEvent; import org.apache.archiva.metadata.repository.MetadataRepository; import org.apache.archiva.metadata.repository.stats.RepositoryStatisticsManager; import org.apache.commons.lang.StringUtils; import org.apache.maven.archiva.configuration.Configuration; import org.apache.maven.archiva.configuration.ManagedRepositoryConfiguration; import org.apache.maven.archiva.configuration.ProxyConnectorConfiguration; -import org.apache.maven.archiva.repository.audit.AuditEvent; import org.codehaus.plexus.redback.role.RoleManagerException; +import java.io.IOException; +import java.util.List; +import java.util.Map; + /** * DeleteManagedRepositoryAction * diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/DeleteRemoteRepositoryAction.java b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/DeleteRemoteRepositoryAction.java index 9d9fef04b..8d0dc5afb 100644 --- a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/DeleteRemoteRepositoryAction.java +++ b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/DeleteRemoteRepositoryAction.java @@ -20,12 +20,11 @@ package org.apache.maven.archiva.web.action.admin.repositories; */ import com.opensymphony.xwork2.Preparable; - +import org.apache.archiva.audit.AuditEvent; import org.apache.commons.lang.StringUtils; import org.apache.maven.archiva.configuration.Configuration; import org.apache.maven.archiva.configuration.ProxyConnectorConfiguration; import org.apache.maven.archiva.configuration.RemoteRepositoryConfiguration; -import org.apache.maven.archiva.repository.audit.AuditEvent; import java.util.List; diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/DeleteRepositoryGroupAction.java b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/DeleteRepositoryGroupAction.java index 0c3aad84a..98230a9ba 100644 --- a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/DeleteRepositoryGroupAction.java +++ b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/DeleteRepositoryGroupAction.java @@ -20,11 +20,10 @@ package org.apache.maven.archiva.web.action.admin.repositories; */ import com.opensymphony.xwork2.Preparable; - +import org.apache.archiva.audit.AuditEvent; import org.apache.commons.lang.StringUtils; import org.apache.maven.archiva.configuration.Configuration; import org.apache.maven.archiva.configuration.RepositoryGroupConfiguration; -import org.apache.maven.archiva.repository.audit.AuditEvent; /** * DeleteRepositoryGroupAction diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/EditManagedRepositoryAction.java b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/EditManagedRepositoryAction.java index 70ad2b241..d27eea503 100644 --- a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/EditManagedRepositoryAction.java +++ b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/EditManagedRepositoryAction.java @@ -19,19 +19,19 @@ package org.apache.maven.archiva.web.action.admin.repositories; * under the License. */ -import java.io.File; -import java.io.IOException; - import com.opensymphony.xwork2.Preparable; import com.opensymphony.xwork2.Validateable; +import org.apache.archiva.audit.AuditEvent; import org.apache.archiva.metadata.repository.stats.RepositoryStatisticsManager; import org.apache.commons.lang.StringUtils; import org.apache.maven.archiva.configuration.Configuration; import org.apache.maven.archiva.configuration.ManagedRepositoryConfiguration; -import org.apache.maven.archiva.repository.audit.AuditEvent; import org.codehaus.plexus.redback.role.RoleManagerException; import org.codehaus.plexus.scheduler.CronExpressionValidator; +import java.io.File; +import java.io.IOException; + /** * AddManagedRepositoryAction * diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/EditRemoteRepositoryAction.java b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/EditRemoteRepositoryAction.java index 61dd3f6a4..771789a02 100644 --- a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/EditRemoteRepositoryAction.java +++ b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/EditRemoteRepositoryAction.java @@ -20,11 +20,10 @@ package org.apache.maven.archiva.web.action.admin.repositories; */ import com.opensymphony.xwork2.Preparable; - +import org.apache.archiva.audit.AuditEvent; import org.apache.commons.lang.StringUtils; import org.apache.maven.archiva.configuration.Configuration; import org.apache.maven.archiva.configuration.RemoteRepositoryConfiguration; -import org.apache.maven.archiva.repository.audit.AuditEvent; import org.codehaus.plexus.redback.role.RoleManagerException; import java.io.IOException; diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/RepositoryGroupsAction.java b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/RepositoryGroupsAction.java index fd5acb8b0..2cb4094af 100644 --- a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/RepositoryGroupsAction.java +++ b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/RepositoryGroupsAction.java @@ -19,22 +19,20 @@ package org.apache.maven.archiva.web.action.admin.repositories; * under the License. */ -import java.util.List; -import java.util.Map; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import javax.servlet.http.HttpServletRequest; - -import org.apache.struts2.interceptor.ServletRequestAware; import com.opensymphony.xwork2.Preparable; - +import org.apache.archiva.audit.AuditEvent; import org.apache.commons.lang.StringUtils; import org.apache.maven.archiva.configuration.Configuration; import org.apache.maven.archiva.configuration.ManagedRepositoryConfiguration; import org.apache.maven.archiva.configuration.RepositoryGroupConfiguration; -import org.apache.maven.archiva.repository.audit.AuditEvent; import org.apache.maven.archiva.web.util.ContextUtils; +import org.apache.struts2.interceptor.ServletRequestAware; + +import java.util.List; +import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import javax.servlet.http.HttpServletRequest; /** * RepositoryGroupsAction diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/scanning/RepositoryScanningAction.java b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/scanning/RepositoryScanningAction.java index 3f465c90a..6916d6529 100644 --- a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/scanning/RepositoryScanningAction.java +++ b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/scanning/RepositoryScanningAction.java @@ -19,13 +19,10 @@ package org.apache.maven.archiva.web.action.admin.scanning; * under the License. */ -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Map; - import com.opensymphony.xwork2.Preparable; import com.opensymphony.xwork2.Validateable; +import org.apache.archiva.audit.AuditEvent; +import org.apache.archiva.audit.Auditable; import org.apache.archiva.repository.scanner.RepositoryContentConsumers; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang.StringUtils; @@ -36,8 +33,6 @@ import org.apache.maven.archiva.configuration.IndeterminateConfigurationExceptio import org.apache.maven.archiva.configuration.RepositoryScanningConfiguration; import org.apache.maven.archiva.configuration.functors.FiletypeSelectionPredicate; import org.apache.maven.archiva.configuration.functors.FiletypeToMapClosure; -import org.apache.maven.archiva.repository.audit.AuditEvent; -import org.apache.maven.archiva.repository.audit.Auditable; import org.apache.maven.archiva.security.ArchivaRoleConstants; import org.apache.maven.archiva.web.action.PlexusActionSupport; import org.codehaus.plexus.redback.rbac.Resource; @@ -46,6 +41,11 @@ import org.codehaus.redback.integration.interceptor.SecureAction; import org.codehaus.redback.integration.interceptor.SecureActionBundle; import org.codehaus.redback.integration.interceptor.SecureActionException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Map; + /** * RepositoryScanningAction * diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/reports/ViewAuditLogReportAction.java b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/reports/ViewAuditLogReportAction.java index 92d598aa8..0030d1050 100644 --- a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/reports/ViewAuditLogReportAction.java +++ b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/reports/ViewAuditLogReportAction.java @@ -19,19 +19,11 @@ package org.apache.maven.archiva.web.action.reports; * under the License. */ -import java.util.ArrayList; -import java.util.Calendar; -import java.util.Collection; -import java.util.Collections; -import java.util.Date; -import java.util.List; -import javax.servlet.http.HttpServletRequest; - import com.opensymphony.xwork2.Preparable; +import org.apache.archiva.audit.AuditEvent; import org.apache.archiva.audit.AuditManager; import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.time.DateUtils; -import org.apache.maven.archiva.repository.audit.AuditEvent; import org.apache.maven.archiva.security.AccessDeniedException; import org.apache.maven.archiva.security.ArchivaSecurityException; import org.apache.maven.archiva.security.PrincipalNotFoundException; @@ -42,6 +34,14 @@ import org.codehaus.redback.integration.interceptor.SecureAction; import org.codehaus.redback.integration.interceptor.SecureActionBundle; import org.codehaus.redback.integration.interceptor.SecureActionException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Collection; +import java.util.Collections; +import java.util.Date; +import java.util.List; +import javax.servlet.http.HttpServletRequest; + /** * @plexus.component role="com.opensymphony.xwork2.Action" role-hint="viewAuditLogReport" * instantiation-strategy="per-lookup" diff --git a/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/AuditEventArgumentsMatcher.java b/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/AuditEventArgumentsMatcher.java index 81bed6f71..fcb92f32c 100644 --- a/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/AuditEventArgumentsMatcher.java +++ b/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/AuditEventArgumentsMatcher.java @@ -19,11 +19,11 @@ package org.apache.maven.archiva.web.action; * under the License. */ -import java.util.Arrays; - -import org.apache.maven.archiva.repository.audit.AuditEvent; +import org.apache.archiva.audit.AuditEvent; import org.easymock.ArgumentsMatcher; +import java.util.Arrays; + public class AuditEventArgumentsMatcher implements ArgumentsMatcher { diff --git a/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/UploadActionTest.java b/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/UploadActionTest.java index 7f052b6be..4aa2a766e 100644 --- a/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/UploadActionTest.java +++ b/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/UploadActionTest.java @@ -19,17 +19,9 @@ package org.apache.maven.archiva.web.action; * under the License. */ -import java.io.File; -import java.io.IOException; -import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.Date; -import java.util.List; -import java.util.TimeZone; - import com.opensymphony.xwork2.Action; +import org.apache.archiva.audit.AuditEvent; +import org.apache.archiva.audit.AuditListener; import org.apache.archiva.checksum.ChecksumAlgorithm; import org.apache.archiva.checksum.ChecksummedFile; import org.apache.archiva.scheduler.ArchivaTaskScheduler; @@ -42,14 +34,22 @@ import org.apache.maven.archiva.configuration.RepositoryScanningConfiguration; import org.apache.maven.archiva.repository.ManagedRepositoryContent; import org.apache.maven.archiva.repository.RepositoryContentFactory; import org.apache.maven.archiva.repository.RepositoryNotFoundException; -import org.apache.maven.archiva.repository.audit.AuditEvent; -import org.apache.maven.archiva.repository.audit.AuditListener; import org.apache.maven.archiva.repository.content.ManagedDefaultRepositoryContent; import org.apache.maven.archiva.repository.metadata.MetadataTools; import org.codehaus.plexus.spring.PlexusInSpringTestCase; import org.easymock.MockControl; import org.easymock.classextension.MockClassControl; +import java.io.File; +import java.io.IOException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.Date; +import java.util.List; +import java.util.TimeZone; + /** * UploadActionTest */ diff --git a/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/admin/repositories/DeleteManagedRepositoryActionTest.java b/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/admin/repositories/DeleteManagedRepositoryActionTest.java index 94f7b674e..d730cf5ce 100644 --- a/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/admin/repositories/DeleteManagedRepositoryActionTest.java +++ b/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/admin/repositories/DeleteManagedRepositoryActionTest.java @@ -19,13 +19,9 @@ package org.apache.maven.archiva.web.action.admin.repositories; * under the License. */ -import java.io.File; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; - import com.opensymphony.xwork2.Action; +import org.apache.archiva.audit.AuditEvent; +import org.apache.archiva.audit.AuditListener; import org.apache.archiva.metadata.repository.MetadataRepository; import org.apache.archiva.metadata.repository.stats.RepositoryStatisticsManager; import org.apache.maven.archiva.configuration.ArchivaConfiguration; @@ -35,8 +31,6 @@ import org.apache.maven.archiva.configuration.ManagedRepositoryConfiguration; import org.apache.maven.archiva.configuration.ProxyConnectorConfiguration; import org.apache.maven.archiva.configuration.RemoteRepositoryConfiguration; import org.apache.maven.archiva.configuration.RepositoryGroupConfiguration; -import org.apache.maven.archiva.repository.audit.AuditEvent; -import org.apache.maven.archiva.repository.audit.AuditListener; import org.apache.maven.archiva.security.ArchivaRoleConstants; import org.apache.maven.archiva.web.action.AuditEventArgumentsMatcher; import org.codehaus.plexus.redback.role.RoleManager; @@ -47,6 +41,12 @@ import org.codehaus.redback.integration.interceptor.SecureActionBundle; import org.codehaus.redback.integration.interceptor.SecureActionException; import org.easymock.MockControl; +import java.io.File; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + /** * DeleteManagedRepositoryActionTest * diff --git a/archiva-modules/archiva-web/archiva-webdav/pom.xml b/archiva-modules/archiva-web/archiva-webdav/pom.xml index d85241cee..f6b0e2561 100644 --- a/archiva-modules/archiva-web/archiva-webdav/pom.xml +++ b/archiva-modules/archiva-web/archiva-webdav/pom.xml @@ -30,8 +30,13 @@ Archiva Web :: WebDAV + org.apache.archiva + audit + + + org.apache.archiva archiva-configuration diff --git a/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/maven/archiva/webdav/ArchivaDavResource.java b/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/maven/archiva/webdav/ArchivaDavResource.java index ee155adc1..0f248e989 100644 --- a/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/maven/archiva/webdav/ArchivaDavResource.java +++ b/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/maven/archiva/webdav/ArchivaDavResource.java @@ -19,6 +19,8 @@ package org.apache.maven.archiva.webdav; * under the License. */ +import org.apache.archiva.audit.AuditEvent; +import org.apache.archiva.audit.AuditListener; import org.apache.archiva.scheduler.ArchivaTaskScheduler; import org.apache.archiva.scheduler.repository.RepositoryArchivaTaskScheduler; import org.apache.archiva.scheduler.repository.RepositoryTask; @@ -48,8 +50,6 @@ import org.apache.jackrabbit.webdav.property.DavPropertySet; import org.apache.jackrabbit.webdav.property.DefaultDavProperty; import org.apache.jackrabbit.webdav.property.ResourceType; import org.apache.maven.archiva.configuration.ManagedRepositoryConfiguration; -import org.apache.maven.archiva.repository.audit.AuditEvent; -import org.apache.maven.archiva.repository.audit.AuditListener; import org.apache.maven.archiva.webdav.util.IndexWriter; import org.apache.maven.archiva.webdav.util.MimeTypes; import org.codehaus.plexus.taskqueue.TaskQueueException; diff --git a/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/maven/archiva/webdav/ArchivaDavResourceFactory.java b/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/maven/archiva/webdav/ArchivaDavResourceFactory.java index 39542e622..5d28c5316 100644 --- a/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/maven/archiva/webdav/ArchivaDavResourceFactory.java +++ b/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/maven/archiva/webdav/ArchivaDavResourceFactory.java @@ -19,6 +19,9 @@ package org.apache.maven.archiva.webdav; * under the License. */ +import org.apache.archiva.audit.AuditEvent; +import org.apache.archiva.audit.AuditListener; +import org.apache.archiva.audit.Auditable; import org.apache.archiva.scheduler.repository.RepositoryArchivaTaskScheduler; import org.apache.commons.io.FileUtils; import org.apache.commons.lang.StringUtils; @@ -43,9 +46,6 @@ 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.AuditEvent; -import org.apache.maven.archiva.repository.audit.AuditListener; -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.archiva.repository.metadata.MetadataTools; @@ -99,7 +99,7 @@ public class ArchivaDavResourceFactory private Logger log = LoggerFactory.getLogger( ArchivaDavResourceFactory.class ); /** - * @plexus.requirement role="org.apache.maven.archiva.repository.audit.AuditListener" + * @plexus.requirement role="org.apache.archiva.audit.AuditListener" */ private List auditListeners = new ArrayList(); diff --git a/archiva-modules/archiva-web/archiva-webdav/src/test/java/org/apache/maven/archiva/webdav/DavResourceTest.java b/archiva-modules/archiva-web/archiva-webdav/src/test/java/org/apache/maven/archiva/webdav/DavResourceTest.java index 8e22e72de..079201a87 100644 --- a/archiva-modules/archiva-web/archiva-webdav/src/test/java/org/apache/maven/archiva/webdav/DavResourceTest.java +++ b/archiva-modules/archiva-web/archiva-webdav/src/test/java/org/apache/maven/archiva/webdav/DavResourceTest.java @@ -19,9 +19,7 @@ package org.apache.maven.archiva.webdav; * under the License. */ -import java.io.File; -import java.util.Collections; - +import org.apache.archiva.audit.AuditListener; import org.apache.commons.io.FileUtils; import org.apache.jackrabbit.webdav.DavException; import org.apache.jackrabbit.webdav.DavResource; @@ -37,11 +35,13 @@ import org.apache.jackrabbit.webdav.lock.Scope; import org.apache.jackrabbit.webdav.lock.SimpleLockManager; import org.apache.jackrabbit.webdav.lock.Type; import org.apache.maven.archiva.configuration.ManagedRepositoryConfiguration; -import org.apache.maven.archiva.repository.audit.AuditListener; import org.apache.maven.archiva.webdav.util.MimeTypes; import org.codehaus.plexus.spring.PlexusInSpringTestCase; import org.codehaus.plexus.spring.PlexusToSpringUtils; +import java.io.File; +import java.util.Collections; + public class DavResourceTest extends PlexusInSpringTestCase { diff --git a/archiva-modules/archiva-web/archiva-webdav/src/test/java/org/apache/maven/archiva/webdav/RepositoryServletSecurityTest.java b/archiva-modules/archiva-web/archiva-webdav/src/test/java/org/apache/maven/archiva/webdav/RepositoryServletSecurityTest.java index 6c265b225..3091c50ee 100644 --- a/archiva-modules/archiva-web/archiva-webdav/src/test/java/org/apache/maven/archiva/webdav/RepositoryServletSecurityTest.java +++ b/archiva-modules/archiva-web/archiva-webdav/src/test/java/org/apache/maven/archiva/webdav/RepositoryServletSecurityTest.java @@ -19,22 +19,21 @@ package org.apache.maven.archiva.webdav; * under the License. */ -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.util.List; - -import javax.servlet.http.HttpServletResponse; - +import com.meterware.httpunit.GetMethodWebRequest; +import com.meterware.httpunit.HttpUnitOptions; +import com.meterware.httpunit.PutMethodWebRequest; +import com.meterware.httpunit.WebRequest; +import com.meterware.httpunit.WebResponse; +import com.meterware.servletunit.InvocationContext; +import com.meterware.servletunit.ServletRunner; +import com.meterware.servletunit.ServletUnitClient; import net.sf.ehcache.CacheManager; - import org.apache.archiva.repository.audit.TestAuditListener; import org.apache.commons.io.FileUtils; import org.apache.jackrabbit.webdav.DavSessionProvider; import org.apache.maven.archiva.configuration.ArchivaConfiguration; import org.apache.maven.archiva.configuration.Configuration; import org.apache.maven.archiva.configuration.ManagedRepositoryConfiguration; -import org.apache.maven.archiva.repository.audit.AuditListener; import org.apache.maven.archiva.security.ArchivaRoleConstants; import org.apache.maven.archiva.security.ServletAuthenticator; import org.codehaus.plexus.redback.authentication.AuthenticationException; @@ -50,14 +49,10 @@ import org.codehaus.redback.integration.filter.authentication.basic.HttpBasicAut import org.easymock.MockControl; import org.easymock.classextension.MockClassControl; -import com.meterware.httpunit.GetMethodWebRequest; -import com.meterware.httpunit.HttpUnitOptions; -import com.meterware.httpunit.PutMethodWebRequest; -import com.meterware.httpunit.WebRequest; -import com.meterware.httpunit.WebResponse; -import com.meterware.servletunit.InvocationContext; -import com.meterware.servletunit.ServletRunner; -import com.meterware.servletunit.ServletUnitClient; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import javax.servlet.http.HttpServletResponse; /** * RepositoryServletSecurityTest Test the flow of the authentication and authorization checks. This does not necessarily diff --git a/archiva-modules/archiva-web/archiva-webdav/src/test/resources/org/apache/archiva/repository/audit/TestAuditListener.java b/archiva-modules/archiva-web/archiva-webdav/src/test/resources/org/apache/archiva/repository/audit/TestAuditListener.java index 52a6a14d5..af0daf0b8 100644 --- a/archiva-modules/archiva-web/archiva-webdav/src/test/resources/org/apache/archiva/repository/audit/TestAuditListener.java +++ b/archiva-modules/archiva-web/archiva-webdav/src/test/resources/org/apache/archiva/repository/audit/TestAuditListener.java @@ -19,8 +19,8 @@ package org.apache.archiva.repository.audit; * under the License. */ -import org.apache.maven.archiva.repository.audit.AuditEvent; -import org.apache.maven.archiva.repository.audit.AuditListener; +import org.apache.archiva.audit.AuditEvent; +import org.apache.archiva.audit.AuditListener; import java.util.ArrayList; import java.util.List; diff --git a/archiva-modules/plugins/audit/pom.xml b/archiva-modules/plugins/audit/pom.xml index 276905786..fd204538d 100644 --- a/archiva-modules/plugins/audit/pom.xml +++ b/archiva-modules/plugins/audit/pom.xml @@ -30,7 +30,7 @@ org.apache.archiva - archiva-repository-layer + archiva-configuration org.apache.archiva diff --git a/archiva-modules/plugins/audit/src/main/java/org/apache/archiva/audit/AuditEvent.java b/archiva-modules/plugins/audit/src/main/java/org/apache/archiva/audit/AuditEvent.java new file mode 100644 index 000000000..4712520a9 --- /dev/null +++ b/archiva-modules/plugins/audit/src/main/java/org/apache/archiva/audit/AuditEvent.java @@ -0,0 +1,330 @@ +package org.apache.archiva.audit; + +/* + * 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 org.apache.archiva.metadata.model.MetadataFacet; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; +import java.util.TimeZone; + +/** + * AuditEvent + * + * @version $Id$ + */ +public class AuditEvent + implements MetadataFacet +{ + public static final String TIMESTAMP_FORMAT = "yyyy/MM/dd/HHmmss.SSS"; + + public static final String CREATE_DIR = "Created Directory"; + + public static final String CREATE_FILE = "Created File"; + + public static final String REMOVE_DIR = "Removed Directory"; + + public static final String REMOVE_FILE = "Removed File"; + + public static final String MODIFY_FILE = "Modified File"; + + public static final String MOVE_FILE = "Moved File"; + + public static final String MOVE_DIRECTORY = "Moved Directory"; + + public static final String COPY_DIRECTORY = "Copied Directory"; + + public static final String COPY_FILE = "Copied File"; + + public static final String UPLOAD_FILE = "Uploaded File"; + + public static final String ADD_LEGACY_PATH = "Added Legacy Artifact Path"; + + public static final String REMOVE_LEGACY_PATH = "Removed Legacy Artifact Path"; + + public static final String PURGE_ARTIFACT = "Purged Artifact"; + + public static final String PURGE_FILE = "Purged Support File"; + + public static final String REMOVE_SCANNED = "Removed in Filesystem"; + + // configuration events + + public static final String ADD_MANAGED_REPO = "Added Managed Repository"; + + public static final String MODIFY_MANAGED_REPO = "Updated Managed Repository"; + + public static final String DELETE_MANAGED_REPO = "Deleted Managed Repository"; + + public static final String ADD_REMOTE_REPO = "Added Remote Repository"; + + public static final String MODIFY_REMOTE_REPO = "Updated Remote Repository"; + + public static final String DELETE_REMOTE_REPO = "Deleted Remote Repository"; + + public static final String ADD_REPO_GROUP = "Added Repository Group"; + + public static final String DELETE_REPO_GROUP = "Deleted Repository Group"; + + public static final String ADD_REPO_TO_GROUP = "Added Repository to Group"; + + public static final String DELETE_REPO_FROM_GROUP = "Deleted Repository from Group"; + + public static final String ENABLE_REPO_CONSUMER = "Enabled Content Consumer"; + + public static final String DISABLE_REPO_CONSUMER = "Disabled Content Consumer"; + + public static final String ADD_PATTERN = "Added File Type Pattern"; + + public static final String REMOVE_PATTERN = "Removed File Type Pattern"; + + private String repositoryId; + + private String userId; + + private String remoteIP; + + // TODO: change to artifact reference? does it ever refer to just a path? + + private String resource; + + private String action; + + private Date timestamp; + + public static final String FACET_ID = "org.apache.archiva.audit"; + + private static final TimeZone UTC_TIME_ZONE = TimeZone.getTimeZone( "UTC" ); + + private static final int TS_LENGTH = TIMESTAMP_FORMAT.length(); + + public AuditEvent() + { + /* do nothing */ + } + + public AuditEvent( String name, String repositoryId ) + { + String ts = name.substring( 0, TS_LENGTH ); + try + { + timestamp = createNameFormat().parse( ts ); + } + catch ( ParseException e ) + { + throw new IllegalArgumentException( "Improperly formatted timestamp for audit log event: " + ts ); + } + + if ( name.length() > TS_LENGTH ) + { + if ( name.charAt( TS_LENGTH ) != '/' ) + { + throw new IllegalArgumentException( + "Improperly formatted name for audit log event, no / separator between timestamp and resource: " + + name ); + } + } + + this.repositoryId = repositoryId; + } + + public AuditEvent( String repoId, String user, String resource, String action ) + { + this.repositoryId = repoId; + this.userId = user; + this.resource = resource; + this.action = action; + this.timestamp = Calendar.getInstance().getTime(); + } + + public String getRepositoryId() + { + return repositoryId; + } + + public void setRepositoryId( String repositoryId ) + { + this.repositoryId = repositoryId; + } + + public String getUserId() + { + return userId; + } + + public void setUserId( String userId ) + { + this.userId = userId; + } + + public String getResource() + { + return resource; + } + + public void setResource( String resource ) + { + this.resource = resource; + } + + public String getAction() + { + return action; + } + + public void setAction( String action ) + { + this.action = action; + } + + public String getRemoteIP() + { + return remoteIP; + } + + public void setRemoteIP( String remoteIP ) + { + this.remoteIP = remoteIP; + } + + public Date getTimestamp() + { + return timestamp; + } + + public void setTimestamp( Date timestamp ) + { + this.timestamp = timestamp; + } + + public String getFacetId() + { + return FACET_ID; + } + + public String getName() + { + // use the hashCode here to make it unique if multiple events occur at a certain timestamp. None of the other + // fields is unique on its own + return createNameFormat().format( timestamp ) + "/" + Integer.toHexString( hashCode() ); + // TODO: a simple incremental counter might be better since it will retain ordering, but then we need to do a + // bit of locking... + } + + private static SimpleDateFormat createNameFormat() + { + SimpleDateFormat fmt = new SimpleDateFormat( TIMESTAMP_FORMAT ); + fmt.setTimeZone( UTC_TIME_ZONE ); + return fmt; + } + + public Map toProperties() + { + Map properties = new HashMap(); + properties.put( "action", this.action ); + if ( this.userId != null ) + { + properties.put( "user", this.userId ); + } + if ( this.remoteIP != null ) + { + properties.put( "remoteIP", this.remoteIP ); + } + if ( this.resource != null ) + { + properties.put( "resource", this.resource ); + } + return properties; + } + + public void fromProperties( Map properties ) + { + this.action = properties.get( "action" ); + this.remoteIP = properties.get( "remoteIP" ); + this.userId = properties.get( "user" ); + this.resource = properties.get( "resource" ); + } + + @Override + public boolean equals( Object o ) + { + if ( this == o ) + { + return true; + } + if ( o == null || getClass() != o.getClass() ) + { + return false; + } + + AuditEvent that = (AuditEvent) o; + + if ( !action.equals( that.action ) ) + { + return false; + } + if ( remoteIP != null ? !remoteIP.equals( that.remoteIP ) : that.remoteIP != null ) + { + return false; + } + if ( repositoryId != null ? !repositoryId.equals( that.repositoryId ) : that.repositoryId != null ) + { + return false; + } + if ( resource != null ? !resource.equals( that.resource ) : that.resource != null ) + { + return false; + } + if ( !timestamp.equals( that.timestamp ) ) + { + return false; + } + if ( userId != null ? !userId.equals( that.userId ) : that.userId != null ) + { + return false; + } + + return true; + } + + @Override + public int hashCode() + { + int result = repositoryId != null ? repositoryId.hashCode() : 0; + result = 31 * result + ( userId != null ? userId.hashCode() : 0 ); + result = 31 * result + ( remoteIP != null ? remoteIP.hashCode() : 0 ); + result = 31 * result + ( resource != null ? resource.hashCode() : 0 ); + result = 31 * result + action.hashCode(); + result = 31 * result + timestamp.hashCode(); + return result; + } + + @Override + public String toString() + { + return "AuditEvent{" + "repositoryId='" + repositoryId + '\'' + ", userId='" + userId + '\'' + ", remoteIP='" + + remoteIP + '\'' + ", resource='" + resource + '\'' + ", action='" + action + '\'' + ", timestamp=" + + timestamp + '}'; + } +} diff --git a/archiva-modules/plugins/audit/src/main/java/org/apache/archiva/audit/AuditEventFactory.java b/archiva-modules/plugins/audit/src/main/java/org/apache/archiva/audit/AuditEventFactory.java index 9573d5509..f2572054f 100644 --- a/archiva-modules/plugins/audit/src/main/java/org/apache/archiva/audit/AuditEventFactory.java +++ b/archiva-modules/plugins/audit/src/main/java/org/apache/archiva/audit/AuditEventFactory.java @@ -21,7 +21,6 @@ package org.apache.archiva.audit; import org.apache.archiva.metadata.model.MetadataFacet; import org.apache.archiva.metadata.model.MetadataFacetFactory; -import org.apache.maven.archiva.repository.audit.AuditEvent; /** * @plexus.component role="org.apache.archiva.metadata.model.MetadataFacetFactory" role-hint="org.apache.archiva.audit" @@ -38,4 +37,4 @@ public class AuditEventFactory { return new AuditEvent( name, repositoryId ); } -} \ No newline at end of file +} diff --git a/archiva-modules/plugins/audit/src/main/java/org/apache/archiva/audit/AuditListener.java b/archiva-modules/plugins/audit/src/main/java/org/apache/archiva/audit/AuditListener.java new file mode 100644 index 000000000..204f7ae5c --- /dev/null +++ b/archiva-modules/plugins/audit/src/main/java/org/apache/archiva/audit/AuditListener.java @@ -0,0 +1,35 @@ +package org.apache.archiva.audit; + +/* + * 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. + */ + +/** + * AuditListener + * + * @version $Id$ + */ +public interface AuditListener +{ + /** + * Notification that an audit event occured. + * + * @param event the event details. + */ + public void auditEvent( AuditEvent event ); +} diff --git a/archiva-modules/plugins/audit/src/main/java/org/apache/archiva/audit/AuditLog.java b/archiva-modules/plugins/audit/src/main/java/org/apache/archiva/audit/AuditLog.java new file mode 100644 index 000000000..eda1d6cbc --- /dev/null +++ b/archiva-modules/plugins/audit/src/main/java/org/apache/archiva/audit/AuditLog.java @@ -0,0 +1,60 @@ +package org.apache.archiva.audit; + +/* + * 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 org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * AuditLog - Audit Log. + * + * @version $Id$ + * @plexus.component role="org.apache.maven.archiva.repository.audit.AuditListener" role-hint="logging" + */ +public class AuditLog + implements AuditListener +{ + public static final Logger logger = LoggerFactory.getLogger( "org.apache.archiva.AuditLog" ); + + private static final String NONE = "-"; + + private static final char DELIM = ' '; + + /** + * Creates a log message in the following format ... + * "{repository_id} {user_id} {remote_ip} \"{resource}\" \"{action}\"" + */ + public void auditEvent( AuditEvent event ) + { + StringBuffer msg = new StringBuffer(); + msg.append( checkNull( event.getRepositoryId() ) ).append( DELIM ); + msg.append( event.getUserId() ).append( DELIM ); + msg.append( checkNull( event.getRemoteIP() ) ).append( DELIM ); + msg.append( '\"' ).append( checkNull( event.getResource() ) ).append( '\"' ).append( DELIM ); + msg.append( '\"' ).append( event.getAction() ).append( '\"' ); + + logger.info( msg.toString() ); + } + + private String checkNull( String s ) + { + return s != null ? s : NONE; + } +} diff --git a/archiva-modules/plugins/audit/src/main/java/org/apache/archiva/audit/AuditManager.java b/archiva-modules/plugins/audit/src/main/java/org/apache/archiva/audit/AuditManager.java index 3b3448efb..29665e5a6 100644 --- a/archiva-modules/plugins/audit/src/main/java/org/apache/archiva/audit/AuditManager.java +++ b/archiva-modules/plugins/audit/src/main/java/org/apache/archiva/audit/AuditManager.java @@ -23,8 +23,6 @@ import java.util.Collection; import java.util.Date; import java.util.List; -import org.apache.maven.archiva.repository.audit.AuditEvent; - public interface AuditManager { List getMostRecentAuditEvents( List repositoryIds ); @@ -54,4 +52,4 @@ public interface AuditManager */ List getAuditEventsInRange( Collection repositoryIds, String resourcePattern, Date startTime, Date endTime ); -} \ No newline at end of file +} diff --git a/archiva-modules/plugins/audit/src/main/java/org/apache/archiva/audit/Auditable.java b/archiva-modules/plugins/audit/src/main/java/org/apache/archiva/audit/Auditable.java new file mode 100644 index 000000000..b2655240c --- /dev/null +++ b/archiva-modules/plugins/audit/src/main/java/org/apache/archiva/audit/Auditable.java @@ -0,0 +1,47 @@ +package org.apache.archiva.audit; + +/* + * 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. + */ + +/** + * Auditable + * + * @version $Id$ + */ +public interface Auditable +{ + /** + * Add an AuditListener. + * + * @param the listener to add. + */ + public void addAuditListener( AuditListener auditListener ); + + /** + * Remove an AuditListener. + * + * @param the listener to remove. + */ + public void removeAuditListener( AuditListener auditListener ); + + /** + * Remove all registered {@link AuditListener} objects. + */ + public void clearAuditListeners(); +} diff --git a/archiva-modules/plugins/audit/src/main/java/org/apache/archiva/audit/DefaultAuditManager.java b/archiva-modules/plugins/audit/src/main/java/org/apache/archiva/audit/DefaultAuditManager.java index 1a5b1ef18..73c9094e4 100644 --- a/archiva-modules/plugins/audit/src/main/java/org/apache/archiva/audit/DefaultAuditManager.java +++ b/archiva-modules/plugins/audit/src/main/java/org/apache/archiva/audit/DefaultAuditManager.java @@ -19,6 +19,10 @@ package org.apache.archiva.audit; * under the License. */ +import org.apache.archiva.metadata.repository.MetadataRepository; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; @@ -29,11 +33,6 @@ import java.util.Date; import java.util.List; import java.util.TimeZone; -import org.apache.archiva.metadata.repository.MetadataRepository; -import org.apache.maven.archiva.repository.audit.AuditEvent; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - /** * @plexus.component role="org.apache.archiva.audit.AuditManager" */ diff --git a/archiva-modules/plugins/audit/src/main/java/org/apache/archiva/audit/MetadataAuditListener.java b/archiva-modules/plugins/audit/src/main/java/org/apache/archiva/audit/MetadataAuditListener.java index 612eb51af..080013190 100644 --- a/archiva-modules/plugins/audit/src/main/java/org/apache/archiva/audit/MetadataAuditListener.java +++ b/archiva-modules/plugins/audit/src/main/java/org/apache/archiva/audit/MetadataAuditListener.java @@ -19,9 +19,6 @@ package org.apache.archiva.audit; * under the License. */ -import org.apache.maven.archiva.repository.audit.AuditEvent; -import org.apache.maven.archiva.repository.audit.AuditListener; - /** * @plexus.component role="org.apache.maven.archiva.repository.audit.AuditListener" role-hint="metadata" */ diff --git a/archiva-modules/plugins/audit/src/test/java/org/apache/archiva/audit/AuditManagerTest.java b/archiva-modules/plugins/audit/src/test/java/org/apache/archiva/audit/AuditManagerTest.java index 26b16d74d..a4e6012d3 100644 --- a/archiva-modules/plugins/audit/src/test/java/org/apache/archiva/audit/AuditManagerTest.java +++ b/archiva-modules/plugins/audit/src/test/java/org/apache/archiva/audit/AuditManagerTest.java @@ -19,6 +19,11 @@ package org.apache.archiva.audit; * under the License. */ +import junit.framework.TestCase; +import org.apache.archiva.metadata.repository.MetadataRepository; +import org.apache.maven.archiva.configuration.ManagedRepositoryConfiguration; +import org.easymock.MockControl; + import java.text.DecimalFormat; import java.text.ParseException; import java.text.SimpleDateFormat; @@ -31,15 +36,6 @@ import java.util.List; import java.util.Map; import java.util.TimeZone; -import junit.framework.TestCase; -import org.apache.archiva.metadata.repository.MetadataRepository; -import org.apache.maven.archiva.configuration.ManagedRepositoryConfiguration; -import org.apache.maven.archiva.repository.RepositoryContentFactory; -import org.apache.maven.archiva.repository.audit.AuditEvent; -import org.apache.maven.archiva.repository.content.ManagedDefaultRepositoryContent; -import org.easymock.MockControl; -import org.easymock.classextension.MockClassControl; - public class AuditManagerTest extends TestCase { @@ -87,13 +83,6 @@ public class AuditManagerTest ManagedRepositoryConfiguration repository = new ManagedRepositoryConfiguration(); repository.setId( TEST_REPO_ID ); repository.setLocation( "" ); - ManagedDefaultRepositoryContent content = new ManagedDefaultRepositoryContent(); - content.setRepository( repository ); - MockControl control = MockClassControl.createControl( RepositoryContentFactory.class ); - RepositoryContentFactory contentFactory = (RepositoryContentFactory) control.getMock(); - contentFactory.getManagedRepositoryContent( TEST_REPO_ID ); - control.setDefaultReturnValue( content ); - control.replay(); } public void testGetMostRecentEvents() @@ -602,4 +591,4 @@ public class AuditManagerTest } return names; } -} \ No newline at end of file +} -- 2.39.5