Package org.zaproxy.zap.extension.search

Source Code of org.zaproxy.zap.extension.search.SearchPanel

/*
* Zed Attack Proxy (ZAP) and its related class files.
*
* ZAP is an HTTP/HTTPS proxy for assessing web application security.
*
* Copyright 2010 psiinon@gmail.com
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*   http://www.apache.org/licenses/LICENSE-2.0
*  
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.zaproxy.zap.extension.search;

import java.awt.CardLayout;
import java.awt.Color;
import java.awt.GridBagConstraints;

import javax.swing.DefaultListModel;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.text.BadLocationException;
import javax.swing.text.DefaultHighlighter;
import javax.swing.text.Highlighter;
import javax.swing.text.Highlighter.HighlightPainter;

import org.parosproxy.paros.extension.AbstractPanel;
import org.parosproxy.paros.network.HttpMessage;
import org.parosproxy.paros.view.HttpPanel;
/**
*
* To change the template for this generated type comment go to
* Window - Preferences - Java - Code Generation - Code and Comments
*/
public class SearchPanel extends AbstractPanel {
 
  private static final long serialVersionUID = 1L;

  public static final String PANEL_NAME = "search";

  private ExtensionSearch extension;
 
  private javax.swing.JPanel panelCommand = null;
  private javax.swing.JToolBar panelToolbar = null;
  private JScrollPane jScrollPane = null;

  private JTextField regEx = null;
  private JButton btnSearch = null;
  private JComboBox searchType = null;
  private JButton btnNext = null;
  private JButton btnPrev = null;
 
  private JList resultsList = new JList();
  private DefaultListModel resultsModel;

  private HttpPanel requestPanel = null;
  private HttpPanel responsePanel = null;

    private SearchPanelCellRenderer searchPanelCellRenderer = null;

    /**
     *
     */
    public SearchPanel() {
        super();
     initialize();
    }

  public ExtensionSearch getExtension() {
    return extension;
  }

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

  /**
   * This method initializes this
   *
   * @return void
   */
  private  void initialize() {
        this.setLayout(new CardLayout());
        this.setSize(474, 251);
        this.setName("Search");
        // 'magnifying glass' icon
    this.setIcon(new ImageIcon(getClass().getResource("/resource/icons/find.png")));
        this.add(getPanelCommand(), getPanelCommand().getName());

  }
  /**

   * This method initializes panelCommand 

   *  

   * @return javax.swing.JPanel 

   */   
  /**/
  private javax.swing.JPanel getPanelCommand() {
    if (panelCommand == null) {

      panelCommand = new javax.swing.JPanel();
      panelCommand.setLayout(new java.awt.GridBagLayout());
      panelCommand.setName("Search Panel");
     
      GridBagConstraints gridBagConstraints1 = new GridBagConstraints();
      GridBagConstraints gridBagConstraints2 = new GridBagConstraints();

      gridBagConstraints1.gridx = 0;
      gridBagConstraints1.gridy = 0;
      gridBagConstraints1.weightx = 1.0D;
      gridBagConstraints1.insets = new java.awt.Insets(2,2,2,2);
      gridBagConstraints1.fill = java.awt.GridBagConstraints.HORIZONTAL;
      gridBagConstraints1.anchor = java.awt.GridBagConstraints.NORTHWEST;
     
      gridBagConstraints2.gridx = 0;
      gridBagConstraints2.gridy = 1;
      gridBagConstraints2.weightx = 1.0;
      gridBagConstraints2.weighty = 1.0;
      gridBagConstraints2.insets = new java.awt.Insets(0,0,0,0);
      gridBagConstraints2.fill = java.awt.GridBagConstraints.BOTH;
      gridBagConstraints2.anchor = java.awt.GridBagConstraints.NORTHWEST;
     
      panelCommand.add(this.getPanelToolbar(), gridBagConstraints1);
      panelCommand.add(getJScrollPane(), gridBagConstraints2);

    }
    return panelCommand;
  }
  /**/

