org.parosproxy.paros.view.SessionDialog Maven / Gradle / Ivy
Show all versions of zap Show documentation
/*
*
* 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: 2012/08/29 Issue 250 Support for authentication management (enlarged window size)
// ZAP: 2013/03/03 Issue 547: Deprecate unused classes and methods
// ZAP: 2013/08/21 Introduced support for shared UI Contexts for Context Property panels
// ZAP: 2013/08/27 Issue 772: Restructuring of Saving/Loading Context Data
// ZAP: 2016/10/26 Initialise the panels when added to the dialogue, if shown
package org.parosproxy.paros.view;
import java.awt.Frame;
import java.awt.HeadlessException;
import java.util.HashMap;
import java.util.Map;
import org.parosproxy.paros.model.Model;
import org.parosproxy.paros.model.Session;
import org.zaproxy.zap.model.Context;
import org.zaproxy.zap.view.AbstractContextPropertiesPanel;
public class SessionDialog extends AbstractParamDialog {
private static final long serialVersionUID = 2078860056416521552L;
/** The map of duplicate of the contexts, used for temporary changes in the UI. */
private Map uiContexts = new HashMap<>();
/**
* The session currently shown in the dialogue, {@code null} if the dialogue is not visible.
*/
private Session session;
public SessionDialog() {
super();
initialize();
}
/**
* @deprecated No longer used/needed. It will be removed in a future release. Use the
* constructor
* {@link #SessionDialog(Frame parent, boolean modal, String title, String rootName)}
* instead.
*/
@Deprecated
public SessionDialog(Frame parent, boolean modal, String title) throws HeadlessException {
super(parent, modal, title, "Session");
initialize();
}
public SessionDialog(Frame parent, boolean modal, String title, String rootName) {
super(parent, modal, title, rootName);
initialize();
}
/**
* This method initializes this dialog.
*/
private void initialize() {
if (Model.getSingleton().getOptionsParam().getViewParam().getWmUiHandlingOption() == 0) {
this.setSize(650, 500);
} else {
pack();
}
}
@Override
public void addParamPanel(String[] parentParams, String name, AbstractParamPanel panel, boolean sort) {
super.addParamPanel(parentParams, name, panel, sort);
if (session != null) {
if (panel instanceof AbstractContextPropertiesPanel) {
initContextPanel((AbstractContextPropertiesPanel) panel);
} else {
panel.initParam(session);
}
}
}
/**
* {@inheritDoc}
*
* Note: Creation of UI Shared Contexts should be done before calling this method.
*
* @see #recreateUISharedContexts(Session)
*/
@Override
public void initParam(Object session) {
super.initParam(session);
this.session = (Session) session;
for (AbstractParamPanel panel : super.getPanels()) {
if (panel instanceof AbstractContextPropertiesPanel) {
initContextPanel((AbstractContextPropertiesPanel) panel);
}
}
}
/**
* Initialises the given panel with the current session and the corresponding UI shared context.
*
* @param contextPanel the context panel to initialise
* @see AbstractContextPropertiesPanel#initContextData(Session, Context)
*/
private void initContextPanel(AbstractContextPropertiesPanel contextPanel) {
Context ctx = uiContexts.get(contextPanel.getContextIndex());
if (ctx != null) {
contextPanel.initContextData(session, ctx);
}
}
@Override
public void saveParam() throws Exception {
super.saveParam();
Model.getSingleton().getSession().saveAllContexts();
}
@Override
public void setVisible(boolean show) {
super.setVisible(show);
if (!show && session != null) {
session = null;
uiContexts.clear();
}
}
/**
* Reset the UI shared Context copies. The effect is that previous copies are discarded and new
* copies are created.
*
* @param session the session
*/
public void recreateUISharedContexts(Session session) {
uiContexts.clear();
for (Context context : session.getContexts()) {
Context uiContext = context.duplicate();
uiContexts.put(context.getIndex(), uiContext);
}
}
/**
* Creates the UI shared context for the given context.
*
* Should be called when a new context is added to the session and before adding its panels.
*
* @param context the context
* @since 2.6.0
*/
public void createUISharedContext(Context context) {
if (session != null) {
uiContexts.put(context.getIndex(), context.duplicate());
}
}
/**
* Gets the UI shared context copy for a given context index.
*
* @param contextId the context index
* @return the uI shared context
*/
public Context getUISharedContext(int contextId) {
return uiContexts.get(contextId);
}
}