package com.intuit.tank.jenkins.proxy; /* * #%L * Intuit Tank Jenkins Plugin * %% * Copyright (C) 2011 - 2015 Intuit Inc. * %% * 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 * #L% */ import hudson.FilePath; import java.io.File; import java.io.PrintStream; import java.io.Serializable; import java.security.Security; import org.bouncycastle.jce.provider.BouncyCastleProvider; import com.intuit.tank.conversation.Request; import com.intuit.tank.jenkins.callables.ProxyRequest; import com.intuit.tank.jenkins.printer.LogPrinter; import com.intuit.tank.proxy.EmbeddedProxy; import com.intuit.tank.proxy.config.FixedProxyConfiguration; import com.intuit.tank.proxy.config.ProxyConfiguration; /** * This is a 'wrapper' class for the Tank Proxy Recorder. It allows us to more * simply interact with our proxy. * * @author bfiola * */ public class ProxyWrapper implements Serializable { private static final long serialVersionUID = 1L; private EmbeddedProxy proxy; private ProxyConfiguration config; private String ownerId; private Integer proxyPort; private FilePath workspacePath; private PrintStream logger; public ProxyWrapper(ProxyRequest request) { this.logger = request.getLogger(); this.ownerId = request.getBuildId(); this.proxyPort = request.getProxyPort(); this.workspacePath = request.getWorkspacePath(); } public String getOwnerId() { return this.ownerId; } private void initializeProxy() { Security.addProvider(new BouncyCastleProvider()); File certAuthority = new File(workspacePath + "/auto_generated_ca.p12"); if (!certAuthority.exists()) { generateCertificate(certAuthority); } File tankScript = new File(workspacePath + "/tank-script.xml"); if(tankScript.exists()) { LogPrinter.print("Tank Script found in workspace, deleting", logger); boolean deleted = tankScript.delete(); LogPrinter.print("Tank Script Deleted? " + deleted, logger); } FixedProxyConfiguration config = new FixedProxyConfiguration(proxyPort, tankScript.getAbsolutePath()); config.setCertificateAuthorityPath(certAuthority.getAbsolutePath()); this.config = config; proxy = new EmbeddedProxy(config); } public void startProxy() { try { initializeProxy(); Thread.currentThread().setContextClassLoader( Request.class.getClassLoader()); LogPrinter.print("Proxy received start request - starting.", logger); proxy.start(); } catch (Exception e) { throw new RuntimeException(e); } } public void stopProxy() { try { LogPrinter.print("Proxy received stop request - stopping.", logger); proxy.stop(); } catch (Exception e) { throw new RuntimeException(e); } } public File getOutputFile() { return new File(config.getOutputFile()); } public static boolean generateCertificate(File filePath) { try { EmbeddedProxy.generateKeystore(filePath); return true; } catch (Exception e) { throw new RuntimeException(e); } } }