All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.parosproxy.paros.extension.option.OptionsParamView Maven / Gradle / Ivy

Go to download

The Zed Attack Proxy (ZAP) is an easy to use integrated penetration testing tool for finding vulnerabilities in web applications. It is designed to be used by people with a wide range of security experience and as such is ideal for developers and functional testers who are new to penetration testing. ZAP provides automated scanners as well as a set of tools that allow you to find security vulnerabilities manually.

There is a newer version: 2.15.0
Show newest version
/*
*
* Paros and its related class files.
* 
* Paros is an HTTP/HTTPS proxy for assessing web application security.
* Copyright (C) 2003-2004 Chinotec Technologies Company
* 
* This program is free software; you can redistribute it and/or
* modify it under the terms of the Clarified Artistic License
* as published by the Free Software Foundation.
* 
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* Clarified Artistic License for more details.
* 
* You should have received a copy of the Clarified Artistic License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
*/
// ZAP: 2011/06/02 Warn the first time the user double clicks on a tab
// ZAP: 2012/03/15 Removed the options of the http panels.
// ZAP: 2012/08/01 Issue 332: added support for Modes
// ZAP: 2013/01/25 Removed the "(non-Javadoc)" comments.
// ZAP: 2013/07/23 Issue 738: Options to hide tabs
// ZAP: 2013/12/13 Added support for optional names in tabs.
// ZAP: 2014/03/23 Issue 589: Move Reveal extension to ZAP extensions project
// ZAP: 2014/04/25 Issue 642: Add timestamps to Output tab(s)
// ZAP: 2014/10/07 Issue 1357: Hide unused tabs
// ZAP: 2014/10/09 Issue 1359: Options for splash screen
// ZAP: 2014/12/16 Issue 1466: Config option for 'large display' size
// ZAP: 2015/03/04 Added dev build warning option
// ZAP: 2016/04/04 Do not require a restart to show/hide the tool bar
// ZAP: 2016/04/06 Fix layouts' issues
// ZAP: 2016/04/27 Save, always, the Locale as String
// ZAP: 2016/05/13 Add options to confirm removal of exclude from proxy, scanner and spider regexes

package org.parosproxy.paros.extension.option;

import java.util.Locale;

import org.apache.commons.configuration.ConversionException;
import org.apache.log4j.Logger;
import org.parosproxy.paros.Constant;
import org.parosproxy.paros.common.AbstractParam;
import org.parosproxy.paros.control.Control.Mode;
import org.parosproxy.paros.view.WorkbenchPanel;
import org.zaproxy.zap.extension.httppanel.view.largerequest.LargeRequestUtil;
import org.zaproxy.zap.extension.httppanel.view.largeresponse.LargeResponseUtil;

// ZAP: Added support for selecting the locale

public class OptionsParamView extends AbstractParam {
	
	private static final Logger LOGGER = Logger.getLogger(OptionsParamView.class);

	private static final String DEFAULT_TIME_STAMP_FORMAT =  Constant.messages.getString("timestamp.format.default");
	
	public static final String BASE_VIEW_KEY = "view";

	private static final String SHOW_TEXT_ICONS = "view.showTabNames";
	private static final String PROCESS_IMAGES = "view.processImages";
	public static final String LOCALE = "view.locale";
	public static final String LOCALES = "view.locales";
	public static final String DISPLAY_OPTION = "view.displayOption";
	private static final String RESPONSE_PANEL_POS_KEY = BASE_VIEW_KEY + ".messagePanelsPosition.lastSelectedPosition";
	public static final String BRK_PANEL_VIEW_OPTION = "view.brkPanelView";
	public static final String SHOW_MAIN_TOOLBAR_OPTION = "view.showMainToolbar";
	public static final String DEFAULT_LOCALE = "en_GB";
	public static final String ADVANCEDUI_OPTION = "view.advancedview";
	public static final String WMUIHANDLING_OPTION = "view.uiWmHandling";
	public static final String ASKONEXIT_OPTION = "view.askOnExit";
	public static final String WARN_ON_TAB_DOUBLE_CLICK_OPTION = "view.warnOnTabDoubleClick";
	public static final String MODE_OPTION = "view.mode";
	public static final String TAB_PIN_OPTION = "view.tab.pin";
	public static final String OUTPUT_TAB_TIMESTAMPING_OPTION = "view.outputTabsTimeStampsOption"; 
	public static final String OUTPUT_TAB_TIMESTAMP_FORMAT = "view.outputTabsTimeStampsFormat"; 

