You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@archiva.apache.org by ol...@apache.org on 2012/01/16 11:29:14 UTC

svn commit: r1231900 - in /archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin: archiva-repository-admin-api/src/main/java/org/apache/archiva/admin/model/managed/ archiva-repository-admin-default/src/main/java/org/apache/archiva/admin/r...

Author: olamy
Date: Mon Jan 16 10:29:13 2012
New Revision: 1231900

URL: http://svn.apache.org/viewvc?rev=1231900&view=rev
Log:
validate managedRepository before remowing it for update. In case of non valid cronExpression it was removed before the validation

Modified:
    archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-api/src/main/java/org/apache/archiva/admin/model/managed/ManagedRepositoryAdmin.java
    archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/src/main/java/org/apache/archiva/admin/repository/RepositoryCommonValidator.java
    archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/src/main/java/org/apache/archiva/admin/repository/managed/DefaultManagedRepositoryAdmin.java

Modified: archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-api/src/main/java/org/apache/archiva/admin/model/managed/ManagedRepositoryAdmin.java
URL: http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-api/src/main/java/org/apache/archiva/admin/model/managed/ManagedRepositoryAdmin.java?rev=1231900&r1=1231899&r2=1231900&view=diff
==============================================================================
--- archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-api/src/main/java/org/apache/archiva/admin/model/managed/ManagedRepositoryAdmin.java (original)
+++ archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-api/src/main/java/org/apache/archiva/admin/model/managed/ManagedRepositoryAdmin.java Mon Jan 16 10:29:13 2012
@@ -33,6 +33,9 @@ import java.util.Map;
  */
 public interface ManagedRepositoryAdmin
 {
+
+    String REPOSITORY_LOCATION_VALID_EXPRESSION = "^[-a-zA-Z0-9._/~:?!&=\\\\]+$";
+
     List<ManagedRepository> getManagedRepositories()
         throws RepositoryAdminException;
 

Modified: archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/src/main/java/org/apache/archiva/admin/repository/RepositoryCommonValidator.java
URL: http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/src/main/java/org/apache/archiva/admin/repository/RepositoryCommonValidator.java?rev=1231900&r1=1231899&r2=1231900&view=diff
==============================================================================
--- archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/src/main/java/org/apache/archiva/admin/repository/RepositoryCommonValidator.java (original)
+++ archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/src/main/java/org/apache/archiva/admin/repository/RepositoryCommonValidator.java Mon Jan 16 10:29:13 2012
@@ -18,13 +18,16 @@ package org.apache.archiva.admin.reposit
  * under the License.
  */
 
-import org.apache.archiva.admin.model.beans.AbstractRepository;
 import org.apache.archiva.admin.model.RepositoryAdminException;
-import org.apache.commons.lang.StringUtils;
-import org.apache.commons.validator.GenericValidator;
+import org.apache.archiva.admin.model.beans.AbstractRepository;
+import org.apache.archiva.admin.model.beans.ManagedRepository;
+import org.apache.archiva.admin.model.managed.ManagedRepositoryAdmin;
 import org.apache.archiva.configuration.ArchivaConfiguration;
 import org.apache.archiva.configuration.Configuration;
+import org.apache.commons.lang.StringUtils;
+import org.apache.commons.validator.GenericValidator;
 import org.codehaus.plexus.registry.Registry;
+import org.codehaus.redback.components.scheduler.CronExpressionValidator;
 import org.springframework.stereotype.Service;
 
 import javax.inject.Inject;
@@ -110,7 +113,42 @@ public class RepositoryCommonValidator
                     + "forward-slashes(/), open-parenthesis('('), close-parenthesis(')'),  underscores(_), dots(.), and dashes(-)." );
         }
 
