Package org.owasp.webscarab.ui.swing

Source Code of org.owasp.webscarab.ui.swing.RequestPanel

/***********************************************************************
*
* $CVSHeader$
*
* This file is part of WebScarab, an Open Web Application Security
* Project utility. For details, please see http://www.owasp.org/
*
* Copyright (c) 2002 - 2004 Rogan Dawes
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* 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
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
*
* Getting Source
* ==============
*
* Source for this application is maintained at Sourceforge.net, a
* repository for free software projects.
*
* For details, please see http://www.sourceforge.net/projects/owasp
*
*/

/*
* RequestPanel.java
*
* Created on 02 June 2003, 03:09
*/

package org.owasp.webscarab.ui.swing;

import java.net.MalformedURLException;
import java.text.ParseException;
import javax.swing.JOptionPane;
import javax.swing.event.ChangeListener;
import javax.swing.event.ChangeEvent;
import javax.swing.SwingUtilities;

import org.owasp.webscarab.model.Request;
import org.owasp.webscarab.model.HttpUrl;
import org.owasp.webscarab.ui.swing.editors.TextPanel;
import org.owasp.webscarab.util.RequestConverter;

/**
*
* @author  rdawes
*/
public class RequestPanel extends javax.swing.JPanel {
   
    /**
   *
   */
  private static final long serialVersionUID = -5571563143330632769L;

  private boolean[] _upToDate;
   
    private boolean _editable = false;
    private boolean _modified = false;
   
    private int _selected = 0;
   
    private Request _request = null;
    private MessagePanel _messagePanel;
    private TextPanel _textPanel;
   
    private static int _preferred = -1;
    private boolean _reverting = false;
   
    /** Creates new form RequestPanel */
    public RequestPanel() {
        initComponents();
       
        displayTabbedPane.getModel().addChangeListener(new ChangeListener() {
            public void stateChanged(ChangeEvent e) {
                try {
                    updateRequest(_selected);
                    _selected = displayTabbedPane.getSelectedIndex();
                    _preferred = _selected;
                    if (_selected >= 0) {
                        updatePanel(_selected);
                    }
                } catch (MalformedURLException mue) {
                    if (!_reverting) {
                        JOptionPane.showMessageDialog(RequestPanel.this, new String[] {"The URL requested is malformed", mue.getMessage()}, "Malformed URL", JOptionPane.ERROR_MESSAGE);
                        _reverting = true;
                        displayTabbedPane.setSelectedIndex(_selected);
                        _reverting = false;
                    }
                } catch (ParseException pe) {
                    if (!_reverting) {
                        JOptionPane.showMessageDialog(RequestPanel.this, new String[] {"Error parsing request", pe.getMessage()}, "Malformed Request", JOptionPane.ERROR_MESSAGE);
                        _reverting = true;
                        displayTabbedPane.setSelectedIndex(_selected);
                        _reverting = false;
                    }
                }
            }
        });

        _messagePanel = new MessagePanel();

        parsedPanel.remove(messagePanelPlaceHolder);
        java.awt.GridBagConstraints gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 0;
        gridBagConstraints.gridy = 2;
        gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER;
        gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
        gridBagConstraints.weightx = 1.0;
        gridBagConstraints.weighty = 1.0;
        parsedPanel.add(_messagePanel, gridBagConstraints);
       
        _textPanel = new TextPanel();
        displayTabbedPane.add("Raw", _textPanel);
       
        _upToDate = new boolean[displayTabbedPane.getTabCount()];
        invalidatePanels();
       
        updateComponents(_editable);
       
        if (_preferred > -1 && _preferred < displayTabbedPane.getTabCount()) displayTabbedPane.setSelectedIndex(_preferred);
    }
   
    private void invalidatePanels() {
        for (int i=0; i<_upToDate.length; i++) {
            _upToDate[i] = false;
        }
    }
   