	/**
	 * The configuration key used to save/load the option {@link #showLocalConnectRequests}.
	 */
	private static final String SHOW_LOCAL_CONNECT_REQUESTS = "view.showLocalConnectRequests";

	public static final String SPLASHSCREEN_OPTION = "view.splashScreen";
	public static final String LARGE_REQUEST_SIZE = "view.largeRequest";
	public static final String LARGE_RESPONSE_SIZE = "view.largeResponse";
	public static final String FONT_NAME = "view.fontName";
	public static final String FONT_SIZE = "view.fontSize";
	public static final String SCALE_IMAGES = "view.scaleImages";
	public static final String SHOW_DEV_WARNING = "view.showDevWarning";

    private static final String CONFIRM_REMOVE_PROXY_EXCLUDE_REGEX_KEY = "view.confirmRemoveProxyExcludeRegex";
    private static final String CONFIRM_REMOVE_SCANNER_EXCLUDE_REGEX_KEY = "view.confirmRemoveScannerExcludeRegex";
    private static final String CONFIRM_REMOVE_SPIDER_EXCLUDE_REGEX_KEY = "view.confirmRemoveSpiderExcludeRegex";

	private int advancedViewEnabled = 0;
	private int processImages = 0;
	private int showMainToolbar = 1;
	private String configLocale = "";
	private String locale = "";
	private int displayOption = 0;
	private String responsePanelPosition;
	private int brkPanelViewOption = 0;
	private int askOnExitEnabled = 1;
	private int wmUiHandlingEnabled = 0;
	private boolean warnOnTabDoubleClick = false;
    private boolean showTabNames = true;
	private String mode = Mode.standard.name();
	private boolean outputTabTimeStampingEnabled = false; 
	private String outputTabTimeStampFormat = DEFAULT_TIME_STAMP_FORMAT; 

	/**
	 * Flag that indicates if the HTTP CONNECT requests received by the local proxy should be (persisted and) shown in the UI.
	 * 
	 * @see #SHOW_LOCAL_CONNECT_REQUESTS
	 * @see #isShowLocalConnectRequests()
	 * @see #setShowLocalConnectRequests(boolean)
	 */
	private boolean showLocalConnectRequests;
	
    private boolean showSplashScreen = true;
    private int largeRequestSize = LargeRequestUtil.DEFAULT_MIN_CONTENT_LENGTH;
    private int largeResponseSize = LargeResponseUtil.DEFAULT_MIN_CONTENT_LENGTH;
    private int fontSize = -1;
    private String fontName = "";
    private boolean scaleImages = true;
    private boolean showDevWarning = true;

    private boolean confirmRemoveProxyExcludeRegex;
    private boolean confirmRemoveScannerExcludeRegex;
    private boolean confirmRemoveSpiderExcludeRegex;
	
    public OptionsParamView() {
    }