+    }
+
+    /**
+     * validate cronExpression and location format
+     *
+     * @param managedRepository
+     * @since 1.4-M2
+     */
+    public void validateManagedRepository( ManagedRepository managedRepository )
+        throws RepositoryAdminException
+    {
+        String cronExpression = managedRepository.getCronExpression();
+        // FIXME : olamy can be empty to avoid scheduled scan ?
+        if ( StringUtils.isNotBlank( cronExpression ) )
+        {
+            CronExpressionValidator validator = new CronExpressionValidator();
+
+            if ( !validator.validate( cronExpression ) )
+            {
+                throw new RepositoryAdminException( "Invalid cron expression." );
+            }
+        }
+        else
+        {
+            throw new RepositoryAdminException( "Cron expression cannot be empty." );
+        }
+
+        String repoLocation = removeExpressions( managedRepository.getLocation() );
 
+        if ( !GenericValidator.matchRegexp( repoLocation,
+                                            ManagedRepositoryAdmin.REPOSITORY_LOCATION_VALID_EXPRESSION ) )
+        {
+            throw new RepositoryAdminException(
+                "Invalid repository location. Directory must only contain alphanumeric characters, equals(=), question-marks(?), "
+                    + "exclamation-points(!), ampersands(&amp;), forward-slashes(/), back-slashes(\\), underscores(_), dots(.), colons(:), tildes(~), and dashes(-)." );
+        }
     }
 
     /**

Modified: archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/src/main/java/org/apache/archiva/admin/repository/managed/DefaultManagedRepositoryAdmin.java
URL: http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/src/main/java/org/apache/archiva/admin/repository/managed/DefaultManagedRepositoryAdmin.java?rev=1231900&r1=1231899&r2=1231900&view=diff
==============================================================================
--- archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/src/main/java/org/apache/archiva/admin/repository/managed/DefaultManagedRepositoryAdmin.java (original)
+++ archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/src/main/java/org/apache/archiva/admin/repository/managed/DefaultManagedRepositoryAdmin.java Mon Jan 16 10:29:13 2012
@@ -41,7 +41,6 @@ import org.apache.archiva.scheduler.repo
 import org.apache.archiva.security.common.ArchivaRoleConstants;
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.lang.StringUtils;
-import org.apache.commons.validator.GenericValidator;
 import org.apache.maven.index.NexusIndexer;
 import org.apache.maven.index.context.IndexCreator;
 import org.apache.maven.index.context.IndexingContext;
@@ -49,7 +48,6 @@ import org.apache.maven.index.context.Un
 import org.codehaus.plexus.redback.role.RoleManager;
 import org.codehaus.plexus.redback.role.RoleManagerException;
 import org.codehaus.plexus.taskqueue.TaskQueueException;
-import org.codehaus.redback.components.scheduler.CronExpressionValidator;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Service;
@@ -80,7 +78,6 @@ public class DefaultManagedRepositoryAdm
     implements ManagedRepositoryAdmin
 {
 
-    public static final String REPOSITORY_LOCATION_VALID_EXPRESSION = "^[-a-zA-Z0-9._/~:?!&amp;=\\\\]+$";
 
     private Logger log = LoggerFactory.getLogger( getClass() );
 
@@ -215,6 +212,7 @@ public class DefaultManagedRepositoryAdm
     {
 
         getRepositoryCommonValidator().basicValidation( managedRepository, false );
+        getRepositoryCommonValidator().validateManagedRepository( managedRepository );
         triggerAuditEvent( managedRepository.getId(), null, AuditEvent.ADD_MANAGED_REPO, auditInformation );
         Boolean res =
             addManagedRepository( managedRepository.getId(), managedRepository.getLayout(), managedRepository.getName(),
@@ -241,30 +239,6 @@ public class DefaultManagedRepositoryAdm
         throws RepositoryAdminException
     {
 
-        // FIXME : olamy can be empty to avoid scheduled scan ?
-        if ( StringUtils.isNotBlank( cronExpression ) )
-        {
-            CronExpressionValidator validator = new CronExpressionValidator();
-
-            if ( !validator.validate( cronExpression ) )
-            {
-                throw new RepositoryAdminException( "Invalid cron expression." );
-            }
-        }
-        else
-        {
-            throw new RepositoryAdminException( "Cron expression cannot be empty." );
-        }
-
-        String repoLocation = getRepositoryCommonValidator().removeExpressions( location );
-
-        if ( !GenericValidator.matchRegexp( repoLocation, REPOSITORY_LOCATION_VALID_EXPRESSION ) )
-        {
-            throw new RepositoryAdminException(
-                "Invalid repository location. Directory must only contain alphanumeric characters, equals(=), question-marks(?), "
-                    + "exclamation-points(!), ampersands(&amp;), forward-slashes(/), back-slashes(\\), underscores(_), dots(.), colons(:), tildes(~), and dashes(-)." );
-        }
-
         ManagedRepositoryConfiguration repository = new ManagedRepositoryConfiguration();
 
         repository.setId( repoId );
@@ -272,7 +246,7 @@ public class DefaultManagedRepositoryAdm
         repository.setReleases( releasesIncluded );
         repository.setSnapshots( snapshotsIncluded );
         repository.setName( name );
-        repository.setLocation( repoLocation );
+        repository.setLocation( getRepositoryCommonValidator().removeExpressions( location ) );
         repository.setLayout( layout );
         repository.setRefreshCronExpression( cronExpression );
         repository.setIndexDir( indexDir );
@@ -482,6 +456,8 @@ public class DefaultManagedRepositoryAdm
 
         getRepositoryCommonValidator().basicValidation( managedRepository, true );
 
+        getRepositoryCommonValidator().validateManagedRepository( managedRepository );
+
         Configuration configuration = getArchivaConfiguration().getConfiguration();
 
         ManagedRepositoryConfiguration toremove = configuration.findManagedRepositoryById( managedRepository.getId() );