/* * * 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/10/29 Support for parameters // ZAP: 2011/11/02 Added brute force options // ZAP: 2011/11/15 Removed the getConfig method and the config field, now it's // used the method of the base class. // ZAP: 2012/04/23 Added @Override annotation to the appropriate method. // ZAP: 2012/04/25 Added type argument to generic type. // ZAP: 2012/05/03 Changed the type of one variable in the method getParamSet. // ZAP: 2012/06/30 Added the instance variable databaseParam and the method // getDatabaseParam() and changed the method parse() to also load the database // configurations. // ZAP: 2012/12/31 Removed brute force options // ZAP: 2013/01/16 Issue 453: Dynamic loading and unloading of add-ons // ZAP: 2013/01/23 Clean up of exception handling/logging. // ZAP: 2013/01/25 Removed the "(non-Javadoc)" comments. // ZAP: 2013/03/03 Issue 546: Remove all template Javadoc comments // ZAP: 2014-02-04 Added GlobalExcludeURL functionality: Issue: TODO - insert list here. // ZAP: 2014/03/23 Issue 1097: Move "Run applications" (invoke) extension to zap-extensions project // ZAP: 2015/04/09 Generify getParamSet(Class) to avoid unnecessary casts // ZAP: 2016/11/17 Issue 2701 Support Factory Reset // ZAP: 2016/12/06 Add ExtensionParam package org.parosproxy.paros.model; import java.io.File; import java.util.HashMap; import java.util.Map; import java.util.Vector; import org.apache.commons.configuration.ConfigurationException; import org.apache.log4j.Logger; import org.parosproxy.paros.common.AbstractParam; import org.parosproxy.paros.core.proxy.ProxyParam; import org.parosproxy.paros.extension.option.DatabaseParam; import org.parosproxy.paros.extension.option.OptionsParamCertificate; import org.parosproxy.paros.extension.option.OptionsParamView; import org.parosproxy.paros.network.ConnectionParam; // ZAP: new imports import org.zaproxy.zap.extension.anticsrf.AntiCsrfParam; import org.zaproxy.zap.extension.api.OptionsParamApi; import org.zaproxy.zap.extension.autoupdate.OptionsParamCheckForUpdates; import org.zaproxy.zap.extension.ext.ExtensionParam; import org.zaproxy.zap.extension.globalexcludeurl.GlobalExcludeURLParam; import ch.csnc.extension.util.OptionsParamExperimentalSliSupport; public class OptionsParam extends AbstractParam { private static final Logger logger = Logger.getLogger(OptionsParam.class); // private static final String ROOT = "Options"; // ZAP: User directory now stored in the config file private static final String USER_DIR = "userDir"; private ProxyParam proxyParam = new ProxyParam(); private ConnectionParam connectionParam = new ConnectionParam(); private OptionsParamView viewParam = new OptionsParamView(); private OptionsParamCertificate certificateParam = new OptionsParamCertificate(); // ZAP: Added many instance variables for new functionality. private OptionsParamCheckForUpdates checkForUpdatesParam = new OptionsParamCheckForUpdates(); private AntiCsrfParam antiCsrfParam = new AntiCsrfParam(); private OptionsParamApi apiParam = new OptionsParamApi(); private GlobalExcludeURLParam globalExcludeURLParam = new GlobalExcludeURLParam(); private OptionsParamExperimentalSliSupport experimentalFeatuesParam = new OptionsParamExperimentalSliSupport(); /** * The database configurations. */ // ZAP: Added the instance variable. private DatabaseParam databaseParam = new DatabaseParam(); private ExtensionParam extensionParam = new ExtensionParam(); private Vector<AbstractParam> paramSetList = new Vector<>(); private Map<Class<? extends AbstractParam>, AbstractParam> abstractParamsMap = new HashMap<>(); private boolean gui = true; private File userDirectory = null; public OptionsParam() { } /** * @return Returns the connectionParam. */ public ConnectionParam getConnectionParam() { return connectionParam; } /** * @return Returns the proxyParam. */ public ProxyParam getProxyParam() { return proxyParam; } /** * @param proxyParam The proxyParam to set. */ public void setProxyParam(ProxyParam proxyParam) { this.proxyParam = proxyParam; } /** * @param connectionParam The connectionParam to set. */ public void setConnectionParam(ConnectionParam connectionParam) { this.connectionParam = connectionParam; } /** * @param viewParam The viewParam to set. */ public void setViewParam(OptionsParamView viewParam) { this.viewParam = viewParam; } /** * @return Returns the viewParam. */ public OptionsParamView getViewParam() { return viewParam; } /** * @return Returns the viewParam. */ public OptionsParamCheckForUpdates getCheckForUpdatesParam() { return checkForUpdatesParam; } /** * @param certificateParam The certificateParam to set. */ public void setCertificateParam(OptionsParamCertificate certificateParam) { this.certificateParam = certificateParam; } /** * @return Returns the certificateParam. */ public OptionsParamCertificate getCertificateParam() { return certificateParam; } public void addParamSet(AbstractParam paramSet) { paramSetList.add(paramSet); abstractParamsMap.put(paramSet.getClass(), paramSet); paramSet.load(getConfig()); } public void removeParamSet(AbstractParam paramSet) { paramSetList.remove(paramSet); abstractParamsMap.remove(paramSet.getClass()); } public <T extends AbstractParam> T getParamSet(Class<T> clazz) { if (clazz != null) { AbstractParam abstractParam = abstractParamsMap.get(clazz); if (abstractParam != null) { return clazz.cast(abstractParam); } } return null; } // ZAP: Removed the method getConfig(). @Override protected void parse() { getConnectionParam().load(getConfig()); getProxyParam().load(getConfig()); getCertificateParam().load(getConfig()); getViewParam().load(getConfig()); getCheckForUpdatesParam().load(getConfig()); getAntiCsrfParam().load(getConfig()); getApiParam().load(getConfig()); getGlobalExcludeURLParam().load(getConfig()); getExperimentalFeaturesParam().load(getConfig()); getDatabaseParam().load(getConfig()); getExtensionParam().load(getConfig()); String userDir = null; try { userDir = getConfig().getString(USER_DIR); if (userDir != null) { this.userDirectory = new File(userDir); } } catch (Exception e) { // In a previous release the userdir was set as a file try { File file = (File) getConfig().getProperty(USER_DIR); if (file != null && file.isDirectory()) { this.userDirectory = file; } } catch (Exception e1) { logger.error(e1.getMessage(), e1); } } } public void reloadConfigParamSets() { for (int i=0; i<paramSetList.size(); i++) { paramSetList.get(i).load(getConfig()); } } public void resetAll() { for (int i=0; i<paramSetList.size(); i++) { paramSetList.get(i).reset(); } } public boolean isGUI() { return gui; } public void setGUI(boolean gui) { this.gui = gui; } /** * @return Returns the currentFolder. */ public File getUserDirectory() { return userDirectory; } /** * @param currentDirectory The currentFolder to set. */ public void setUserDirectory(File currentDirectory) { this.userDirectory = currentDirectory; // ZAP: User directory now stored in the config file getConfig().setProperty(USER_DIR, currentDirectory.getAbsolutePath()); try { getConfig().save(); } catch (ConfigurationException e) { logger.error(e.getMessage(), e); } } public AntiCsrfParam getAntiCsrfParam() { return antiCsrfParam; } // ZAP: Added getter. public GlobalExcludeURLParam getGlobalExcludeURLParam() { return globalExcludeURLParam; } public OptionsParamApi getApiParam() { return apiParam; } public OptionsParamExperimentalSliSupport getExperimentalFeaturesParam() { return experimentalFeatuesParam; } /** * Gets the database configurations. * * @return the database configurations */ // ZAP: Added the method. public DatabaseParam getDatabaseParam() { return databaseParam; } /** * Gets the extensions' enabled state configurations. * * @return the extensions' enabled state configurations. * @since 2.6.0 */ public ExtensionParam getExtensionParam() { return extensionParam; } }