    @Override
	protected void parse() {
	    // use temp variable to check.  Exception will be flagged if any error.
      	showTabNames = getConfig().getBoolean(SHOW_TEXT_ICONS, true);
	    processImages = getConfig().getInt(PROCESS_IMAGES, 0);
	    configLocale = getConfig().getString(LOCALE, null);	// No default
	    locale = getConfig().getString(LOCALE, DEFAULT_LOCALE);
	    displayOption = getConfig().getInt(DISPLAY_OPTION, 0);
        responsePanelPosition = getConfig()
                .getString(RESPONSE_PANEL_POS_KEY, WorkbenchPanel.ResponsePanelPosition.TABS_SIDE_BY_SIDE.name());
	    brkPanelViewOption = getConfig().getInt(BRK_PANEL_VIEW_OPTION, 0);
	    showMainToolbar = getConfig().getInt(SHOW_MAIN_TOOLBAR_OPTION, 1);
	    advancedViewEnabled = getConfig().getInt(ADVANCEDUI_OPTION, 0);
	    wmUiHandlingEnabled = getConfig().getInt(WMUIHANDLING_OPTION, 0);
	    askOnExitEnabled = getConfig().getInt(ASKONEXIT_OPTION, 1);
	    warnOnTabDoubleClick = getConfig().getBoolean(WARN_ON_TAB_DOUBLE_CLICK_OPTION, true);
	    mode = getConfig().getString(MODE_OPTION, Mode.standard.name());
	    outputTabTimeStampingEnabled = getConfig().getBoolean(OUTPUT_TAB_TIMESTAMPING_OPTION, false); 
	    outputTabTimeStampFormat = getConfig().getString(OUTPUT_TAB_TIMESTAMP_FORMAT, DEFAULT_TIME_STAMP_FORMAT);

        try {
            showLocalConnectRequests = getConfig().getBoolean(SHOW_LOCAL_CONNECT_REQUESTS, false);
        } catch (ConversionException e) {
            LOGGER.error("Error while parsing config file: " + e.getMessage(), e);
        }

	    showSplashScreen = getConfig().getBoolean(SPLASHSCREEN_OPTION, true);
	    largeRequestSize = getConfig().getInteger(LARGE_REQUEST_SIZE, LargeRequestUtil.DEFAULT_MIN_CONTENT_LENGTH);
	    largeResponseSize = getConfig().getInteger(LARGE_RESPONSE_SIZE, LargeResponseUtil.DEFAULT_MIN_CONTENT_LENGTH);
	    fontSize = getConfig().getInteger(FONT_SIZE, -1);
	    fontName = getConfig().getString(FONT_NAME, "");
	    scaleImages = getConfig().getBoolean(SCALE_IMAGES, true);
	    showDevWarning = getConfig().getBoolean(SHOW_DEV_WARNING, true);
	    
	    // Special cases - set via static methods
	    LargeRequestUtil.setMinContentLength(largeRequestSize);
	    LargeResponseUtil.setMinContentLength(largeResponseSize);

        try {
            this.confirmRemoveProxyExcludeRegex = getConfig().getBoolean(CONFIRM_REMOVE_PROXY_EXCLUDE_REGEX_KEY, false);
        } catch (ConversionException e) {
            LOGGER.error("Error while parsing config file: " + e.getMessage(), e);
        }

        try {
            this.confirmRemoveScannerExcludeRegex = getConfig().getBoolean(CONFIRM_REMOVE_SCANNER_EXCLUDE_REGEX_KEY, false);
        } catch (ConversionException e) {
            LOGGER.error("Error while parsing config file: " + e.getMessage(), e);
        }

        try {
            this.confirmRemoveSpiderExcludeRegex = getConfig().getBoolean(CONFIRM_REMOVE_SPIDER_EXCLUDE_REGEX_KEY, false);
        } catch (ConversionException e) {
            LOGGER.error("Error while parsing config file: " + e.getMessage(), e);
        }
    }

	/**
	 * @return Returns the skipImage.
	 */
	public int getProcessImages() {
		return processImages;
	}
	
	/**
	 * @param processImages 0 = not to process.  Other = process images
	 * 
	 */
	public void setProcessImages(int processImages) {
		this.processImages = processImages;
		getConfig().setProperty(PROCESS_IMAGES, Integer.toString(processImages));
	}
	
	public boolean isProcessImages() {
		return !(processImages == 0);
	}
	
	/**
	 * @deprecated (2.5.0) Use {@link #isShowMainToolbar()} instead. It will be removed in a future release.
	 */
	@Deprecated
	@SuppressWarnings("javadoc")
	public int getShowMainToolbar() {
		return showMainToolbar;
	}
	
	/**
	 * Tells whether or not the main tool bar should be shown.
	 *
	 * @return {@code true} if the main tool bar should be shown, {@code false} otherwise.
	 * @since 2.5.0
	 */
	public boolean isShowMainToolbar() {
		return showMainToolbar != 0;
	}

	/**
	 * @deprecated (2.5.0) Use {@link #setShowMainToolbar(boolean)} instead. It will be removed in a future release.
	 */
	@Deprecated
	@SuppressWarnings("javadoc")
	public void setShowMainToolbar(int showMainToolbar) {
		setShowMainToolbar(showMainToolbar != 0);
	}

	/**
	 * Sets whether or not the main tool bar should be shown.
	 *
	 * @param show {@code true} if the main tool bar should be shown, {@code false} otherwise.
	 * @since 2.5.0
	 */
	public void setShowMainToolbar(boolean show) {
		this.showMainToolbar = show ? 1 : 0;
		getConfig().setProperty(SHOW_MAIN_TOOLBAR_OPTION, showMainToolbar);
	}

	
	/**
	 * @return the locale, which should be used. 
	 *         It will return a default value, if nothing was configured yet. 
	 *         Never null
	 * @see #getConfigLocale()
	 */
	public String getLocale() {
		return locale;
	}

