Package org.parosproxy.paros.extension.history

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

/*
*
* 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.sql.SQLException;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.swing.JCheckBoxMenuItem;
import javax.swing.JOptionPane;

import org.parosproxy.paros.control.Control;
import org.parosproxy.paros.control.Proxy;
import org.parosproxy.paros.core.proxy.CacheProcessingItem;
import org.parosproxy.paros.extension.ExtensionAdaptor;
import org.parosproxy.paros.extension.ExtensionHook;
import org.parosproxy.paros.extension.ExtensionHookView;
import org.parosproxy.paros.extension.SessionChangedListener;
import org.parosproxy.paros.model.HistoryList;
import org.parosproxy.paros.model.HistoryReference;
import org.parosproxy.paros.model.Session;
import org.parosproxy.paros.network.HttpHeader;
import org.parosproxy.paros.network.HttpMessage;
import org.parosproxy.paros.network.HttpRequestHeader;

/**
*
* To change the template for this generated type comment go to
* Window - Preferences - Java - Code Generation - Code and Comments
*/
public class ExtensionHistory extends ExtensionAdaptor implements SessionChangedListener {

    private static final int FILTER_NONE = 0;
    private static final int FILTER_REQUEST = 1;
    private static final int FILTER_RESPONSE = 2;
   
  private LogPanel logPanel = null//  @jve:decl-index=0:visual-constraint="161,134"
  private ProxyListenerLog proxyListener = null;
  private HistoryList historyList = null;
    private String filter = "";
   
    private EmbeddedBrowser browser = null;
    private static BrowserDialog browserDialog = null;
     
  private HistoryFilterDialog filterDialog = null;
  private JCheckBoxMenuItem menuFilterHistoryByRequest = null//  @jve:decl-index=0:visual-constraint="68,100"
  private JCheckBoxMenuItem menuFilterHistoryByResponse = null;
  private int stateFilter = FILTER_NONE;

 
  private PopupMenuDeleteHistory popupMenuDeleteHistory = null;
  private PopupMenuPurgeHistory popupMenuPurgeHistory = null;
  private PopupMenuResend popupMenuResend = null;
  private ManualRequestEditorDialog resendDialog = null;
 

  private PopupMenuExportMessage popupMenuExportMessage = null;
  private PopupMenuExportMessage popupMenuExportMessage2 = null;
    private PopupMenuExportResponse popupMenuExportResponse = null;
    private PopupMenuExportResponse popupMenuExportResponse2 = null;
    private PopupMenuEmbeddedBrowser popupMenuEmbeddedBrowser = null;
    private PopupMenuEmbeddedBrowser popupMenuEmbeddedBrowser2 = null;
    private PopupMenuTag popupMenuTag = null;
   
    /**
     *
     */
    public ExtensionHistory() {
        super();
     initialize();
    }

    /**
     * @param name
     */
    public ExtensionHistory(String name) {
        super(name);
    }

  /**
   * This method initializes this
   *
   * @return void
   */
  private void initialize() {
        this.setName("ExtensionHistory");
     
  }
 
  /**
   * This method initializes logPanel 
   *  
   * @return com.proofsecure.paros.extension.history.LogPanel 
   */   
  LogPanel getLogPanel() {
    if (logPanel == null) {
      logPanel = new LogPanel();
      logPanel.setName("History");
            logPanel.setExtension(this);
    }
    return logPanel;
  }
  public void hook(ExtensionHook extensionHook) {
      super.hook(extensionHook);
        extensionHook.addSessionListener(this);
        extensionHook.addProxyListener(getProxyListenerLog());

      if (getView() != null) {
        ExtensionHookView pv = extensionHook.getHookView();
        pv.addStatusPanel(getLogPanel());
        //pv.addWorkPanel(getRequestPanel());
        //pv.addWorkPanel(getResponsePanel());
        getLogPanel().setDisplayPanel(getView().getRequestPanel(), getView().getResponsePanel());
       

//            extensionHook.getHookMenu().addViewMenuItem(getPopupMenuEmbeddedBrowser2());
            extensionHook.getHookMenu().addViewMenuItem(extensionHook.getHookMenu().getMenuSeparator());
          extensionHook.getHookMenu().addViewMenuItem(getMenuFilterHistoryByRequest());
          extensionHook.getHookMenu().addViewMenuItem(getMenuFilterHistoryByResponse());

          extensionHook.getHookMenu().addPopupMenuItem(getPopupMenuResend());
            extensionHook.getHookMenu().addPopupMenuItem(getPopupMenuTag());

            extensionHook.getHookMenu().addPopupMenuItem(getPopupMenuEmbeddedBrowser());

//          extensionHook.getHookMenu().addPopupMenuItem(getPopupMenuExportMessage());
//          extensionHook.getHookMenu().addPopupMenuItem(getPopupMenuExportResponse());

          extensionHook.getHookMenu().addPopupMenuItem(getPopupMenuDeleteHistory());
          extensionHook.getHookMenu().addPopupMenuItem(getPopupMenuPurgeHistory());

          // same as PopupMenuExport but for File menu
          extensionHook.getHookMenu().addFileMenuItem(getPopupMenuExportMessage2());
            extensionHook.getHookMenu().addFileMenuItem(getPopupMenuExportResponse2());

            if (isEnableForNativePlatform()) {
                // preload for faster loading
                getBrowserDialog();
            }
      }

  }
 
