Package org.owasp.webscarab.plugin.manualrequest.swing

Source Code of org.owasp.webscarab.plugin.manualrequest.swing.ManualRequestPanel

/***********************************************************************
*
* $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
*
*/

/*
* ManualRequestPanel.java
*
* Created on September 15, 2003, 11:16 AM
*/

package org.owasp.webscarab.plugin.manualrequest.swing;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.MalformedURLException;
import java.text.ParseException;
import java.util.logging.Logger;

import javax.swing.ComboBoxModel;
import javax.swing.JOptionPane;
import javax.swing.ListModel;
import javax.swing.SwingUtilities;
import javax.swing.border.TitledBorder;

import org.owasp.webscarab.model.ConversationID;
import org.owasp.webscarab.model.HttpUrl;
import org.owasp.webscarab.model.Request;
import org.owasp.webscarab.model.Response;
import org.owasp.webscarab.plugin.manualrequest.ManualRequest;
import org.owasp.webscarab.plugin.manualrequest.ManualRequestModel;
import org.owasp.webscarab.plugin.manualrequest.ManualRequestUI;
import org.owasp.webscarab.ui.swing.ConversationListModel;
import org.owasp.webscarab.ui.swing.ConversationRenderer;
import org.owasp.webscarab.ui.swing.RequestPanel;
import org.owasp.webscarab.ui.swing.ResponsePanel;
import org.owasp.webscarab.ui.swing.SwingPluginUI;
import org.owasp.webscarab.util.swing.ColumnDataModel;
import org.owasp.webscarab.util.swing.ListComboBoxModel;
import org.owasp.webscarab.util.swing.SwingWorker;

/**
*
* @author  rdawes
*/
public class ManualRequestPanel extends javax.swing.JPanel implements SwingPluginUI, ManualRequestUI {
   
    /**
   *
   */
  private static final long serialVersionUID = 277808739447506130L;
  private ManualRequestModel _model;
    private ManualRequest _manualRequest;
   
    private final RequestPanel _requestPanel;
    private final ResponsePanel _responsePanel;
    private final RequestUpdater _reqUpdater = new RequestUpdater();
    private final ResponseUpdater _respUpdater = new ResponseUpdater();
   
    private Logger _logger = Logger.getLogger(this.getClass().getName());
   
