Remove duplicate JreProxySelector

Since we upgraded Aether we now have the native JreProxySelector
available so we don't need to keep a copy ourselves.
This commit is contained in:
Dave Syer 2014-05-22 17:51:13 +01:00
parent e1a2968899
commit 1e6a4f3f65
3 changed files with 2 additions and 160 deletions

View File

@ -24,6 +24,7 @@ import org.eclipse.aether.RepositorySystem;
import org.eclipse.aether.repository.LocalRepository;
import org.eclipse.aether.repository.LocalRepositoryManager;
import org.eclipse.aether.repository.ProxySelector;
import org.eclipse.aether.util.repository.JreProxySelector;
import org.springframework.util.StringUtils;
/**

View File

@ -1,160 +0,0 @@
/*
* Copyright 2012-2014 the original author or authors.
*
* Licensed 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.
*/
package org.springframework.boot.cli.compiler.grape;
import java.net.Authenticator;
import java.net.InetSocketAddress;
import java.net.PasswordAuthentication;
import java.net.SocketAddress;
import java.net.URI;
import java.net.URL;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import org.eclipse.aether.repository.Authentication;
import org.eclipse.aether.repository.AuthenticationContext;
import org.eclipse.aether.repository.AuthenticationDigest;
import org.eclipse.aether.repository.Proxy;
import org.eclipse.aether.repository.ProxySelector;
import org.eclipse.aether.repository.RemoteRepository;
/**
* (Copied from aether source code - not available yet in Maven repo.)
*
* @author Dave Syer
*/
public final class JreProxySelector implements ProxySelector {
/**
* Creates a new proxy selector that delegates to
* {@link java.net.ProxySelector#getDefault()}.
*/
public JreProxySelector() {
}
@Override
public Proxy getProxy(RemoteRepository repository) {
List<java.net.Proxy> proxies = null;
try {
URI uri = new URI(repository.getUrl()).parseServerAuthority();
proxies = java.net.ProxySelector.getDefault().select(uri);
}
catch (Exception ex) {
// URL invalid or not accepted by selector or no selector at all, simply use
// no proxy
}
if (proxies != null) {
for (java.net.Proxy proxy : proxies) {
if (java.net.Proxy.Type.DIRECT.equals(proxy.type())) {
break;
}
if (java.net.Proxy.Type.HTTP.equals(proxy.type())
&& isValid(proxy.address())) {
InetSocketAddress addr = (InetSocketAddress) proxy.address();
return new Proxy(Proxy.TYPE_HTTP, addr.getHostName(), addr.getPort(),
JreProxyAuthentication.INSTANCE);
}
}
}
return null;
}
private static boolean isValid(SocketAddress address) {
if (address instanceof InetSocketAddress) {
/*
* NOTE: On some platforms with java.net.useSystemProxies=true, unconfigured
* proxies show up as proxy objects with empty host and port 0.
*/
InetSocketAddress addr = (InetSocketAddress) address;
if (addr.getPort() <= 0) {
return false;
}
if (addr.getHostName() == null || addr.getHostName().length() <= 0) {
return false;
}
return true;
}
return false;
}
private static final class JreProxyAuthentication implements Authentication {
public static final Authentication INSTANCE = new JreProxyAuthentication();
@Override
public void fill(AuthenticationContext context, String key,
Map<String, String> data) {
Proxy proxy = context.getProxy();
if (proxy == null) {
return;
}
if (!AuthenticationContext.USERNAME.equals(key)
&& !AuthenticationContext.PASSWORD.equals(key)) {
return;
}
try {
URL url;
try {
url = new URL(context.getRepository().getUrl());
}
catch (Exception ex) {
url = null;
}
PasswordAuthentication auth = Authenticator
.requestPasswordAuthentication(proxy.getHost(), null,
proxy.getPort(), "http",
"Credentials for proxy " + proxy, null, url,
Authenticator.RequestorType.PROXY);
if (auth != null) {
context.put(AuthenticationContext.USERNAME, auth.getUserName());
context.put(AuthenticationContext.PASSWORD, auth.getPassword());
}
else {
context.put(AuthenticationContext.USERNAME,
System.getProperty("http.proxyUser"));
context.put(AuthenticationContext.PASSWORD,
System.getProperty("http.proxyPassword"));
}
}
catch (SecurityException ex) {
// oh well, let's hope the proxy can do without auth
}
}
@Override
public void digest(AuthenticationDigest digest) {
// we don't know anything about the JRE's current authenticator, assume the
// worst (i.e. interactive)
digest.update(UUID.randomUUID().toString());
}
@Override
public boolean equals(Object obj) {
return this == obj || (obj != null && getClass().equals(obj.getClass()));
}
@Override
public int hashCode() {
return getClass().hashCode();
}
}
}

View File

@ -24,6 +24,7 @@ import java.util.HashMap;
import java.util.Map;
import org.eclipse.aether.DefaultRepositorySystemSession;
import org.eclipse.aether.util.repository.JreProxySelector;
import org.junit.Test;
import org.springframework.boot.cli.compiler.DependencyResolutionContext;
import org.springframework.test.util.ReflectionTestUtils;