  public void sessionChanged(final Session session)  {
      if (EventQueue.isDispatchThread()) {
        sessionChangedEventHandler(session);

      } else {
         
          try {
              EventQueue.invokeAndWait(new Runnable() {
                  public void run() {
                  sessionChangedEventHandler(session);
                  }
              });
          } catch (Exception e) {
             
          }
      }

     
  }
 
  private void sessionChangedEventHandler(Session session) {
     

      getHistoryList().clear();
      getLogPanel().getListLog().setModel(getHistoryList());
    getView().getRequestPanel().setMessage("","", true);
    getView().getResponsePanel().setMessage("","", false);

    try {
        List list = getModel().getDb().getTableHistory().getHistoryList(session.getSessionId(), HistoryReference.TYPE_MANUAL);

        buildHistory(getHistoryList(), list);
    } catch (SQLException e) {}
     
  }
 
 
  private ProxyListenerLog getProxyListenerLog() {
        if (proxyListener == null) {
            proxyListener = new ProxyListenerLog(getModel(), getView(), getHistoryList());
        }
        return proxyListener;
  }
 
  public HistoryList getHistoryList() {
      if (historyList == null) {
          historyList = new HistoryList();
      }
      return historyList;
  }
 
  private void searchHistory(String filter, boolean isRequest) {
      Session session = getModel().getSession();
       
      synchronized (historyList) {
          try {
              List list = getModel().getDb().getTableHistory().getHistoryList(session.getSessionId(), HistoryReference.TYPE_MANUAL, filter, isRequest);
             
              buildHistory(getHistoryList(), list);
          } catch (SQLException e) {}
      }

     
  }
 
  private void buildHistory(HistoryList historyList, List dbList) {

      HistoryReference historyRef = null;
      synchronized (historyList) {
          historyList.clear();
         
          for (int i=0; i<dbList.size(); i++) {
              int historyId = ((Integer) dbList.get(i)).intValue();

              try {
                      historyRef = new HistoryReference(historyId);
                      historyList.addElement(historyRef);
              } catch (Exception e) {};
          }
      }

   }
  /**
   * This method initializes filterDialog 
   *  
   * @return com.proofsecure.paros.extension.history.SearchDialog 
   */   
  private HistoryFilterDialog getFilterDialog() {
    if (filterDialog == null) {
      filterDialog = new HistoryFilterDialog(getView().getMainFrame(), true);
    }
    return filterDialog;
  }
  /**
   * This method initializes menuFilterHistoryByRequest 
   *  
   * @return javax.swing.JMenuItem 
   */   
  private JCheckBoxMenuItem getMenuFilterHistoryByRequest() {
    if (menuFilterHistoryByRequest == null) {
      menuFilterHistoryByRequest = new JCheckBoxMenuItem();
      menuFilterHistoryByRequest.setText("Filter History by Request...");
      menuFilterHistoryByRequest.addActionListener(new java.awt.event.ActionListener() {

        public void actionPerformed(java.awt.event.ActionEvent e) {   

            int result = showFilterDialog(true);
            switch(result)
            {
            case -1:  menuFilterHistoryByRequest.setSelected(false);
                  menuFilterHistoryByResponse.setSelected(false);
                  stateFilter = FILTER_NONE;
                  break;
            case 0:    menuFilterHistoryByRequest.setSelected(false);
                  menuFilterHistoryByResponse.setSelected(false);
                    if (stateFilter == FILTER_REQUEST) {
                      menuFilterHistoryByRequest.setSelected(true);
                    } else if (stateFilter == FILTER_RESPONSE) {
                        menuFilterHistoryByResponse.setSelected(true);
                    }
                    break;
            case 1:    menuFilterHistoryByRequest.setSelected(true);
                  menuFilterHistoryByResponse.setSelected(false);
                  stateFilter = FILTER_REQUEST;
                  break;
            }
        }
      });

    }
    return menuFilterHistoryByRequest;
  }
 
