Package org.parosproxy.paros.extension.history

Source Code of org.parosproxy.paros.extension.history.ManualRequestEditorDialog

/*
*
* 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.
*/
package org.parosproxy.paros.extension.history;

import java.awt.EventQueue;
import java.awt.Frame;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.HeadlessException;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.IOException;

import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.parosproxy.paros.control.Control;
import org.parosproxy.paros.extension.AbstractDialog;
import org.parosproxy.paros.extension.Extension;
import org.parosproxy.paros.model.HistoryList;
import org.parosproxy.paros.model.HistoryReference;
import org.parosproxy.paros.model.Model;
import org.parosproxy.paros.network.HttpMalformedHeaderException;
import org.parosproxy.paros.network.HttpMessage;
import org.parosproxy.paros.network.HttpSender;
import org.parosproxy.paros.view.HttpPanel;

public class ManualRequestEditorDialog extends AbstractDialog {

  private static final long serialVersionUID = -7918536141940081947L;
 
  private HttpPanel requestPanel = null;
  private JPanel panelCommand = null;
  private JButton btnSend = null;
  private JLabel jLabel = null;
  private JTabbedPane panelTab = null;
  private HttpPanel responsePanel = null;
  private Extension extension = null;
  private HttpSender httpSender = null;
  private boolean isSendEnabled = true;
  private HistoryList historyList = null;

  private JPanel jPanel = null;
  private JCheckBox chkFollowRedirect = null;
  private JCheckBox chkUseTrackingSessionState = null;

  // ZAP: Added logger
    private static Log log = LogFactory.getLog(ManualRequestEditorDialog.class);


  public ManualRequestEditorDialog() throws HeadlessException {
    super();
    initialize();
  }
 
  public ManualRequestEditorDialog(Frame parent, boolean modal, boolean isSendEnabled, Extension extension)
  throws HeadlessException {
    super(parent, modal);
    this.isSendEnabled = isSendEnabled;
    this.extension = extension;
    this.historyList = ((ExtensionHistory)Control.getSingleton().getExtensionLoader().getExtension("ExtensionHistory")).getHistoryList();
    initialize();
  }

