diff --git a/components/nexus-core/src/main/java/org/sonatype/nexus/configuration/application/DefaultNexusConfiguration.java b/components/nexus-core/src/main/java/org/sonatype/nexus/configuration/application/DefaultNexusConfiguration.java index 9fee9966147..cbd06be1595 100644 --- a/components/nexus-core/src/main/java/org/sonatype/nexus/configuration/application/DefaultNexusConfiguration.java +++ b/components/nexus-core/src/main/java/org/sonatype/nexus/configuration/application/DefaultNexusConfiguration.java @@ -78,13 +78,14 @@ import org.sonatype.sisu.goodies.common.ComponentSupport; import org.sonatype.sisu.goodies.eventbus.EventBus; +import com.google.common.base.Throwables; + import com.google.common.base.Function; import com.google.common.base.Strings; import com.google.common.collect.Collections2; import org.apache.shiro.SecurityUtils; import org.apache.shiro.authc.UsernamePasswordToken; import org.apache.shiro.subject.Subject; - import static com.google.common.base.Preconditions.checkNotNull; /** @@ -664,6 +665,7 @@ protected Repository instantiateRepository(final Configuration configuration, fi return instantiateRepository(configuration, klazz, repositoryModel.getProviderHint(), repositoryModel); } catch (Exception e) { + Throwables.propagateIfInstanceOf(e, ConfigurationException.class); throw new ConfigurationException("Cannot instantiate repository " + repositoryModel.getProviderRole() + ":" + repositoryModel.getProviderHint(), e); } diff --git a/plugins/basic/nexus-ui-extjs3-plugin/src/main/resources/static/js/repoServer/RepoEditPanel.js b/plugins/basic/nexus-ui-extjs3-plugin/src/main/resources/static/js/repoServer/RepoEditPanel.js index 98fb754ddc2..b0e8f4404ff 100644 --- a/plugins/basic/nexus-ui-extjs3-plugin/src/main/resources/static/js/repoServer/RepoEditPanel.js +++ b/plugins/basic/nexus-ui-extjs3-plugin/src/main/resources/static/js/repoServer/RepoEditPanel.js @@ -15,7 +15,7 @@ */ define('repoServer/RepoEditPanel',['Sonatype/all', 'Sonatype/strings'], function(Sonatype, Strings){ -var REPO_REMOTE_STORAGE_REGEXP = /(((^https?)|(^ftp)):\/\/((([\-\w]+\.)+\w{1,3}(\/[%\-\w]+(\.\w{1,})?)*(([\w\-\.\?\\\/+@&#;`~=%!]*)(\.\w{1,})?)*)|(localhost|LOCALHOST))\/?$)/i; +var REPO_REMOTE_STORAGE_REGEXP = /^(?:http|https|ftp):\/\//i; Sonatype.repoServer.AbstractRepositoryEditor = function(config) { var config = config || {}; diff --git a/plugins/restlet1x/nexus-restlet1x-plugin/src/main/java/org/sonatype/nexus/rest/repositories/RepositoryPlexusResource.java b/plugins/restlet1x/nexus-restlet1x-plugin/src/main/java/org/sonatype/nexus/rest/repositories/RepositoryPlexusResource.java index 308597b922b..2e164d5571a 100644 --- a/plugins/restlet1x/nexus-restlet1x-plugin/src/main/java/org/sonatype/nexus/rest/repositories/RepositoryPlexusResource.java +++ b/plugins/restlet1x/nexus-restlet1x-plugin/src/main/java/org/sonatype/nexus/rest/repositories/RepositoryPlexusResource.java @@ -26,9 +26,14 @@ import javax.ws.rs.Produces; import org.sonatype.configuration.ConfigurationException; +import org.sonatype.configuration.validation.InvalidConfigurationException; +import org.sonatype.configuration.validation.ValidationMessage; +import org.sonatype.configuration.validation.ValidationResponse; import org.sonatype.nexus.configuration.application.RepositoryDependentException; +import org.sonatype.nexus.configuration.validator.ApplicationValidationResponse; import org.sonatype.nexus.proxy.AccessDeniedException; import org.sonatype.nexus.proxy.NoSuchRepositoryException; +import org.sonatype.nexus.proxy.RemoteStorageException; import org.sonatype.nexus.proxy.StorageException; import org.sonatype.nexus.proxy.maven.ChecksumPolicy; import org.sonatype.nexus.proxy.maven.MavenProxyRepository; @@ -184,7 +189,14 @@ public Object put(Context context, Request request, Response response, Object pa if (repository.getRepositoryKind().isFacetAvailable(ProxyRepository.class)) { ProxyRepository proxyRepo = repository.adaptToFacet(ProxyRepository.class); - proxyRepo.setRemoteUrl(model.getRemoteStorage().getRemoteStorageUrl()); + try { + proxyRepo.setRemoteUrl(model.getRemoteStorage().getRemoteStorageUrl()); + } catch (RemoteStorageException e) { + ValidationResponse vr = new ApplicationValidationResponse(); + ValidationMessage error = new ValidationMessage("remoteStorageUrl", e.getMessage(), e.getMessage()); + vr.addValidationError(error); + throw new InvalidConfigurationException(vr); + } String oldPasswordForRemoteStorage = null; if (proxyRepo.getRemoteAuthenticationSettings() != null && UsernamePasswordRemoteAuthenticationSettings.class.isInstance(proxyRepo