<name>Archiva Consumers :: Core Consumers</name>
<dependencies>
+ <!-- TODO: remove this hard dependency by using an event mechanism -->
+ <dependency>
+ <groupId>org.apache.archiva</groupId>
+ <artifactId>audit</artifactId>
+ </dependency>
<dependency>
<groupId>org.apache.archiva</groupId>
<artifactId>archiva-configuration</artifactId>
* 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;
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;
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;
* under the License.\r
*/\r
\r
-import java.util.ArrayList;\r
-import java.util.List;\r
-import java.util.Map;\r
-import javax.servlet.http.HttpServletRequest;\r
-\r
import com.opensymphony.xwork2.ActionContext;\r
import com.opensymphony.xwork2.ActionSupport;\r
-import org.apache.maven.archiva.repository.audit.AuditEvent;\r
-import org.apache.maven.archiva.repository.audit.AuditListener;\r
-import org.apache.maven.archiva.repository.audit.Auditable;\r
+import org.apache.archiva.audit.AuditEvent;\r
+import org.apache.archiva.audit.AuditListener;\r
+import org.apache.archiva.audit.Auditable;\r
import org.apache.maven.archiva.security.ArchivaXworkUser;\r
import org.apache.struts2.ServletActionContext;\r
import org.apache.struts2.interceptor.SessionAware;\r
import org.slf4j.Logger;\r
import org.slf4j.LoggerFactory;\r
\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+import java.util.Map;\r
+import javax.servlet.http.HttpServletRequest;\r
+\r
/**\r
* LogEnabled and SessionAware ActionSupport\r
*/\r
protected Logger log = LoggerFactory.getLogger( getClass() );\r
\r
/**\r
- * @plexus.requirement role="org.apache.maven.archiva.repository.audit.AuditListener"\r
+ * @plexus.requirement role="org.apache.archiva.audit.AuditListener"\r
*/\r
private List<AuditListener> auditListeners = new ArrayList<AuditListener>();\r
\r
* 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;
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;
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.
* 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;
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.
*
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;
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;
* 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
*
*/
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;
*/
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
* 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
*
*/
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;
* 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
* 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;
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;
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
*
* 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;
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"
* 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
{
* 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;
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
*/
* 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;
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;
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
*
<name>Archiva Web :: WebDAV</name>
<dependencies>
+ <!-- TODO: remove this hardcoding through a better event mechanism -->
<dependency>
<groupId>org.apache.archiva</groupId>
+ <artifactId>audit</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.archiva</groupId>
<artifactId>archiva-configuration</artifactId>
</dependency>
<dependency>
* 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;
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;
* 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;
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;
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<AuditListener> auditListeners = new ArrayList<AuditListener>();
* 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;
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
{
* 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;
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
* 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;
<dependencies>
<dependency>
<groupId>org.apache.archiva</groupId>
- <artifactId>archiva-repository-layer</artifactId>
+ <artifactId>archiva-configuration</artifactId>
</dependency>
<dependency>
<groupId>org.apache.archiva</groupId>
--- /dev/null
+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<String, String> toProperties()
+ {
+ Map<String, String> properties = new HashMap<String, String>();
+ 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<String, String> 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 + '}';
+ }
+}
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"
{
return new AuditEvent( name, repositoryId );
}
-}
\ No newline at end of file
+}
--- /dev/null
+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 );
+}
--- /dev/null
+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;
+ }
+}
import java.util.Date;
import java.util.List;
-import org.apache.maven.archiva.repository.audit.AuditEvent;
-
public interface AuditManager
{
List<AuditEvent> getMostRecentAuditEvents( List<String> repositoryIds );
*/
List<AuditEvent> getAuditEventsInRange( Collection<String> repositoryIds, String resourcePattern, Date startTime,
Date endTime );
-}
\ No newline at end of file
+}
--- /dev/null
+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();
+}
* 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;
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"
*/
* 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"
*/
* 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;
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
{
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()
}
return names;
}
-}
\ No newline at end of file
+}