  private javax.swing.JToolBar getPanelToolbar() {
    if (panelToolbar == null) {
     
      panelToolbar = new javax.swing.JToolBar();
      panelToolbar.setLayout(new java.awt.GridBagLayout());
      panelToolbar.setEnabled(true);
      panelToolbar.setFloatable(false);
      panelToolbar.setRollover(true);
      panelToolbar.setPreferredSize(new java.awt.Dimension(800,30));
      panelToolbar.setFont(new java.awt.Font("Dialog", java.awt.Font.PLAIN, 12));
      panelToolbar.setName("Search Toolbar");
     
      GridBagConstraints gridBagConstraints1 = new GridBagConstraints();
      GridBagConstraints gridBagConstraints2 = new GridBagConstraints();
      GridBagConstraints gridBagConstraints3 = new GridBagConstraints();
      GridBagConstraints gridBagConstraints4 = new GridBagConstraints();
      GridBagConstraints gridBagConstraints5 = new GridBagConstraints();
      GridBagConstraints gridBagConstraintsX = new GridBagConstraints();

      gridBagConstraints1.gridx = 0;
      gridBagConstraints1.gridy = 0;
      gridBagConstraints1.insets = new java.awt.Insets(0,0,0,0);
      gridBagConstraints1.anchor = java.awt.GridBagConstraints.WEST;
     
      gridBagConstraints2.gridx = 1;
      gridBagConstraints2.gridy = 0;
      gridBagConstraints2.insets = new java.awt.Insets(0,0,0,0);
      gridBagConstraints2.anchor = java.awt.GridBagConstraints.WEST;

      gridBagConstraints3.gridx = 2;
      gridBagConstraints3.gridy = 0;
      gridBagConstraints3.insets = new java.awt.Insets(0,0,0,0);
      gridBagConstraints3.anchor = java.awt.GridBagConstraints.WEST;

      gridBagConstraints4.gridx = 3;
      gridBagConstraints4.gridy = 0;
      gridBagConstraints4.insets = new java.awt.Insets(0,0,0,0);
      gridBagConstraints4.anchor = java.awt.GridBagConstraints.WEST;

      gridBagConstraints5.gridx = 4;
      gridBagConstraints5.gridy = 0;
      gridBagConstraints5.insets = new java.awt.Insets(0,0,0,0);
      gridBagConstraints5.anchor = java.awt.GridBagConstraints.WEST;

      gridBagConstraintsX.gridx = 5;
      gridBagConstraintsX.gridy = 0;
      gridBagConstraintsX.weightx = 1.0;
      gridBagConstraintsX.weighty = 1.0;
      gridBagConstraintsX.insets = new java.awt.Insets(0,0,0,0);
      gridBagConstraintsX.anchor = java.awt.GridBagConstraints.EAST;
      gridBagConstraintsX.fill = java.awt.GridBagConstraints.HORIZONTAL;

      JLabel t1 = new JLabel();

      panelToolbar.add(getRegExField(), gridBagConstraints1);
      panelToolbar.add(getSearchType(), gridBagConstraints2);
      panelToolbar.add(getBtnSearch(), gridBagConstraints3);
      panelToolbar.add(getBtnNext(), gridBagConstraints4);
      panelToolbar.add(getBtnPrev(), gridBagConstraints5);
      panelToolbar.add(t1, gridBagConstraintsX);
    }
    return panelToolbar;
  }
 
  private JButton getBtnSearch() {
    if (btnSearch == null) {
      btnSearch = new JButton();
      // 'magnifying glass' icon
      btnSearch.setIcon(new ImageIcon(getClass().getResource("/resource/icons/find.png")));
      btnSearch.setToolTipText("Search");

      btnSearch.addActionListener(new java.awt.event.ActionListener() {

        public void actionPerformed(java.awt.event.ActionEvent e) {
          doSearch();
        }
      });
    }
    return btnSearch;
  }

  private JButton getBtnNext() {
    if (btnNext == null) {
      btnNext = new JButton();
      btnNext.setText("Next");
      // 'arrow down' icon
      btnNext.setIcon(new ImageIcon(getClass().getResource("/resource/icons/arrow_down.png")));
      btnNext.setToolTipText("Next");

      btnNext.addActionListener(new java.awt.event.ActionListener() {

        public void actionPerformed(java.awt.event.ActionEvent e) {
          highlightNextResult();
        }
      });
    }
    return btnNext;
  }

  private JButton getBtnPrev() {
    if (btnPrev == null) {
      btnPrev = new JButton();
      btnPrev.setText("Previous");
      // 'arrow up' icon
      btnPrev.setIcon(new ImageIcon(getClass().getResource("/resource/icons/arrow_up.png")));
      btnPrev.setToolTipText("Previous");

      btnPrev.addActionListener(new java.awt.event.ActionListener() {

        public void actionPerformed(java.awt.event.ActionEvent e) {
          highlightPrevResult();
        }
      });
    }
    return btnPrev;
  }

