]> source.dussan.org Git - archiva.git/commitdiff
validate managedRepository before remowing it for update. In case of non valid cronEx...
authorOlivier Lamy <olamy@apache.org>
Mon, 16 Jan 2012 10:29:13 +0000 (10:29 +0000)
committerOlivier Lamy <olamy@apache.org>
Mon, 16 Jan 2012 10:29:13 +0000 (10:29 +0000)
git-svn-id: https://svn.apache.org/repos/asf/archiva/trunk@1231900 13f79535-47bb-0310-9956-ffa450edef68

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

index 22d45f53f4b607e213fc46d6807b0c60dc64913c..2ffc2bfd57750eb1e9e4c396590eec10bc4f7c3c 100644 (file)
@@ -18,13 +18,16 @@ package org.apache.archiva.admin.repository;
  * 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(-)." );
+        }
     }
 
     /**
index a3ac32c0a2b7e8d5531ff89c189347e0f865c913..495fc82125e3a0c23179cd16c312149a29de6e0a 100644 (file)
@@ -41,7 +41,6 @@ import org.apache.archiva.scheduler.repository.RepositoryTask;
 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.UnsupportedExistingLuceneIndexException;
 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 DefaultManagedRepositoryAdmin
     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 DefaultManagedRepositoryAdmin
     {
 
         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 DefaultManagedRepositoryAdmin
         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 DefaultManagedRepositoryAdmin
         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 DefaultManagedRepositoryAdmin
 
         getRepositoryCommonValidator().basicValidation( managedRepository, true );
 
+        getRepositoryCommonValidator().validateManagedRepository( managedRepository );
+
         Configuration configuration = getArchivaConfiguration().getConfiguration();
 
         ManagedRepositoryConfiguration toremove = configuration.findManagedRepositoryById( managedRepository.getId() );