  private void initialize() {
    getRequestPanel().getPanelOption().add(getPanelCommand(), "");

    this.addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent e) {
        getHttpSender().shutdown();
        getResponsePanel().setMessage("", "", false);
      }
    });
    this.setContentPane(getJPanel())
  }

  public HttpPanel getRequestPanel() {
    if (requestPanel == null) {
      requestPanel = new HttpPanel(true);
    }
    return requestPanel;
  }

  private JPanel getPanelCommand() {
    if (panelCommand == null) {
      jLabel = new JLabel();
      jLabel.setText("");
      panelCommand = new JPanel();
      panelCommand.setLayout(new GridBagLayout());
     
      GridBagConstraints gridBagConstraints11 = new GridBagConstraints();
      GridBagConstraints gridBagConstraints1 = new GridBagConstraints();
      GridBagConstraints gridBagConstraints2 = new GridBagConstraints();
      GridBagConstraints gridBagConstraints3 = new GridBagConstraints();
     
      gridBagConstraints2.gridx = 0;
      gridBagConstraints2.gridy = 0;
      gridBagConstraints2.ipadx = 0;
      gridBagConstraints2.ipady = 0;
      gridBagConstraints2.anchor = GridBagConstraints.NORTHWEST;
      gridBagConstraints2.fill = GridBagConstraints.HORIZONTAL;
      gridBagConstraints2.weightx = 1.0D;
      gridBagConstraints3.gridx = 3;
      gridBagConstraints3.gridy = 0;
      gridBagConstraints3.anchor = GridBagConstraints.NORTHEAST;
      gridBagConstraints3.insets = new Insets(2, 2, 2, 2);
      gridBagConstraints1.gridx = 2;
      gridBagConstraints1.gridy = 0;
      gridBagConstraints11.anchor = GridBagConstraints.EAST;
      gridBagConstraints11.gridx = 1;
      gridBagConstraints11.gridy = 0;
      gridBagConstraints11.insets = new Insets(0, 0, 0, 0);
      panelCommand.add(jLabel, gridBagConstraints2);
      panelCommand.add(getChkUseTrackingSessionState(), gridBagConstraints11);
      panelCommand.add(getChkFollowRedirect(), gridBagConstraints1);
      panelCommand.add(getBtnSend(), gridBagConstraints3);
    }
    return panelCommand;
  }

  private JButton getBtnSend() {
    if (btnSend == null) {
      btnSend = new JButton();
      btnSend.setText("Send");
      btnSend.setEnabled(isSendEnabled);
      btnSend.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
          btnSend.setEnabled(false);
          HttpMessage msg = new HttpMessage();
          getRequestPanel().getMessage(msg, true);
          msg.getRequestHeader().setContentLength(msg.getRequestBody().length());
          send(msg);
        }
      });
    }
    return btnSend;
  }

  private JTabbedPane getPanelTab() {
    if (panelTab == null) {
      panelTab = new JTabbedPane();
      panelTab.setDoubleBuffered(true);
      panelTab.addTab("Request", null, getRequestPanel(), null);
      panelTab.addTab("Response", null, getResponsePanel(), null);
    }
    return panelTab;
  }

  public HttpPanel getResponsePanel() {
    if (responsePanel == null) {
      responsePanel = new HttpPanel(false);
    }
    return responsePanel;
  }
 
 

  public void setExtension(Extension extension) {
    this.extension = extension;
  }

  private Extension getExtention() {
    return extension;
  }

  public void setVisible(boolean show) {
    if (show) {
      try {
        if (httpSender != null) {
          httpSender.shutdown();
          httpSender = null;
        }
      } catch (Exception e) {
        // ZAP: Log exceptions
               log.warn(e.getMessage(), e);
      }
      getPanelTab().setSelectedIndex(0);
    }

    boolean isSessionTrackingEnabled = Model.getSingleton().getOptionsParam().getConnectionParam().isHttpStateEnabled();
    getChkUseTrackingSessionState().setEnabled(isSessionTrackingEnabled);
    super.setVisible(show);
  }

  private HttpSender getHttpSender() {
    if (httpSender == null) {
      httpSender = new HttpSender(Model.getSingleton().getOptionsParam().getConnectionParam(),
          getChkUseTrackingSessionState().isSelected());
    }
    return httpSender;
  }

  public void setMessage(HttpMessage msg) {
    getPanelTab().setSelectedIndex(0);
    getRequestPanel().setMessage(msg, true);
    getResponsePanel().setMessage("", "", false);
    getBtnSend().setEnabled(true);
  }

  private JPanel getJPanel() {
    if (jPanel == null) {
      GridBagConstraints gridBagConstraints31 = new GridBagConstraints();
      jPanel = new JPanel();
      jPanel.setLayout(new GridBagLayout());
      gridBagConstraints31.gridx = 0;
      gridBagConstraints31.gridy = 0;
      gridBagConstraints31.weightx = 1.0;
      gridBagConstraints31.weighty = 1.0;
      gridBagConstraints31.fill = GridBagConstraints.BOTH;
      gridBagConstraints31.anchor = GridBagConstraints.NORTHWEST;
      jPanel.add(getPanelTab(), gridBagConstraints31);
    }
    return jPanel;
  }

  private JCheckBox getChkFollowRedirect() {
    if (chkFollowRedirect == null) {
      chkFollowRedirect = new JCheckBox();
      chkFollowRedirect.setText("Follow redirect");
      chkFollowRedirect.setSelected(true);
    }
    return chkFollowRedirect;
  }

  private JCheckBox getChkUseTrackingSessionState() {
    if (chkUseTrackingSessionState == null) {
      chkUseTrackingSessionState = new JCheckBox();
      chkUseTrackingSessionState.setText("Use current tracking session");
    }
    return chkUseTrackingSessionState;
  }

  private void send(final HttpMessage msg) {
    Thread t = new Thread(new Runnable() {
      public void run() {
        try {
          getHttpSender().sendAndReceive(msg, getChkFollowRedirect().isSelected());

          EventQueue.invokeAndWait(new Runnable() {
            public void run() {
              if (!msg.getResponseHeader().isEmpty()) {
                getResponsePanel().setMessage(msg, false);
               
                final int finalType = HistoryReference.TYPE_MANUAL;
                Thread t = new Thread(new Runnable() {
                  public void run() {
                    addHistory(msg, finalType);
                  }
                });
                t.start();
               
              }
              getPanelTab().setSelectedIndex(1);
            }
          });
         
        } catch (NullPointerException npe) {
          getExtention().getView().showWarningDialog("Malformed header error.");
        } catch (HttpMalformedHeaderException mhe) {
          getExtention().getView().showWarningDialog("Malformed header error.");
        } catch (IOException ioe) {
          getExtention().getView().showWarningDialog("IO error in sending request.");
        } catch (Exception e) {
          // ZAP: Log exceptions
                 log.warn(e.getMessage(), e);
        } finally {
          btnSend.setEnabled(true);
        }
      }
    });
   
    t.setPriority(Thread.NORM_PRIORITY);
    t.start();
  }

  private void addHistory(HttpMessage msg, int type) {
    HistoryReference historyRef = null;
    try {
      historyRef = new HistoryReference(Model.getSingleton().getSession(), type, msg);
      synchronized (historyList) {
        if (type == HistoryReference.TYPE_MANUAL) {
          addHistoryInEventQueue(historyRef);
          historyList.notifyItemChanged(historyRef);
        }
      }
    } catch (Exception e) {
      return;
    }
  }
 
  private void addHistoryInEventQueue(final HistoryReference ref) {
    if (EventQueue.isDispatchThread()) {
      historyList.addElement(ref);
    } else {
      try {
        EventQueue.invokeAndWait(new Runnable() {
          public void run() {
            historyList.addElement(ref);
          }
        });
      } catch (Exception e) {
      }
    }
  }
 
}
TOP

Related Classes of org.parosproxy.paros.extension.history.ManualRequestEditorDialog

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.