	public void setLocale(String locale) {
		if (locale != null) {
			this.locale = locale;
			getConfig().setProperty(LOCALE, locale);
		}
	}
	
	public void setLocale(Locale locale) {
		if (locale != null) {
			StringBuilder sb = new StringBuilder();
			sb.append(locale.getLanguage());
			if (locale.getCountry().length() > 0) sb.append("_").append(locale.getCountry());
			if (locale.getVariant().length() > 0) sb.append("_").append(locale.getVariant());
			setLocale(sb.toString());
		}
	}

	/**
	 * @return The really configured locale, can be null
	 * @see #getLocale()
	 */
	public String getConfigLocale() {
		return configLocale;
	}

	public boolean getShowTabNames() {
		return showTabNames;
	}
	
	public void setShowTabNames(boolean showTabNames) {
		this.showTabNames = showTabNames;
		getConfig().setProperty(SHOW_TEXT_ICONS, showTabNames);
	}

	public int getBrkPanelViewOption() {
		return brkPanelViewOption;
	}
	
	public void setBrkPanelViewOption(int brkPanelViewIdx) {
		brkPanelViewOption = brkPanelViewIdx;
		getConfig().setProperty(BRK_PANEL_VIEW_OPTION, Integer.toString(brkPanelViewOption));
	}
	
	public int getDisplayOption() {
		return displayOption;
	}

	public void setDisplayOption(int displayOption) {
		this.displayOption = displayOption;
		getConfig().setProperty(DISPLAY_OPTION, Integer.toString(displayOption));
	}

	/**
	 * Gets the name of the current response panel position.
	 *
	 * @return the name of the current position
	 * @since 2.5.0
	 * @see org.parosproxy.paros.view.WorkbenchPanel.ResponsePanelPosition
	 */
	public String getResponsePanelPosition() {
		return responsePanelPosition;
	}

	/**
	 * Sets the name of the current response panel position.
	 * 
	 * @param position the name of the position
	 * @since 2.5.0
	 */
	public void setResponsePanelPosition(String position) {
		this.responsePanelPosition = position;
		getConfig().setProperty(RESPONSE_PANEL_POS_KEY, position);
	}
	
	public int getAdvancedViewOption() {
		return advancedViewEnabled;
	}
	
	public void setAdvancedViewOption(int isEnabled) {
		advancedViewEnabled = isEnabled;
		getConfig().setProperty(ADVANCEDUI_OPTION, Integer.toString(isEnabled));
	}

	public void setAskOnExitOption(int isEnabled) {
		askOnExitEnabled = isEnabled;
		getConfig().setProperty(ASKONEXIT_OPTION, Integer.toString(isEnabled));
	}

	public int getAskOnExitOption() {
		return askOnExitEnabled;
	}

	public void setWmUiHandlingOption(int isEnabled) {
		wmUiHandlingEnabled = isEnabled;
		getConfig().setProperty(WMUIHANDLING_OPTION, Integer.toString(isEnabled));
	}
	
	public int getWmUiHandlingOption() {
		return wmUiHandlingEnabled;
	}

	public boolean getWarnOnTabDoubleClick() {
		return warnOnTabDoubleClick;
	}

	public void setWarnOnTabDoubleClick(boolean warnOnTabDoubleClick) {
		this.warnOnTabDoubleClick = warnOnTabDoubleClick;
		getConfig().setProperty(WARN_ON_TAB_DOUBLE_CLICK_OPTION, warnOnTabDoubleClick);
	}

	public String getMode() {
		return mode;
	}

	public void setMode(String mode) {
		this.mode = mode;
		getConfig().setProperty(MODE_OPTION, mode);
	}
	
	public void setOutputTabTimeStampingEnabled(boolean enabled) {
		outputTabTimeStampingEnabled = enabled;
		getConfig().setProperty(OUTPUT_TAB_TIMESTAMPING_OPTION, enabled);
	}

	public boolean isOutputTabTimeStampingEnabled() {
		return outputTabTimeStampingEnabled;
	}
	