    private void updateRequest(int panel) throws MalformedURLException, ParseException {
        if (! _editable || panel < 0) {
            return;
        }
        if (displayTabbedPane.getTitleAt(panel).equals("Parsed")) {// parsed text
            if (_messagePanel.isModified()) {
                _request = (Request) _messagePanel.getMessage();
                _modified = true;
            }
            if (_request == null) {
                _request = new Request();
            }
            _request.setMethod(methodTextField.getText());
            String url = urlTextField.getText();
            if (!"".equals(url))
                _request.setURL(new HttpUrl(url));
            _request.setVersion(versionTextField.getText());
            // this is a bit of a hack. What we should really do is add a listener
            // to the text fields, so we know when a change has been made. Until then
            // this will do
            _modified = true;
        } else if (displayTabbedPane.getTitleAt(panel).equals("Raw")) { // raw text
            if (_textPanel.isModified()) {
                Request r = new Request();
                String text = _textPanel.getText();
                if (!"".equals(text))
                    r.parse(_textPanel.getText());
                _request = r;
                _modified = true;
            }
        }
        if (_modified)
            invalidatePanels();
        _upToDate[panel] = true;
    }
   
    public boolean isModified() {
        return _modified;
    }
   
    private void updatePanel(int panel) {
        if (!_upToDate[panel]) {
            if (displayTabbedPane.getTitleAt(panel).equals("Parsed")) {// parsed text
                _messagePanel.setMessage(_request);
                if (_request != null) {
                    methodTextField.setText(_request.getMethod());
                    if (_request.getURL() != null) {
                        urlTextField.setText(_request.getURL().toString());
                    } else {
                        urlTextField.setText("");
                    }
                    versionTextField.setText(_request.getVersion());
                } else {
                    methodTextField.setText("");
                    urlTextField.setText("");
                    versionTextField.setText("");
                }
            } else if (displayTabbedPane.getTitleAt(panel).equals("Raw")) { // raw text
                if (_request != null && _request.getMethod() != null && _request.getURL() != null && _request.getVersion() != null) {
                    _textPanel.setText(null, _request.toString("\n"));
                } else {
                    _textPanel.setText(null, "");
                }
            }
            _upToDate[panel] = true;
        }
    }
   
    private void updateComponents(boolean editable) {
        java.awt.Color color;
        if (editable) {
            color = new java.awt.Color(255, 255, 255);
        } else {
            color = new java.awt.Color(204, 204, 204);
        }
        methodTextField.setEditable(editable);
        urlTextField.setEditable(editable);
        versionTextField.setEditable(editable);
        methodTextField.setBackground(color);
        urlTextField.setBackground(color);
        versionTextField.setBackground(color);
        editButton.setVisible(editable);
    }
   
    public void setEditable(boolean editable) {
        _editable = editable;
        _textPanel.setEditable(editable);
        updateComponents(editable);
        _messagePanel.setEditable(editable);
    }
   
