package org.zaproxy.zap.view; import java.awt.CardLayout; import java.awt.GridBagLayout; import javax.swing.JCheckBox; import javax.swing.JLabel; import javax.swing.JPanel; import org.parosproxy.paros.Constant; import org.parosproxy.paros.model.Model; import org.parosproxy.paros.model.Session; import org.parosproxy.paros.view.View; import org.zaproxy.zap.model.Context; import org.zaproxy.zap.model.IllegalContextNameException; import org.zaproxy.zap.utils.ZapTextArea; import org.zaproxy.zap.utils.ZapTextField; public class ContextGeneralPanel extends AbstractContextPropertiesPanel { private static final long serialVersionUID = -8337361808959321380L; private JPanel panelContext = null; private ZapTextField txtName = null; private ZapTextArea txtDescription = null; private JCheckBox chkInScope = null; public static String getPanelName(Context ctx) { return getPanelName(ctx.getIndex(), ctx.getName()); } public static String getPanelName(int index, String name) { return index + ":" + name; } /** * Constructs a {@code ContextGeneralPanel} for the given context. * * @param name the name of the panel * @param contextId the context id */ public ContextGeneralPanel(String name, int contextId) { super(contextId); this.setName(name); this.setLayout(new CardLayout()); this.add(getPanelSession(), this.getName() + "gen"); } @Override public void setName(String name) { if (name.startsWith(this.getContextIndex() + ":")) { name = name.substring(name.indexOf(":")+1); } super.setName(getPanelName(this.getContextIndex(), name)); } /** * This method initializes panelSession * * @return javax.swing.JPanel */ private JPanel getPanelSession() { if (panelContext == null) { panelContext = new JPanel(); panelContext.setLayout(new GridBagLayout()); if (Model.getSingleton().getOptionsParam().getViewParam().getWmUiHandlingOption() == 0) { panelContext.setSize(180, 101); } panelContext.add(new JLabel(Constant.messages.getString("context.label.name")), LayoutHelper.getGBC(0, 0, 1, 1.0D)); panelContext.add(getTxtName(), LayoutHelper.getGBC(0, 1, 1, 1.0D)); panelContext.add(getChkInScope(), LayoutHelper.getGBC(0, 2, 2, 1.0D)); panelContext.add(new JLabel(Constant.messages.getString("context.label.desc")), LayoutHelper.getGBC(0, 3, 1, 1.0D)); panelContext.add(getTxtDescription(), LayoutHelper.getGBC(0, 4, 1, 1.0D, 1.0D)); } return panelContext; } /** * This method initializes txtSessionName * * @return org.zaproxy.zap.utils.ZapTextField */ private ZapTextField getTxtName() { if (txtName == null) { txtName = new ZapTextField(); } return txtName; } private JCheckBox getChkInScope() { if (chkInScope == null) { chkInScope = new JCheckBox(); chkInScope.setText(Constant.messages.getString("context.inscope.label")); } return chkInScope; } /** * This method initializes txtDescription * * @return org.zaproxy.zap.utils.ZapTextArea */ private ZapTextArea getTxtDescription() { if (txtDescription == null) { txtDescription = new ZapTextArea(); txtDescription.setBorder(javax.swing.BorderFactory .createBevelBorder(javax.swing.border.BevelBorder.LOWERED)); txtDescription.setLineWrap(true); } return txtDescription; } @Override public String getHelpIndex() { return "ui.dialogs.contexts"; } @Override public void initContextData(Session session, Context uiSharedContext) { getTxtName().setText(uiSharedContext.getName()); getTxtName().discardAllEdits(); getTxtDescription().setText(uiSharedContext.getDescription()); getTxtDescription().discardAllEdits(); getChkInScope().setSelected(uiSharedContext.isInScope()); if (uiSharedContext.getName().equals(Integer.toString(uiSharedContext.getIndex())) && uiSharedContext.getIncludeInContextRegexs().size() == 1) { // Default to the host name in the first and only regex String firstRegex = uiSharedContext.getIncludeInContextRegexs().get(0); int startIndex = firstRegex.indexOf("://"); if (startIndex > 0) { String hostPlus = firstRegex.substring(startIndex + 3); int endIndex = hostPlus.indexOf("\\"); if (endIndex > 0) { // By default regexes end in \E hostPlus = hostPlus.substring(0, endIndex); } endIndex = hostPlus.indexOf("/"); if (endIndex > 0) { hostPlus = hostPlus.substring(0, endIndex); } getTxtName().setText(hostPlus); } } } @Override public void validateContextData(Session session) throws Exception { String name = getTxtName().getText(); if (name == null || name.isEmpty()) { throw new IllegalContextNameException( IllegalContextNameException.Reason.EMPTY_NAME, Constant.messages.getString("context.error.name.empty")); } if (!this.getName().equals(getPanelName(this.getContextIndex(), name)) && session.getContext(name) != null) { throw new IllegalContextNameException( IllegalContextNameException.Reason.DUPLICATED_NAME, Constant.messages.getString("context.error.name.duplicated")); } } @Override public void saveContextData(Session session) { Context context = session.getContext(this.getContextIndex()); saveDataInContext(context); String name = getTxtName().getText(); if (!this.getName().equals(getPanelName(this.getContextIndex(), name)) && View.isInitialised()) { View.getSingleton().renameContext(context); } } @Override public void saveTemporaryContextData(Context uiSharedContext) { saveDataInContext(uiSharedContext); } private void saveDataInContext(Context context){ context.setName(getTxtName().getText()); context.setDescription(getTxtDescription().getText()); context.setInScope(getChkInScope().isSelected()); } }