	public void setOutputTabTimeStampsFormat(String format) {
		outputTabTimeStampFormat = format;
		getConfig().setProperty(OUTPUT_TAB_TIMESTAMP_FORMAT, format);
	}

	public String getOutputTabTimeStampsFormat() {
		return outputTabTimeStampFormat;
	}

	/**
	 * Sets whether or not the HTTP CONNECT requests received by the local proxy should be (persisted and) shown in the UI.
	 *
	 * @param showConnectRequests {@code true} if the HTTP CONNECT requests should be shown, {@code false} otherwise
	 * @since 2.5.0
	 * @see #isShowLocalConnectRequests()
	 */
	public void setShowLocalConnectRequests(boolean showConnectRequests) {
		if (showLocalConnectRequests != showConnectRequests) {
			showLocalConnectRequests = showConnectRequests;
			getConfig().setProperty(SHOW_LOCAL_CONNECT_REQUESTS, showConnectRequests);
		}
	}

	/**
	 * Tells whether or not the HTTP CONNECT requests received by the local proxy should be (persisted and) shown in the UI.
	 * 

* The default is to not show the HTTP CONNECT requests. * * @return {@code true} if the HTTP CONNECT requests should be shown, {@code false} otherwise * @since 2.5.0 * @see #setShowLocalConnectRequests(boolean) */ public boolean isShowLocalConnectRequests() { return showLocalConnectRequests; } public boolean isShowSplashScreen() { return showSplashScreen; } public void setShowSplashScreen(boolean showSplashScreen) { this.showSplashScreen = showSplashScreen; getConfig().setProperty(SPLASHSCREEN_OPTION, showSplashScreen); } public int getLargeRequestSize() { return largeRequestSize; } public void setLargeRequestSize(int largeRequestSize) { this.largeRequestSize = largeRequestSize; LargeRequestUtil.setMinContentLength(largeRequestSize); getConfig().setProperty(LARGE_REQUEST_SIZE, largeRequestSize); } public int getLargeResponseSize() { return largeResponseSize; } public void setLargeResponseSize(int largeResponseSize) { this.largeResponseSize = largeResponseSize; LargeResponseUtil.setMinContentLength(largeResponseSize); getConfig().setProperty(LARGE_RESPONSE_SIZE, largeResponseSize); } public int getFontSize() { return fontSize; } public void setFontSize(int fontSize) { this.fontSize = fontSize; getConfig().setProperty(FONT_SIZE, fontSize); } public String getFontName() { return this.fontName; } public void setFontName(String fontName) { this.fontName = fontName; getConfig().setProperty(FONT_NAME, fontName); } public boolean isScaleImages() { return scaleImages; } public void setScaleImages(boolean scaleImages) { this.scaleImages = scaleImages; getConfig().setProperty(SCALE_IMAGES, scaleImages); } public boolean isShowDevWarning() { return showDevWarning; } public void setShowDevWarning(boolean showDevWarning) { this.showDevWarning = showDevWarning; getConfig().setProperty(SHOW_DEV_WARNING, showDevWarning); } public boolean isConfirmRemoveProxyExcludeRegex() { return this.confirmRemoveProxyExcludeRegex; } public void setConfirmRemoveProxyExcludeRegex(boolean confirmRemove) { this.confirmRemoveProxyExcludeRegex = confirmRemove; getConfig().setProperty(CONFIRM_REMOVE_PROXY_EXCLUDE_REGEX_KEY, Boolean.valueOf(confirmRemove)); } public boolean isConfirmRemoveScannerExcludeRegex() { return this.confirmRemoveScannerExcludeRegex; } public void setConfirmRemoveScannerExcludeRegex(boolean confirmRemove) { this.confirmRemoveScannerExcludeRegex = confirmRemove; getConfig().setProperty(CONFIRM_REMOVE_SCANNER_EXCLUDE_REGEX_KEY, Boolean.valueOf(confirmRemove)); } public boolean isConfirmRemoveSpiderExcludeRegex() { return this.confirmRemoveSpiderExcludeRegex; } public void setConfirmRemoveSpiderExcludeRegex(boolean confirmRemove) { this.confirmRemoveSpiderExcludeRegex = confirmRemove; getConfig().setProperty(CONFIRM_REMOVE_SPIDER_EXCLUDE_REGEX_KEY, Boolean.valueOf(confirmRemove)); } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy