blob: b1f6b320f0595274afff36f25c60793e56ba61d3 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2008, 2012 Sonatype Inc. and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Sonatype Inc. - initial API and implementation
*******************************************************************************/
package org.eclipse.tycho.osgi.configuration;
import java.util.Locale;
import org.apache.maven.execution.MavenSession;
import org.apache.maven.plugin.LegacySupport;
import org.apache.maven.settings.Proxy;
import org.apache.maven.settings.crypto.SettingsDecryptionResult;
import org.codehaus.plexus.component.annotations.Component;
import org.codehaus.plexus.component.annotations.Requirement;
import org.codehaus.plexus.logging.Logger;
import org.eclipse.sisu.equinox.embedder.EmbeddedEquinox;
import org.eclipse.sisu.equinox.embedder.EquinoxLifecycleListener;
import org.eclipse.tycho.core.shared.ProxyServiceFacade;
@Component(role = EquinoxLifecycleListener.class, hint = "P2ProxyConfigurator")
public class OSGiProxyConfigurator extends EquinoxLifecycleListener {
@Requirement
protected Logger logger;
@Requirement
protected LegacySupport context;
@Requirement
protected SettingsDecrypterHelper decrypter;
@Override
public void afterFrameworkStarted(EmbeddedEquinox framework) {
MavenSession session = context.getSession();
ProxyServiceFacade proxyService = framework.getServiceFactory().getService(ProxyServiceFacade.class);
// make sure there is no old state from previous aborted builds
clearProxyConfiguration(proxyService);
for (Proxy proxy : session.getSettings().getProxies()) {
if (proxy.isActive()) {
setProxy(proxyService, proxy);
}
}
}
private void clearProxyConfiguration(ProxyServiceFacade proxyService) {
logger.debug("Clearing proxy settings in OSGi runtime");
proxyService.clearPersistentProxySettings();
}
private void setProxy(ProxyServiceFacade proxyService, Proxy proxy) {
String protocol = proxy.getProtocol();
if (isSupportedProtocol(protocol)) {
SettingsDecryptionResult result = decrypter.decryptAndLogProblems(proxy);
proxy = result.getProxy();
logger.debug("Configuring proxy for protocol " + protocol + ": host=" + proxy.getHost() + ", port="
+ proxy.getPort() + ", nonProxyHosts=" + proxy.getNonProxyHosts());
proxyService.configureProxy(protocol, proxy.getHost(), proxy.getPort(), proxy.getUsername(),
proxy.getPassword(), proxy.getNonProxyHosts());
} else {
logger.debug("Ignoring proxy configuration for unsupported protocol: '" + protocol + "'");
}
}
private boolean isSupportedProtocol(String protocol) {
if (protocol == null) {
return false;
}
protocol = protocol.trim().toLowerCase(Locale.ENGLISH);
if ("http".equals(protocol) || "https".equals(protocol) || "socks4".equals(protocol)
|| "socks_5".equals(protocol)) {
return true;
}
return false;
}
}