  protected JTextField getRegExField () {
    if (regEx == null) {
      regEx = new JTextField();
      regEx.setHorizontalAlignment(javax.swing.JTextField.LEFT);
      regEx.setAlignmentX(0.0F);
      regEx.setPreferredSize(new java.awt.Dimension(250,25));
      regEx.setText("");
      regEx.setMinimumSize(new java.awt.Dimension(250,25));
      //regEx.addActionListener(this);
     
      regEx.addActionListener(new java.awt.event.ActionListener() {

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

    }
    return regEx;
  }
 
  private JScrollPane getJScrollPane() {
    if (jScrollPane == null) {
      jScrollPane = new JScrollPane();
      jScrollPane.setFont(new java.awt.Font("Dialog", java.awt.Font.PLAIN, 11));
      jScrollPane.setHorizontalScrollBarPolicy(javax.swing.JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
     
      resetSearchResults();
      jScrollPane.setViewportView(resultsList);
     
    }
    return jScrollPane;
  }

  public void resetSearchResults() {
    resultsModel = new DefaultListModel();
    resultsList.setModel(resultsModel);
        resultsList.setCellRenderer(getSearchPanelCellRenderer());

    resultsList.addListSelectionListener(new javax.swing.event.ListSelectionListener() {

      public void valueChanged(javax.swing.event.ListSelectionEvent e) {
          if (resultsList.getSelectedValue() == null) {
              return;
          }
         
          displayMessage(((SearchResult)resultsList.getSelectedValue()));
      }
    });
  }

 
  public void addSearchResult(SearchResult str) {
    resultsModel.addElement(str);
  }

    public void setDisplayPanel(HttpPanel requestPanel, HttpPanel responsePanel) {
        this.requestPanel = requestPanel;
        this.responsePanel = responsePanel;

    }
   
    private void doSearch() {
    extension.search(regEx.getText(),
        (ExtensionSearch.Type)searchType.getSelectedItem());
   
    // Select first result
    if (resultsList.getModel().getSize() > 0) {
      resultsList.setSelectedIndex(0);
      resultsList.requestFocus();
    }
    }
   
    private void displayMessage(SearchResult sr) {
        HttpMessage msg = sr.getMessage();
        if (msg.getRequestHeader().isEmpty()) {
            requestPanel.setMessage(null, true);
        } else {
            requestPanel.setMessage(msg, true);
        }
       
        if (msg.getResponseHeader().isEmpty()) {
            responsePanel.setMessage(null, false);
        } else {
            responsePanel.setMessage(msg, false);
        }
        highlightFirstResult(sr);
    }
   
    private void highlightMatch (SearchMatch sm) {
      JTextArea txtArea = null;
     
      switch (sm.getLocation()) {
      case REQUEST_HEAD: 
        txtArea = requestPanel.getTxtHeader();
        requestPanel.setTabFocus();
        requestPanel.requestFocus();
        break;
      case REQUEST_BODY: 
        txtArea = requestPanel.getTxtBody();
        requestPanel.setTabFocus();
        requestPanel.requestFocus();
        break;
      case RESPONSE_HEAD: 
        txtArea = responsePanel.getTxtHeader();
        responsePanel.setTabFocus();
        responsePanel.requestFocus();
        break;
      case RESPONSE_BODY: 
        txtArea = responsePanel.getTxtBody();
        responsePanel.setTabFocus();
        responsePanel.requestFocus();
        break;
      }
       
        Highlighter hilite = txtArea.getHighlighter();
        HighlightPainter painter = new DefaultHighlighter.DefaultHighlightPainter(Color.LIGHT_GRAY);
        try {
      hilite.removeAllHighlights();
      hilite.addHighlight(sm.getStart(), sm.getEnd(), painter);
      txtArea.setCaretPosition(sm.getStart());
    } catch (BadLocationException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
    }
   
    private void highlightFirstResult (SearchResult sr) {
      highlightMatch(sr.getFirstMatch(requestPanel, responsePanel));
    }

    protected void highlightNextResult () {
      if (resultsList.getSelectedValue() == null) {
          searchFocus();
        return;
      }
     
      SearchResult sr = (SearchResult)resultsList.getSelectedValue();
      SearchMatch sm = sr.getNextMatch();
     
      if (sm != null) {
        highlightMatch(sm);
      } else {
        // Next record
          if (resultsList.getSelectedIndex() < resultsList.getModel().getSize()) {
            resultsList.setSelectedIndex(resultsList.getSelectedIndex() + 1);
          }
      }
    }

    private void highlightLastResult (SearchResult sr) {
     
      highlightMatch(sr.getLastMatch(requestPanel, responsePanel));
    }

    protected void highlightPrevResult () {

      SearchResult sr = (SearchResult)resultsList.getSelectedValue();
      if (sr != null) {
        SearchMatch sm = sr.getPrevMatch();
       
        if (sm != null) {
          highlightMatch(sm);
        } else {
          // Previous record
            if (resultsList.getSelectedIndex() > 0) {
              resultsList.setSelectedIndex(resultsList.getSelectedIndex() - 1);
              highlightLastResult((SearchResult)resultsList.getSelectedValue());
            }
        }
      } else {
          searchFocus();
      }
    }

    private JComboBox getSearchType () {
      if (searchType == null) {
        searchType = new JComboBox();
        searchType.addItem(ExtensionSearch.Type.All);
        searchType.addItem(ExtensionSearch.Type.URL);
        searchType.addItem(ExtensionSearch.Type.Request);
        searchType.addItem(ExtensionSearch.Type.Response);
      }
      return searchType;
    }
   
    public void searchFocus() {
      this.setTabFocus();
        getRegExField().requestFocus();

    }

    private SearchPanelCellRenderer getSearchPanelCellRenderer() {
        if (searchPanelCellRenderer == null) {
          searchPanelCellRenderer = new SearchPanelCellRenderer();
            searchPanelCellRenderer.setSize(new java.awt.Dimension(328,21));
            searchPanelCellRenderer.setBackground(java.awt.Color.white);
            searchPanelCellRenderer.setFont(new java.awt.Font("MS Sans Serif", java.awt.Font.PLAIN, 12));
        }
        return searchPanelCellRenderer;
    }
}
TOP

Related Classes of org.zaproxy.zap.extension.search.SearchPanel

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.