    /** Creates new form ManualRequestPanel */
    public ManualRequestPanel(ManualRequest manualRequest) {
        initComponents();
       
        _manualRequest = manualRequest;
        _model = _manualRequest.getModel();
       
        Request request = new Request();
        request.setMethod("GET");
        request.setVersion("HTTP/1.0");
        _requestPanel = new RequestPanel();
        _requestPanel.setEditable(true);
        _requestPanel.setRequest(request);
        _requestPanel.setBorder(new TitledBorder("Request"));
        conversationSplitPane.setLeftComponent(_requestPanel);
       
        _responsePanel = new ResponsePanel();
        _responsePanel.setEditable(false);
        _responsePanel.setResponse(null);
        _responsePanel.setBorder(new TitledBorder("Response"));
        conversationSplitPane.setRightComponent(_responsePanel);
       
        ListModel conversationList = new ConversationListModel(_model.getConversationModel());
        ComboBoxModel requestModel = new ListComboBoxModel(conversationList);
        requestComboBox.setModel(requestModel);
        requestComboBox.setRenderer(new ConversationRenderer(_model.getConversationModel()));
       
        requestComboBox.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                requestComboBoxActionPerformed(e);
            }
        });
       
        _manualRequest.setUI(this);
    }
   
    /** 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.
     */
    private void initComponents() {//GEN-BEGIN:initComponents

        jPanel1 = new javax.swing.JPanel();
        jLabel1 = new javax.swing.JLabel();
        requestComboBox = new javax.swing.JComboBox();
        conversationSplitPane = new javax.swing.JSplitPane();
        jPanel2 = new javax.swing.JPanel();
        getCookieButton = new javax.swing.JButton();
        fetchResponseButton = new javax.swing.JButton();
        updateCookiesButton = new javax.swing.JButton();

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

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

        jLabel1.setText("Previous Requests : ");
        jLabel1.setMinimumSize(new java.awt.Dimension(135, 15));
        jPanel1.add(jLabel1, java.awt.BorderLayout.WEST);

        jPanel1.add(requestComboBox, java.awt.BorderLayout.CENTER);

        add(jPanel1, java.awt.BorderLayout.NORTH);

        conversationSplitPane.setOrientation(javax.swing.JSplitPane.VERTICAL_SPLIT);
        conversationSplitPane.setResizeWeight(0.5);
        conversationSplitPane.setOneTouchExpandable(true);
        add(conversationSplitPane, java.awt.BorderLayout.CENTER);

        jPanel2.setLayout(new java.awt.GridLayout());

        getCookieButton.setText("Get Cookies");
        getCookieButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                getCookieButtonActionPerformed(evt);
            }
        });

        jPanel2.add(getCookieButton);

        fetchResponseButton.setText("Fetch Response");
        fetchResponseButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                fetchResponseButtonActionPerformed(evt);
            }
        });

        jPanel2.add(fetchResponseButton);

        updateCookiesButton.setText("Update CookieJar");
        updateCookiesButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                updateCookiesButtonActionPerformed(evt);
            }
        });

        jPanel2.add(updateCookiesButton);

        add(jPanel2, java.awt.BorderLayout.SOUTH);

    }//GEN-END:initComponents
   
    private void requestComboBoxActionPerformed(java.awt.event.ActionEvent evt) {
        Object o = requestComboBox.getSelectedItem();
        if (o instanceof ConversationID) {
            ConversationID id = (ConversationID) o;
            Request request = _model.getConversationModel().getRequest(id);
            _manualRequest.setRequest(request);
        }
    }
   
    private void updateCookiesButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_updateCookiesButtonActionPerformed
        _manualRequest.updateCookies();
    }//GEN-LAST:event_updateCookiesButtonActionPerformed
   
    private void getCookieButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_getCookieButtonActionPerformed
        try {
            Request request = _requestPanel.getRequest();
            if (request != null && request.getURL() != null) {
                _manualRequest.setRequest(request);
                _manualRequest.addRequestCookies();
            }
        } catch (MalformedURLException mue) {
            JOptionPane.showMessageDialog(this, new String[] {"The URL requested is malformed", mue.getMessage()}, "Malformed URL", JOptionPane.ERROR_MESSAGE);
        } catch (ParseException pe) {
            JOptionPane.showMessageDialog(this, new String[] {"The request is malformed", pe.getMessage()}, "Malformed Request", JOptionPane.ERROR_MESSAGE);
        }
    }//GEN-LAST:event_getCookieButtonActionPerformed
   
    private void fetchResponseButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_fetchResponseButtonActionPerformed
        try {
            Request request = _requestPanel.getRequest();
            fetchResponse(request);
        } catch (MalformedURLException mue) {
            JOptionPane.showMessageDialog(this, new String[] {"The URL requested is malformed", mue.getMessage()}, "Malformed URL", JOptionPane.ERROR_MESSAGE);
        } catch (ParseException pe) {
            JOptionPane.showMessageDialog(this, new String[] {"The request is malformed", pe.getMessage()}, "Malformed Request", JOptionPane.ERROR_MESSAGE);
        }
    }//GEN-LAST:event_fetchResponseButtonActionPerformed
   
    private void fetchResponse(final Request request) {
        if (request != null) {
            _requestPanel.setEnabled(false);
            fetchResponseButton.setEnabled(false);
            updateCookiesButton.setEnabled(false);
            getCookieButton.setEnabled(false);
            _manualRequest.setRequest(request);
            new SwingWorker() {
                public Object construct() {
                    try {
                        _manualRequest.fetchResponse();
                        return null;
                    } catch (Exception e) {
                        return e;
                    }
                }
               
                //Runs on the event-dispatching thread.
                public void finished() {
                    Object obj = getValue();
                    if (obj != null) {
                        Exception e = (Exception) obj;
                        JOptionPane.showMessageDialog(null, new String[] {"Error fetching response: ", e.toString()}, "Error", JOptionPane.ERROR_MESSAGE);
                        _logger.severe("Exception fetching response: " + e);
                        e.printStackTrace();
                    }
                    fetchResponseButton.setEnabled(true);
                    updateCookiesButton.setEnabled(true);
                    getCookieButton.setEnabled(true);
                    _requestPanel.setEnabled(true);
                }
            }.start();
        } else {
            _logger.severe("Can't fetch a null request");
        }
    }
    public javax.swing.JPanel getPanel() {
        return this;
    }
   
    public String getPluginName() {
        return new String("Manual Request");
    }
   
    public javax.swing.Action[] getConversationActions() {
        // could return two actions here: "load request in editor", and "replay request"
        return null;
    }
   
    public javax.swing.Action[] getUrlActions() {
        // doesn't really make sense at an URL level
        return null;
    }
   
    public void requestChanged(Request request) {
        _reqUpdater.setRequest(request);
    }
   
    public void responseChanged(Response response) {
        _respUpdater.setResponse(response);
    }
   
    public void setEnabled(final boolean enabled) {
        if (SwingUtilities.isEventDispatchThread()) {
            fetchResponseButton.setEnabled(enabled);
            getCookieButton.setEnabled(enabled);
            updateCookiesButton.setEnabled(enabled);
            requestComboBox.setEnabled(enabled);
        } else {
            SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    setEnabled(enabled);
                }
            });
        }
    }
   
    public ColumnDataModel<ConversationID>[] getConversationColumns() {
        return null;
    }
   
    public ColumnDataModel<HttpUrl>[] getUrlColumns() {
        return null;
    }
   
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JSplitPane conversationSplitPane;
    private javax.swing.JButton fetchResponseButton;
    private javax.swing.JButton getCookieButton;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel jPanel2;
    private javax.swing.JComboBox requestComboBox;
    private javax.swing.JButton updateCookiesButton;
    // End of variables declaration//GEN-END:variables
   
    private class RequestUpdater implements Runnable {
       
        private Request _req;
       
        public void setRequest(Request request) {
            _req = request;
            if (SwingUtilities.isEventDispatchThread()) {
                run();
            } else {
                try {
                    SwingUtilities.invokeAndWait(this);
                } catch (Exception e) {
                    _logger.info("Exception " + e);
                }
            }
        }
       
        public void run() {
            _requestPanel.setEditable(true);
            _requestPanel.setRequest(_req);
        }
       
    }
   
    private class ResponseUpdater implements Runnable {
       
        private Response _resp;
       
        public void setResponse(Response response) {
            _resp = response;
            if (SwingUtilities.isEventDispatchThread()) {
                run();
            } else {
                try {
                    SwingUtilities.invokeAndWait(this);
                } catch (Exception e) {
                    _logger.info("Exception " + e);
                }
            }
        }
       
        public void run() {
            _responsePanel.setEditable(false);
            _responsePanel.setResponse(_resp);
        }
       
    }
   
}
TOP

Related Classes of org.owasp.webscarab.plugin.manualrequest.swing.ManualRequestPanel

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.