import org.apache.archiva.admin.AuditInformation;
import org.apache.archiva.admin.repository.RepositoryAdminException;
+import org.apache.archiva.admin.repository.RepositoryCommonValidator;
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.archiva.scheduler.repository.RepositoryArchivaTaskScheduler;
import org.apache.archiva.scheduler.repository.RepositoryTask;
+import org.apache.archiva.security.ArchivaRoleConstants;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.validator.GenericValidator;
import org.apache.maven.archiva.configuration.IndeterminateConfigurationException;
import org.apache.maven.archiva.configuration.ManagedRepositoryConfiguration;
import org.apache.maven.archiva.configuration.ProxyConnectorConfiguration;
-import org.apache.archiva.security.ArchivaRoleConstants;
import org.codehaus.plexus.redback.role.RoleManager;
import org.codehaus.plexus.redback.role.RoleManagerException;
import org.codehaus.plexus.redback.users.User;
public class DefaultManagedRepositoryAdmin
implements ManagedRepositoryAdmin
{
- public static final String REPOSITORY_ID_VALID_EXPRESSION = "^[a-zA-Z0-9._-]+$";
-
- public static final String REPOSITORY_NAME_VALID_EXPRESSION = "^([a-zA-Z0-9.)/_(-]|\\s)+$";
public static final String REPOSITORY_LOCATION_VALID_EXPRESSION = "^[-a-zA-Z0-9._/~:?!&=\\\\]+$";
@Inject
private List<AuditListener> auditListeners = new ArrayList<AuditListener>();
+ @Inject
+ private RepositoryCommonValidator repositoryCommonValidator;
+
@Inject
protected RoleManager roleManager;
AuditInformation auditInformation )
throws RepositoryAdminException
{
+
+ repositoryCommonValidator.basicValidation( managedRepository, false );
triggerAuditEvent( managedRepository.getId(), null, AuditEvent.ADD_MANAGED_REPO, auditInformation );
return
addManagedRepository( managedRepository.getId(), managedRepository.getLayout(), managedRepository.getName(),
Configuration config = getArchivaConfiguration().getConfiguration();
- if ( config.getManagedRepositoriesAsMap().containsKey( repoId ) )
- {
- throw new RepositoryAdminException( "Unable to add new repository with id [" + repoId
- + "], that id already exists as a managed repository." );
- }
- else if ( config.getRepositoryGroupsAsMap().containsKey( repoId ) )
- {
- throw new RepositoryAdminException( "Unable to add new repository with id [" + repoId
- + "], that id already exists as a repository group." );
- }
-
// FIXME : olamy can be empty to avoid scheduled scan ?
if ( StringUtils.isNotBlank( cronExpression ) )
{
throw new RepositoryAdminException( "Cron expression cannot be empty." );
}
- if ( StringUtils.isBlank( repoId ) )
- {
- throw new RepositoryAdminException( "Repository ID cannot be empty." );
- }
-
- if ( !GenericValidator.matchRegexp( repoId, REPOSITORY_ID_VALID_EXPRESSION ) )
- {
- throw new RepositoryAdminException(
- "Invalid repository ID. Identifier must only contain alphanumeric characters, underscores(_), dots(.), and dashes(-)." );
- }
-
- if ( StringUtils.isBlank( name ) )
- {
- throw new RepositoryAdminException( "repository name cannot be empty" );
- }
-
- if ( !GenericValidator.matchRegexp( name, REPOSITORY_NAME_VALID_EXPRESSION ) )
- {
- throw new RepositoryAdminException(
- "Invalid repository name. Repository Name must only contain alphanumeric characters, white-spaces(' '), "
- + "forward-slashes(/), open-parenthesis('('), close-parenthesis(')'), underscores(_), dots(.), and dashes(-)." );
- }
-
- String repoLocation = removeExpressions( location );
+ String repoLocation = repositoryCommonValidator.removeExpressions( location );
if ( !GenericValidator.matchRegexp( repoLocation, REPOSITORY_LOCATION_VALID_EXPRESSION ) )
{
AuditInformation auditInformation, boolean resetStats )
throws RepositoryAdminException
{
- // Ensure that the fields are valid.
- Configuration configuration = getArchivaConfiguration().getConfiguration();
log.debug( "updateManagedConfiguration repo {} needStage {} resetStats {} ",
Arrays.asList( managedRepository, needStageRepo, resetStats ).toArray() );
+ // Ensure that the fields are valid.
+
+ repositoryCommonValidator.basicValidation( managedRepository, true );
+
+ Configuration configuration = getArchivaConfiguration().getConfiguration();
+
ManagedRepositoryConfiguration toremove = configuration.findManagedRepositoryById( managedRepository.getId() );
if ( toremove != null )
}
- public String removeExpressions( String directory )
- {
- String value = StringUtils.replace( directory, "${appserver.base}",
- getRegistry().getString( "appserver.base", "${appserver.base}" ) );
- value = StringUtils.replace( value, "${appserver.home}",
- getRegistry().getString( "appserver.home", "${appserver.home}" ) );
- return value;
- }
private void saveConfiguration( Configuration config )
throws RepositoryAdminException
{
this.registry = registry;
}
+
+ public RepositoryCommonValidator getRepositoryCommonValidator()
+ {
+ return repositoryCommonValidator;
+ }
+
+ public void setRepositoryCommonValidator( RepositoryCommonValidator repositoryCommonValidator )
+ {
+ this.repositoryCommonValidator = repositoryCommonValidator;
+ }
}
AuditInformation auditInformation, boolean resetStats )
throws RepositoryAdminException;
- /**
- * replace some interpolations ${appserver.base} with correct values
- * @param directory
- * @return
- */
- String removeExpressions( String directory );
}
import org.apache.archiva.admin.AuditInformation;
import org.apache.archiva.admin.mock.MockAuditListener;
import org.apache.archiva.audit.AuditEvent;
+import org.apache.archiva.security.ArchivaRoleConstants;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang.StringUtils;
-import org.apache.archiva.security.ArchivaRoleConstants;
import org.codehaus.plexus.redback.role.RoleManager;
import org.codehaus.plexus.redback.users.User;
import org.codehaus.plexus.redback.users.memory.SimpleUser;
assertAuditListenerCallAndUpdateAddAndDelete( false );
mockAuditListener.clearEvents();
+
}
assertTemplateRoleNotExists( repoId + STAGE_REPO_ID_END );
mockAuditListener.clearEvents();
+
}
@Test
ManagedRepository repo = getTestManagedRepository( repoId, repoLocation );
+
+
managedRepositoryAdmin.addManagedRepository( repo, false, getFakeAuditInformation() );
assertTemplateRoleExists( repoId );
assertAuditListenerCallAndUpdateAddAndDelete( true );
mockAuditListener.clearEvents();
+
}
//----------------------------------
* under the License.
*/
+import org.apache.archiva.admin.repository.RepositoryCommonValidator;
import org.apache.archiva.admin.repository.managed.ManagedRepositoryAdmin;
import org.apache.archiva.audit.Auditable;
+import org.apache.archiva.security.ArchivaRoleConstants;
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.archiva.security.ArchivaRoleConstants;
import org.apache.maven.archiva.web.action.AbstractActionSupport;
import org.codehaus.plexus.redback.rbac.Resource;
import org.codehaus.plexus.registry.RegistryException;
@Inject
private ManagedRepositoryAdmin managedRepositoryAdmin;
+ @Inject
+ private RepositoryCommonValidator repositoryCommonValidator;
+
public ArchivaConfiguration getArchivaConfiguration()
{
return archivaConfiguration;
this.managedRepositoryAdmin = managedRepositoryAdmin;
}
+ public RepositoryCommonValidator getRepositoryCommonValidator()
+ {
+ return repositoryCommonValidator;
+ }
+
+ public void setRepositoryCommonValidator( RepositoryCommonValidator repositoryCommonValidator )
+ {
+ this.repositoryCommonValidator = repositoryCommonValidator;
+ }
}
import org.apache.archiva.admin.repository.managed.ManagedRepository;
import org.apache.commons.lang.StringUtils;
import org.apache.maven.archiva.configuration.Configuration;
-import org.apache.maven.archiva.configuration.ManagedRepositoryConfiguration;
import org.codehaus.redback.components.scheduler.CronExpressionValidator;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
public String commit()
{
- repository.setLocation( getManagedRepositoryAdmin().removeExpressions( repository.getLocation() ) );
+ repository.setLocation( getRepositoryCommonValidator().removeExpressions( repository.getLocation() ) );
File location = new File( repository.getLocation() );
if ( location.exists() )
boolean resetStats = false;
// check if the location was changed
- repository.setLocation( getManagedRepositoryAdmin().removeExpressions( repository.getLocation() ) );
+ repository.setLocation( getRepositoryCommonValidator().removeExpressions( repository.getLocation() ) );
if ( !StringUtils.equalsIgnoreCase( existingConfig.getLocation().trim(), repository.getLocation().trim() ) )
{
*/
import com.opensymphony.xwork2.Action;
+import org.apache.archiva.admin.repository.RepositoryCommonValidator;
import org.apache.archiva.admin.repository.managed.DefaultManagedRepositoryAdmin;
import org.apache.archiva.admin.repository.managed.ManagedRepository;
import org.apache.archiva.scheduler.repository.RepositoryArchivaTaskScheduler;
import org.apache.archiva.scheduler.repository.RepositoryTask;
+import org.apache.archiva.security.ArchivaRoleConstants;
+import org.apache.archiva.web.validator.utils.ValidatorUtil;
import org.apache.commons.io.FileUtils;
import org.apache.maven.archiva.configuration.ArchivaConfiguration;
import org.apache.maven.archiva.configuration.Configuration;
-import org.apache.archiva.security.ArchivaRoleConstants;
-import org.apache.archiva.web.validator.utils.ValidatorUtil;
import org.codehaus.plexus.redback.role.RoleManager;
import org.codehaus.plexus.registry.Registry;
import org.codehaus.redback.integration.interceptor.SecureActionBundle;
( (DefaultManagedRepositoryAdmin) getManagedRepositoryAdmin() ).setRegistry( registry );
( (DefaultManagedRepositoryAdmin) getManagedRepositoryAdmin() ).setRepositoryTaskScheduler(
repositoryTaskScheduler );
+
+ RepositoryCommonValidator repositoryCommonValidator = new RepositoryCommonValidator();
+ repositoryCommonValidator.setArchivaConfiguration( archivaConfiguration );
+ repositoryCommonValidator.setRegistry( registry );
+
+ ( (DefaultManagedRepositoryAdmin) getManagedRepositoryAdmin() ).setRepositoryCommonValidator(
+ repositoryCommonValidator );
+
+ action.setRepositoryCommonValidator( repositoryCommonValidator );
+
action.setManagedRepositoryAdmin( getManagedRepositoryAdmin() );
}
public void testAddRepositoryInitialPage()
throws Exception
{
+ archivaConfiguration.getConfiguration();
+ archivaConfigurationControl.setReturnValue( new Configuration() );
archivaConfiguration.getConfiguration();
archivaConfigurationControl.setReturnValue( new Configuration() );
archivaConfigurationControl.replay();
archivaConfiguration.getConfiguration();
archivaConfigurationControl.setReturnValue( configuration );
+ archivaConfiguration.getConfiguration();
+ archivaConfigurationControl.setReturnValue( configuration );
+
archivaConfiguration.save( configuration );
archivaConfigurationControl.replay();
import com.opensymphony.xwork2.Action;
import org.apache.archiva.admin.repository.RepositoryAdminException;
+import org.apache.archiva.admin.repository.RepositoryCommonValidator;
import org.apache.archiva.admin.repository.managed.DefaultManagedRepositoryAdmin;
import org.apache.archiva.admin.repository.managed.ManagedRepository;
import org.apache.archiva.audit.AuditListener;
( (DefaultManagedRepositoryAdmin) getManagedRepositoryAdmin() ).setAuditListeners(
new ArrayList<AuditListener>( 0 ) );
+ RepositoryCommonValidator repositoryCommonValidator = new RepositoryCommonValidator();
+ repositoryCommonValidator.setArchivaConfiguration( archivaConfiguration );
+ repositoryCommonValidator.setRegistry( registry );
+
+ ( (DefaultManagedRepositoryAdmin) getManagedRepositoryAdmin() ).setRepositoryCommonValidator(
+ repositoryCommonValidator );
+
+ action.setRepositoryCommonValidator( repositoryCommonValidator );
+
action.setManagedRepositoryAdmin( getManagedRepositoryAdmin() );
}
archivaConfigurationControl.setReturnValue( configuration );
archivaConfigurationControl.setReturnValue( configuration );
+ archivaConfigurationControl.setReturnValue( configuration );
archivaConfigurationControl.setReturnValue( configuration );
Configuration stageRepoConfiguration = new Configuration();
archivaConfigurationControl.setReturnValue( configuration );
archivaConfigurationControl.setReturnValue( configuration );
+ archivaConfigurationControl.setReturnValue( configuration );
+
archivaConfigurationControl.setReturnValue( buildEasyConfiguration() );
Configuration stageRepoConfiguration = buildEasyConfiguration();
*/
import junit.framework.TestCase;
+import org.apache.archiva.admin.repository.RepositoryCommonValidator;
import org.apache.archiva.admin.repository.managed.DefaultManagedRepositoryAdmin;
import org.apache.archiva.audit.AuditEvent;
import org.apache.archiva.audit.AuditListener;
import org.apache.archiva.repository.scanner.RepositoryContentConsumers;
import org.apache.archiva.scheduler.repository.RepositoryArchivaTaskScheduler;
import org.apache.archiva.scheduler.repository.RepositoryTask;
+import org.apache.archiva.security.ArchivaRoleConstants;
import org.apache.archiva.stagerepository.merge.RepositoryMerger;
import org.apache.archiva.web.xmlrpc.api.beans.ManagedRepository;
import org.apache.archiva.web.xmlrpc.api.beans.RemoteRepository;
import org.apache.maven.archiva.repository.content.ManagedLegacyRepositoryContent;
import org.apache.maven.archiva.repository.content.PathParser;
import org.apache.maven.archiva.repository.layout.LayoutException;
-import org.apache.archiva.security.ArchivaRoleConstants;
import org.codehaus.plexus.redback.role.RoleManager;
import org.codehaus.plexus.registry.Registry;
import org.easymock.MockControl;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
+import org.springframework.context.ApplicationContext;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
private DefaultManagedRepositoryAdmin managedRepositoryAdmin;
+ private ApplicationContext applicationContext;
+
@Before
public void setUp()
throws Exception
managedRepositoryAdmin.setAuditListeners( Arrays.asList( auditListener ) );
managedRepositoryAdmin.setRoleManager( roleManager );
+ RepositoryCommonValidator repositoryCommonValidator = new RepositoryCommonValidator();
+ repositoryCommonValidator.setArchivaConfiguration( archivaConfig );
+ repositoryCommonValidator.setRegistry( registry );
+
+ managedRepositoryAdmin.setRepositoryCommonValidator( repositoryCommonValidator );
+
service = new AdministrationServiceImpl( archivaConfig, repoConsumersUtil, repositoryFactory,
repositorySessionFactory, repositoryTaskScheduler,
Collections.singletonList( listener ), repositoryStatisticsManager,
remoteRepoMap.put( "repo1", remoteRepo );
repoGroupMap.put( "repo1", repoGroup );
+ archivaConfigControl.expectAndReturn( archivaConfig.getConfiguration(), config );
archivaConfigControl.expectAndReturn( archivaConfig.getConfiguration(), config );
configControl.expectAndReturn( config.getManagedRepositoriesAsMap(), managedRepoMap );
}
catch ( Exception e )
{
- assertEquals(
- "Invalid repository location. Directory must only contain alphanumeric characters, equals(=), question-marks(?), "
- + "exclamation-points(!), ampersands(&), forward-slashes(/), back-slashes(\\), underscores(_), dots(.), colons(:), tildes(~), and dashes(-).",
- e.getMessage() );
+ assertEquals( "message found " + e.getMessage(),
+ "Invalid repository location. Directory must only contain alphanumeric characters, equals(=), question-marks(?), "
+ + "exclamation-points(!), ampersands(&), forward-slashes(/), back-slashes(\\), underscores(_), dots(.), colons(:), tildes(~), and dashes(-).",
+ e.getMessage() );
}
registryControl.verify();