/******************************************************************************* * Copyright (c) 2011 Subgraph. * 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: * Subgraph - initial API and implementation ******************************************************************************/ package com.subgraph.vega.ui.scanner; import java.net.HttpCookie; import java.net.URI; import java.util.ArrayList; import java.util.Calendar; import java.util.List; import org.apache.http.cookie.Cookie; import org.apache.http.impl.cookie.BasicClientCookie; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.wizard.WizardDialog; import org.eclipse.swt.widgets.Shell; import com.subgraph.vega.api.scanner.IScanner; import com.subgraph.vega.api.scanner.IScannerConfig; import com.subgraph.vega.ui.scanner.wizards.NewScanWizard; import com.subgraph.vega.ui.scanner.wizards.NewWizardDialog; public class ScanExecutor { public String runScan(Shell shell, String target) { final IScanner scanner = Activator.getDefault().getScanner(); NewScanWizard wizard = new NewScanWizard(); if(target != null) { wizard.setTargetField(target); } wizard.setScannerModules(scanner.getAllModules()); WizardDialog dialog = new NewWizardDialog(shell, wizard); if(dialog.open() == IDialogConstants.OK_ID) { if(wizard.isDomTest()) { runDomTest(); return null; } return maybeLaunchScanFromWizard(shell, wizard, scanner); } return null; } private String maybeLaunchScanFromWizard(Shell shell, NewScanWizard wizard, IScanner scanner) { URI targetURI = wizard.getScanHostURI(); if(targetURI == null) { return null; } scanner.lock(); final IScannerConfig config = scanner.createScannerConfig(); config.setBaseURI(targetURI); config.setCookieList(getCookieList(wizard.getCookieStringList(), targetURI)); config.setBasicUsername(wizard.getBasicUsername()); config.setBasicPassword(wizard.getBasicPassword()); config.setBasicRealm(wizard.getBasicRealm()); config.setBasicDomain(wizard.getBasicDomain()); config.setExclusions(wizard.getExclusions()); config.setNtlmUsername(wizard.getNtlmUsername()); config.setNtlmPassword(wizard.getNtlmPassword()); final IPreferenceStore preferences = Activator.getDefault().getPreferenceStore(); config.setLogAllRequests(preferences.getBoolean("LogAllRequests")); config.setDisplayDebugOutput(preferences.getBoolean("DisplayDebugOutput")); config.setMaxRequestsPerSecond(preferences.getInt("MaxRequestsPerSecond")); config.setMaxDescendants(preferences.getInt("MaxScanDescendants")); config.setMaxChildren(preferences.getInt("MaxScanChildren")); config.setMaxDepth(preferences.getInt("MaxScanDepth")); config.setMaxDuplicatePaths(preferences.getInt("MaxScanDuplicatePaths")); config.setMaxResponseKilobytes(preferences.getInt("MaxResponseLength")); final Thread probeThread = new Thread(new ScanProbeTask(shell, targetURI, scanner, config)); probeThread.start(); return wizard.getTargetField(); } // gross hack private List<Cookie> getCookieList(List<String> cookieStringList, URI uri) { if (cookieStringList.size() != 0) { ArrayList<Cookie> cookieList = new ArrayList<Cookie>(cookieStringList.size()); for (String cookieString: cookieStringList) { List<HttpCookie> parseList = HttpCookie.parse(cookieString); for (HttpCookie cookie: parseList) { BasicClientCookie cp = new BasicClientCookie(cookie.getName(), cookie.getValue()); cp.setComment(cookie.getComment()); if (cookie.getDomain() != null) { cp.setDomain(cookie.getDomain()); } else { // just set it to the target host for now - may need something slightly less specific cp.setDomain(uri.getHost()); } long maxAge = cookie.getMaxAge(); if (maxAge > 0) { Calendar calendar = Calendar.getInstance(); calendar.add(Calendar.SECOND, (int) maxAge); cp.setExpiryDate(calendar.getTime()); } cp.setPath(cookie.getPath()); cp.setSecure(cookie.getSecure()); cp.setVersion(cookie.getVersion()); cookieList.add(cp); } } return cookieList; } return null; } private void runDomTest() { IScanner scanner = Activator.getDefault().getScanner(); if(scanner != null) { scanner.runDomTests(); } } }