  private int showFilterDialog(boolean isRequest) {
    HistoryFilterDialog dialog = getFilterDialog();
    dialog.setModal(true);
    int exit = dialog.showDialog();
    int result = 0;    // cancel, state unchanged
    if (exit == JOptionPane.OK_OPTION) {
        filter = dialog.getPattern();
        getProxyListenerLog().setFilter(filter);
        searchHistory(filter, isRequest);
        result = 1;    // applied
       
    } else if (exit == JOptionPane.NO_OPTION) {
        filter = "";
        getProxyListenerLog().setFilter(filter);
        searchHistory(filter, isRequest);
        result = -1// reset
    }
   
    return result;
  }
 
  /**
   * This method initializes menuFilterHistoryByResponse 
   *  
   * @return javax.swing.JMenuItem 
   */   
  private JCheckBoxMenuItem getMenuFilterHistoryByResponse() {
    if (menuFilterHistoryByResponse == null) {
      menuFilterHistoryByResponse = new JCheckBoxMenuItem();
      menuFilterHistoryByResponse.setText("Filter History by Response...");
      menuFilterHistoryByResponse.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent e) {
            int result = showFilterDialog(false);
            switch(result) {
          case -1:  menuFilterHistoryByRequest.setSelected(false);
                menuFilterHistoryByResponse.setSelected(false);
                stateFilter = FILTER_NONE;
                break;

          case 0:    menuFilterHistoryByRequest.setSelected(false);
                menuFilterHistoryByResponse.setSelected(false);
                  if (stateFilter == FILTER_REQUEST) {
                    menuFilterHistoryByRequest.setSelected(true);
                  } else if (stateFilter == FILTER_RESPONSE) {
                      menuFilterHistoryByResponse.setSelected(true);
                  }
                  break;
          case 1:    menuFilterHistoryByRequest.setSelected(false);
                menuFilterHistoryByResponse.setSelected(true);
                stateFilter = FILTER_RESPONSE;
                break;
          }

        }
      });
    }
    return menuFilterHistoryByResponse;
  }
  /**
   * This method initializes popupMenuDeleteHistory 
   *  
   * @return org.parosproxy.paros.extension.history.PopupMenuDeleteHistory 
   */   
  private PopupMenuDeleteHistory getPopupMenuDeleteHistory() {
    if (popupMenuDeleteHistory == null) {
      popupMenuDeleteHistory = new PopupMenuDeleteHistory();
      popupMenuDeleteHistory.setExtension(this);
    }
    return popupMenuDeleteHistory;
  }
  /**
   * This method initializes popupMenuPurgeHistory 
   *  
   * @return org.parosproxy.paros.extension.history.PopupMenuPurgeHistory 
   */   
  private PopupMenuPurgeHistory getPopupMenuPurgeHistory() {
    if (popupMenuPurgeHistory == null) {
      popupMenuPurgeHistory = new PopupMenuPurgeHistory();
      popupMenuPurgeHistory.setExtension(this);

    }
    return popupMenuPurgeHistory;
  }
  /**
   * This method initializes popupMenuResend 
   *  
   * @return org.parosproxy.paros.extension.history.PopupMenuResend 
   */   
  private PopupMenuResend getPopupMenuResend() {
    if (popupMenuResend == null) {
      popupMenuResend = new PopupMenuResend();
      popupMenuResend.setExtension(this);
    }
    return popupMenuResend;
  }
  /**
   * This method initializes resendDialog 
   *  
   * @return org.parosproxy.paros.extension.history.ResendDialog 
   */   
  ManualRequestEditorDialog getResendDialog() {
    if (resendDialog == null) {
      resendDialog = new ManualRequestEditorDialog(getView().getMainFrame(), false, false, this);
      resendDialog.setSize(500, 600);
      resendDialog.setTitle("Resend");
    }
    return resendDialog;
  }
 
  /**
   * This method initializes popupMenuExport 
   *  
   * @return org.parosproxy.paros.extension.history.PopupMenuExport 
   */   
  private PopupMenuExportMessage getPopupMenuExportMessage() {
    if (popupMenuExportMessage == null) {
      popupMenuExportMessage = new PopupMenuExportMessage();
      popupMenuExportMessage.setExtension(this);

    }
    return popupMenuExportMessage;
  }
  /**
   * This method initializes popupMenuExport1 
   *  
   * @return org.parosproxy.paros.extension.history.PopupMenuExport 
   */   
  private PopupMenuExportMessage getPopupMenuExportMessage2() {
    if (popupMenuExportMessage2 == null) {
      popupMenuExportMessage2 = new PopupMenuExportMessage();
      popupMenuExportMessage2.setExtension(this);
    }
    return popupMenuExportMessage2;
  }

    /**
     * This method initializes popupMenuExportResponse 
     *  
     * @return org.parosproxy.paros.extension.history.PopupMenuExportResponse 
     */
    private PopupMenuExportResponse getPopupMenuExportResponse() {
        if (popupMenuExportResponse == null) {
            popupMenuExportResponse = new PopupMenuExportResponse();
            popupMenuExportResponse.setExtension(this);
        }
        return popupMenuExportResponse;
    }

    /**
     * This method initializes popupMenuExportResponse2 
     *  
     * @return org.parosproxy.paros.extension.history.PopupMenuExportResponse 
     */
    private PopupMenuExportResponse getPopupMenuExportResponse2() {
        if (popupMenuExportResponse2 == null) {
            popupMenuExportResponse2 = new PopupMenuExportResponse();
            popupMenuExportResponse2.setExtension(this);

        }
        return popupMenuExportResponse2;
    }

    /**
     * This method initializes popupMenuEmbeddedBrowser 
     *  
     * @return org.parosproxy.paros.extension.history.PopupMenuEmbeddedBrowser 
     */
    private PopupMenuEmbeddedBrowser getPopupMenuEmbeddedBrowser() {
        if (popupMenuEmbeddedBrowser == null) {
            popupMenuEmbeddedBrowser = new PopupMenuEmbeddedBrowser();
            popupMenuEmbeddedBrowser.setExtension(this);

        }
        return popupMenuEmbeddedBrowser;
    }

    /**
     * This method initializes popupMenuEmbeddedBrowser2 
     *  
     * @return org.parosproxy.paros.extension.history.PopupMenuEmbeddedBrowser 
     */
    private PopupMenuEmbeddedBrowser getPopupMenuEmbeddedBrowser2() {
        if (popupMenuEmbeddedBrowser2 == null) {
            popupMenuEmbeddedBrowser2 = new PopupMenuEmbeddedBrowser();
            popupMenuEmbeddedBrowser2.setExtension(this);

        }
        return popupMenuEmbeddedBrowser2;
    }

    private PopupMenuTag getPopupMenuTag() {
        if (popupMenuTag == null) {
            popupMenuTag = new PopupMenuTag();
            popupMenuTag.setExtension(this);

        }
        return popupMenuTag;
    }
   
    boolean browserDisplay(HistoryReference ref, HttpMessage msg) {
       
        boolean isShow = false;
        String contentType = msg.getResponseHeader().getHeader(HttpHeader.CONTENT_TYPE);
        if (contentType != null) {
            if (contentType.indexOf("text/html") >= 0 || contentType.indexOf("text/plain") >= 0) {
                isShow = true;
            } else if (msg.getResponseHeader().isImage()) {
                isShow = true;
            } else if (contentType.indexOf("application/pdf") >= 0)  {
                isShow = true;
            }
        }

        if (!isShow) {
            return isShow;
        }
       
        try {
            if (!getBrowserDialog().isVisible()) {
                getBrowserDialog().setVisible(true);
            }
           
            browser = getBrowserDialog().getEmbeddedBrowser();
            browser.stop();
            browser.setVisible(true);
            CacheProcessingItem item = new CacheProcessingItem(ref, msg);
            Proxy proxy = Control.getSingleton().getProxy();
            proxy.setEnableCacheProcessing(true);
            proxy.addCacheProcessingList(item);
           
            getBrowserDialog().setURLTitle(msg.getRequestHeader().getURI().toString());
            if (msg.getRequestHeader().getMethod().equalsIgnoreCase(HttpRequestHeader.POST)) {
                browser.setURL(new java.net.URL(msg.getRequestHeader().getURI().toString()), msg.getRequestBody().toString());
            } else {
                browser.setURL(new java.net.URL(msg.getRequestHeader().getURI().toString()));
            }
        } catch (Exception e) {
           
        }
       
        return isShow;
    }
   
    /**
     * This method initializes browserDialog   
     * 
     * @return org.parosproxy.paros.extension.history.BrowserDialog
     */
    BrowserDialog getBrowserDialog() {
        if (browserDialog == null) {
            browserDialog = new BrowserDialog(getView().getMainFrame(), false);
        }
        return browserDialog;
    }
   
    private static Pattern patternWindows = Pattern.compile("window", Pattern.CASE_INSENSITIVE);
//  private static Pattern patternLinux = Pattern.compile("linux", Pattern.CASE_INSENSITIVE);

    static boolean isEnableForNativePlatform() {
      String os_name = System.getProperty("os.name");
      Matcher matcher = patternWindows.matcher(os_name);
      if (matcher.find()) {
          return true;
      }
     
      return false;

 
         }
TOP

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

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.