com.subgraph.vega.ui.scanner.ScanExecutor.java Source code

Java tutorial

Introduction

Here is the source code for com.subgraph.vega.ui.scanner.ScanExecutor.java

Source

/*******************************************************************************
 * 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();
        }
    }
}