    public void setRequest(Request request) {
        _modified = false;
        if (request != null) {
            _request = new Request(request);
        } else {
            _request = null;
        }
        invalidatePanels();
        if (SwingUtilities.isEventDispatchThread()) {
            updatePanel(displayTabbedPane.getSelectedIndex());
        } else {
            SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    updatePanel(displayTabbedPane.getSelectedIndex());
                }
            });
        }
    }
   
    public Request getRequest() throws MalformedURLException, ParseException {
        if (_editable) {
            int panel = displayTabbedPane.getSelectedIndex();
            updateRequest(panel);
        }
        return _request;
    }
   
    public void selectPanel(String title) {
        for (int i=0; i<displayTabbedPane.getTabCount(); i++) {
            String tab = displayTabbedPane.getTitleAt(i);
            int selected = displayTabbedPane.getSelectedIndex();
            if (tab != null && tab.equalsIgnoreCase(title) && i != selected) {
                displayTabbedPane.setSelectedIndex(i);
                return;
            }
        }
    }
   
    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    // <editor-fold defaultstate="collapsed" desc=" Generated Code ">//GEN-BEGIN:initComponents
    private void initComponents() {
        java.awt.GridBagConstraints gridBagConstraints;

        editOptionsPopupMenu = new javax.swing.JPopupMenu();
        convertGetMenuItem = new javax.swing.JMenuItem();
        convertPostMenuItem = new javax.swing.JMenuItem();
        convertMultipartMenuItem = new javax.swing.JMenuItem();
        displayTabbedPane = new javax.swing.JTabbedPane();
        parsedPanel = new javax.swing.JPanel();
        jLabel3 = new javax.swing.JLabel();
        methodTextField = new javax.swing.JTextField();
        jLabel4 = new javax.swing.JLabel();
        urlTextField = new javax.swing.JTextField();
        messagePanelPlaceHolder = new javax.swing.JPanel();
        jLabel5 = new javax.swing.JLabel();
        versionTextField = new javax.swing.JTextField();
        editButton = new javax.swing.JButton();

        convertGetMenuItem.setText("Convert POST to GET");
        convertGetMenuItem.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                convertGetMenuItemActionPerformed(evt);
            }
        });

        editOptionsPopupMenu.add(convertGetMenuItem);

        convertPostMenuItem.setText("Convert GET to POST");
        convertPostMenuItem.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                convertPostMenuItemActionPerformed(evt);
            }
        });

        editOptionsPopupMenu.add(convertPostMenuItem);

        convertMultipartMenuItem.setText("Convert POST to Multipart");
        convertMultipartMenuItem.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                convertMultipartMenuItemActionPerformed(evt);
            }
        });

        editOptionsPopupMenu.add(convertMultipartMenuItem);

        setLayout(new java.awt.BorderLayout());

        parsedPanel.setLayout(new java.awt.GridBagLayout());

        jLabel3.setLabelFor(methodTextField);
        jLabel3.setText("Method");
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 0;
        gridBagConstraints.gridy = 0;
        gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
        gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
        gridBagConstraints.insets = new java.awt.Insets(0, 4, 0, 4);
        parsedPanel.add(jLabel3, gridBagConstraints);

        methodTextField.setEditable(false);
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 0;
        gridBagConstraints.gridy = 1;
        gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
        gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
        gridBagConstraints.insets = new java.awt.Insets(4, 4, 4, 4);
        parsedPanel.add(methodTextField, gridBagConstraints);

        jLabel4.setLabelFor(urlTextField);
        jLabel4.setText("URL");
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 1;
        gridBagConstraints.gridy = 0;
        gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
        gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
        gridBagConstraints.insets = new java.awt.Insets(0, 4, 0, 4);
        parsedPanel.add(jLabel4, gridBagConstraints);

        urlTextField.setEditable(false);
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 1;
        gridBagConstraints.gridy = 1;
        gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
        gridBagConstraints.weightx = 1.0;
        gridBagConstraints.insets = new java.awt.Insets(4, 4, 4, 4);
        parsedPanel.add(urlTextField, gridBagConstraints);

        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 0;
        gridBagConstraints.gridy = 2;
        gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER;
        gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
        gridBagConstraints.weightx = 1.0;
        gridBagConstraints.weighty = 1.0;
        parsedPanel.add(messagePanelPlaceHolder, gridBagConstraints);

        jLabel5.setLabelFor(urlTextField);
        jLabel5.setText("Version");
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 2;
        gridBagConstraints.gridy = 0;
        gridBagConstraints.fill = java.awt.GridBagConstraints.VERTICAL;
        gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
        gridBagConstraints.insets = new java.awt.Insets(0, 4, 0, 4);
        parsedPanel.add(jLabel5, gridBagConstraints);

        versionTextField.setBackground(new java.awt.Color(204, 204, 204));
        versionTextField.setEditable(false);
        versionTextField.setText("HTTP/1.0");
        versionTextField.setMinimumSize(new java.awt.Dimension(65, 19));
        versionTextField.setPreferredSize(new java.awt.Dimension(65, 19));
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 2;
        gridBagConstraints.gridy = 1;
        gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
        gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
        gridBagConstraints.insets = new java.awt.Insets(4, 4, 4, 4);
        parsedPanel.add(versionTextField, gridBagConstraints);

        editButton.setText("Transform");
        editButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                editButtonActionPerformed(evt);
            }
        });

        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 3;
        gridBagConstraints.gridy = 1;
        parsedPanel.add(editButton, gridBagConstraints);

        displayTabbedPane.addTab("Parsed", parsedPanel);

        add(displayTabbedPane, java.awt.BorderLayout.CENTER);

    }// </editor-fold>//GEN-END:initComponents

    private void convertGetMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_convertGetMenuItemActionPerformed
        try {
            Request req = getRequest();
            if (req == null)
                return;
            Request get = RequestConverter.convertPostToGet(req);
            setRequest(get);
            _modified = true; // we have to do this as setRequest() resets this flag
        } catch (Exception e) {
            e.printStackTrace();
            JOptionPane.showMessageDialog(this, e.getLocalizedMessage(), "Error", JOptionPane.ERROR_MESSAGE);
        }
    }//GEN-LAST:event_convertGetMenuItemActionPerformed

    private void editButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_editButtonActionPerformed
        convertGetMenuItem.setEnabled(false);
        convertPostMenuItem.setEnabled(false);
        convertMultipartMenuItem.setEnabled(false);
        try {
            Request req = getRequest();
            if ("GET".equals(req.getMethod())) {
                convertPostMenuItem.setEnabled(true);
                convertMultipartMenuItem.setEnabled(true);
            } else if ("POST".equals(req.getMethod())) {
                if ("application/x-www-form-urlencoded".equals(req.getHeader("Content-Type"))) {
                    convertGetMenuItem.setEnabled(true);
                    convertMultipartMenuItem.setEnabled(true);
                }
            }
        } catch (Exception e) {
        }
        editOptionsPopupMenu.setVisible(true);
        editOptionsPopupMenu.show(editButton, 0, editButton.getHeight());
    }//GEN-LAST:event_editButtonActionPerformed

    private void convertPostMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_convertPostMenuItemActionPerformed
        try {
            Request req = getRequest();
            if (req == null)
                return;
            Request post = RequestConverter.convertGetToPost(req);
            setRequest(post);
            _modified = true; // we have to do this as setRequest() resets this flag
        } catch (Exception e) {
            JOptionPane.showMessageDialog(this, e.getLocalizedMessage(), "Error", JOptionPane.ERROR_MESSAGE);
        }
    }//GEN-LAST:event_convertPostMenuItemActionPerformed

    private void convertMultipartMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_convertMultipartMenuItemActionPerformed
        try {
            Request req = getRequest();
            if (req == null)
                return;
            Request post = RequestConverter.convertPostToMultipart(req);
            setRequest(post);
            _modified = true; // we have to do this as setRequest() resets this flag
        } catch (Exception e) {
            JOptionPane.showMessageDialog(this, e.getLocalizedMessage(), "Error", JOptionPane.ERROR_MESSAGE);
        }
    }//GEN-LAST:event_convertMultipartMenuItemActionPerformed
   
    public static void main(String[] args) {
        final RequestPanel panel = new RequestPanel();
        javax.swing.JFrame top = new javax.swing.JFrame(panel.getName());
        top.getContentPane().setLayout(new java.awt.BorderLayout());
        top.addWindowListener(new java.awt.event.WindowAdapter() {
            public void windowClosing(java.awt.event.WindowEvent evt) {
                System.exit(0);
            }
        });
        javax.swing.JButton button = new javax.swing.JButton("GET");
        top.getContentPane().add(panel);
        top.getContentPane().add(button, java.awt.BorderLayout.SOUTH);
        button.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                try {
                    System.out.println(panel.getRequest());
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
        // top.setBounds(100,100,600,400);
        top.pack();
        top.setVisible(true);
       
        Request request = new Request();
        try {
            java.io.FileInputStream fis = new java.io.FileInputStream("l2/conversations/1-request");
            request.read(fis);
        } catch (Exception e) {
            e.printStackTrace();
        }
        panel.setEditable(true);
        panel.setRequest(request);
    }
   
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JMenuItem convertGetMenuItem;
    private javax.swing.JMenuItem convertMultipartMenuItem;
    private javax.swing.JMenuItem convertPostMenuItem;
    private javax.swing.JTabbedPane displayTabbedPane;
    private javax.swing.JButton editButton;
    private javax.swing.JPopupMenu editOptionsPopupMenu;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JPanel messagePanelPlaceHolder;
    private javax.swing.JTextField methodTextField;
    private javax.swing.JPanel parsedPanel;
    private javax.swing.JTextField urlTextField;
    private javax.swing.JTextField versionTextField;
    // End of variables declaration//GEN-END:variables
   
}
TOP

Related Classes of org.owasp.webscarab.ui.swing.RequestPanel

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.