/*
* SoapUI, Copyright (C) 2004-2016 SmartBear Software
*
* Licensed under the EUPL, Version 1.1 or - as soon as they will be approved by the European Commission - subsequent
* versions of the EUPL (the "Licence");
* You may not use this work except in compliance with the Licence.
* You may obtain a copy of the Licence at:
*
* http://ec.europa.eu/idabc/eupl
*
* Unless required by applicable law or agreed to in writing, software distributed under the Licence is
* distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
* express or implied. See the Licence for the specific language governing permissions and limitations
* under the Licence.
*/
package com.eviware.soapui.security.ui;
import com.eviware.soapui.security.scan.XmlBombSecurityScan;
import com.eviware.soapui.support.UISupport;
import com.eviware.soapui.support.components.JXToolBar;
import com.eviware.soapui.support.components.SimpleForm;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.BorderFactory;
import javax.swing.JCheckBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.List;
@SuppressWarnings("serial")
public class XmlBombSecurityScanConfigPanel extends JPanel {
private static final String ATTACHMENT_PREFIX_FIELD = "Attachment Prefix Field";
private static final String ENABLE_ATTACHMENT_FIELD = "Send bomb as attachment";
private List<String> xmlBombList;
private JTextArea attachementArea;
private int xmlBombPosition = -1;
private PreviousAttachement previous;
private NextAttachement next;
private JLabel current;
private JLabel max;
protected int internalPosition;
protected int externalPosition;
private SimpleForm form;
private XmlBombSecurityScan xmlChk;
public XmlBombSecurityScanConfigPanel(XmlBombSecurityScan xmlCheck) {
super(new BorderLayout());
this.xmlChk = xmlCheck;
this.xmlBombList = xmlCheck.getXmlBombList();
form = new SimpleForm();
form.setBorder(BorderFactory.createEmptyBorder(3, 0, 0, 3));
form.addSpace(5);
form.addComponent(new JLabel("Xml Bomb Attacments"));
JCheckBox attachXml = form.appendCheckBox(ENABLE_ATTACHMENT_FIELD, null, xmlCheck.isAttachXmlBomb());
attachXml.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent arg0) {
form.getComponent(ATTACHMENT_PREFIX_FIELD).setEnabled(
((JCheckBox) form.getComponent(ENABLE_ATTACHMENT_FIELD)).isSelected());
xmlChk.setAttachXmlBomb(((JCheckBox) form.getComponent(ENABLE_ATTACHMENT_FIELD)).isSelected());
}
});
JTextField attachmentPrefixField = form.appendTextField(ATTACHMENT_PREFIX_FIELD, "Attachment Prefix Field");
attachmentPrefixField.setMaximumSize(new Dimension(80, 10));
attachmentPrefixField.setColumns(20);
attachmentPrefixField.setText(xmlCheck.getAttachmentPrefix());
attachmentPrefixField.setEnabled(xmlCheck.isAttachXmlBomb());
attachmentPrefixField.addKeyListener(new KeyListener() {
@Override
public void keyTyped(KeyEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void keyReleased(KeyEvent arg0) {
xmlChk.setAttachmentPrefix(((JTextField) form.getComponent(ATTACHMENT_PREFIX_FIELD)).getText());
}
@Override
public void keyPressed(KeyEvent arg0) {
// TODO Auto-generated method stub
}
});
JXToolBar toolbar = UISupport.createSmallToolbar();
toolbar.add(previous = new PreviousAttachement());
previous.setEnabled(false);
toolbar.add(next = new NextAttachement());
toolbar.add(new AddXmlAttachement());
toolbar.add(new RemoveAttachement());
toolbar.add(new SaveAttachement());
toolbar.add(current = new JLabel(" current:0"));
toolbar.add(max = new JLabel(" max:" + xmlBombList.size()));
form.append(toolbar);
attachementArea = new JTextArea(10, 15);
xmlBombPosition = 0;
if (xmlBombList.size() > 0) {
attachementArea.setText(xmlBombList.get(xmlBombPosition));
if (xmlBombList.size() == 1) {
next.setEnabled(false);
}
} else {
next.setEnabled(false);
}
form.append(new JScrollPane(attachementArea));
form.addSpace(5);
add(form.getPanel());
}
private class PreviousAttachement extends AbstractAction {
public PreviousAttachement() {
putValue(Action.SMALL_ICON, UISupport.createImageIcon("/left_arrow.gif"));
putValue(Action.SHORT_DESCRIPTION, "Previous Xml Bomb");
}
@Override
public void actionPerformed(ActionEvent arg0) {
xmlBombPosition--;
next.setEnabled(true);
attachementArea.setText(xmlBombList.get(xmlBombPosition));
if (xmlBombPosition == 0) {
setEnabled(false);
}
current.setText(" current:" + xmlBombPosition);
}
}
private class NextAttachement extends AbstractAction {
public NextAttachement() {
putValue(Action.SMALL_ICON, UISupport.createImageIcon("/right_arrow.gif"));
putValue(Action.SHORT_DESCRIPTION, "Next Xml Bomb");
}
@Override
public void actionPerformed(ActionEvent arg0) {
xmlBombPosition++;
previous.setEnabled(true);
attachementArea.setText(xmlBombList.get(xmlBombPosition));
if (xmlBombPosition == xmlBombList.size() - 1) {
setEnabled(false);
}
current.setText(" current:" + xmlBombPosition);
}
}
private class SaveAttachement extends AbstractAction {
public SaveAttachement() {
putValue(Action.SMALL_ICON, UISupport.createImageIcon("/save_all.gif"));
putValue(Action.SHORT_DESCRIPTION, "Save Xml Bomb");
}
@Override
public void actionPerformed(ActionEvent arg0) {
xmlBombList.set(xmlBombPosition, attachementArea.getText());
}
}
private class AddXmlAttachement extends AbstractAction {
public AddXmlAttachement() {
putValue(Action.SMALL_ICON, UISupport.createImageIcon("/add.png"));
putValue(Action.SHORT_DESCRIPTION, "Add new Xml Bomb");
}
@Override
public void actionPerformed(ActionEvent arg0) {
xmlBombList.add("");
attachementArea.setText("");
max.setText(" max:" + xmlBombList.size());
xmlBombPosition = xmlBombList.size() - 1;
current.setText(" current:" + xmlBombPosition);
next.setEnabled(false);
if (xmlBombList.size() > 1) {
previous.setEnabled(true);
}
}
}
private class RemoveAttachement extends AbstractAction {
public RemoveAttachement() {
putValue(Action.SMALL_ICON, UISupport.createImageIcon("/delete.png"));
putValue(Action.SHORT_DESCRIPTION, "Remove current Xml Bomb");
}
@Override
public void actionPerformed(ActionEvent arg0) {
if (!xmlBombList.isEmpty()) {
xmlBombList.remove(xmlBombPosition);
if (xmlBombPosition >= xmlBombList.size() && !xmlBombList.isEmpty()) {
xmlBombPosition = xmlBombList.size() - 1;
} else {
if (xmlBombList.isEmpty()) {
xmlBombPosition = 0;
next.setEnabled(false);
previous.setEnabled(false);
}
}
if (xmlBombList.size() == 1) {
xmlBombPosition = 0;
next.setEnabled(false);
previous.setEnabled(false);
}
if (xmlBombList.size() - 1 == xmlBombPosition) {
next.setEnabled(false);
}
if (xmlBombList.isEmpty()) {
attachementArea.setText("");
} else {
attachementArea.setText(xmlBombList.get(xmlBombPosition));
}
current.setText(" current:" + xmlBombPosition);
max.setText(" max:" + xmlBombList.size());
}
}
}
}