Package org.parosproxy.paros.extension

Source Code of org.parosproxy.paros.extension.ExtensionLoader

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

import java.util.List;
import java.util.Vector;

import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;

import org.apache.log4j.Logger;
import org.parosproxy.paros.CommandLine;
import org.parosproxy.paros.common.AbstractParam;
import org.parosproxy.paros.control.Proxy;
import org.parosproxy.paros.core.proxy.ProxyListener;
import org.parosproxy.paros.model.Model;
import org.parosproxy.paros.model.OptionsParam;
import org.parosproxy.paros.model.Session;
import org.parosproxy.paros.view.AbstractParamDialog;
import org.parosproxy.paros.view.AbstractParamPanel;
import org.parosproxy.paros.view.SiteMapPanel;
import org.parosproxy.paros.view.TabbedPanel;
import org.parosproxy.paros.view.View;
import org.zaproxy.zap.view.SiteMapListener;


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

    private Vector<Extension> extensionList = new Vector<Extension>();
    private Vector<ExtensionHook> hookList = new Vector<ExtensionHook>();
    private Model model = null;

    private View view = null;
   
  // ZAP: Added logger
    private Logger logger = Logger.getLogger(ExtensionLoader.class);

    public ExtensionLoader(Model model, View view) {
       
        this.model = model;
        this.view = view;
    }

    public void addExtension(Extension extension) {
        extensionList.add(extension);
    }
   
    public void destroyAllExtension() {
        for (int i=0; i<getExtensionCount(); i++) {
            getExtension(i).destroy();
        }
       
    }
   
    public Extension getExtension(int i) {
        return (Extension) extensionList.get(i);
    }
   
    public Extension getExtension(String name) {
        if (name == null)
            return null;

        for (int i=0; i<extensionList.size(); i++) {
            Extension p = getExtension(i);
            if (p.getName().equalsIgnoreCase(name)) {
                return p;
            }
        }
       
        return null;
    }
   
    public int getExtensionCount() {
        return extensionList.size();
    }
   
    public void hookProxyListener(Proxy proxy) {
        for (int i=0; i<getExtensionCount(); i++) {
            ExtensionHook hook = (ExtensionHook) hookList.get(i);
            List<ProxyListener> listenerList = hook.getProxyListenerList();
            for (int j=0; j<listenerList.size(); j++) {
                try {
                    ProxyListener listener = (ProxyListener) listenerList.get(j);
                    if (listener != null) {
                        proxy.addProxyListener(listener);
                    }
                } catch (Exception e) {
                  // ZAP: Log the exception
                  logger.error(e.getMessage(), e);
                }
            }
        }
       
    }
   
// ZAP: Added support for site map listeners
    public void hookSiteMapListener(SiteMapPanel siteMapPanel) {
        for (int i=0; i<getExtensionCount(); i++) {
            ExtensionHook hook = (ExtensionHook) hookList.get(i);
            List<SiteMapListener> listenerList = hook.getSiteMapListenerList();
            for (int j=0; j<listenerList.size(); j++) {
                try {
                  SiteMapListener listener = (SiteMapListener) listenerList.get(j);
                    if (listener != null) {
                      siteMapPanel.addSiteMapListenner(listener);
                    }
                } catch (Exception e) {
                  // ZAP: Log the exception
                  logger.error(e.getMessage(), e);
                }
            }
        }
       
    }
   
    public void optionsChangedAllPlugin(OptionsParam options) {
        for (int i=0; i<getExtensionCount(); i++) {
            ExtensionHook hook = (ExtensionHook) hookList.get(i);
            List<OptionsChangedListener> listenerList = hook.getOptionsChangedListenerList();
            for (int j=0; j<listenerList.size(); j++) {
                try {
                    OptionsChangedListener listener = (OptionsChangedListener) listenerList.get(j);
                    if (listener != null) {
                        listener.OptionsChanged(options);
                    }
                } catch (Exception e) {
                  // ZAP: Log the exception
                  logger.error(e.getMessage(), e);
                }
            }
           
        }
    }
   
    public void runCommandLine() {
        ExtensionHook hook = null;
        Extension ext = null;
        for (int i=0; i<getExtensionCount(); i++) {
            ext = getExtension(i);
            hook = (ExtensionHook) hookList.get(i);
            if (ext instanceof CommandLineListener) {
                CommandLineListener listener = (CommandLineListener) ext;
                listener.execute(hook.getCommandLineArgument());
            }
        }
    }
   
    public void sessionChangedAllPlugin(Session session) {
        for (int i=0; i<getExtensionCount(); i++) {
            ExtensionHook hook = (ExtensionHook) hookList.get(i);
            List<SessionChangedListener> listenerList = hook.getSessionListenerList();
            for (int j=0; j<listenerList.size(); j++) {
                try {
                    SessionChangedListener listener = (SessionChangedListener) listenerList.get(j);
                    if (listener != null) {
                        listener.sessionChanged(session);
                    }
                } catch (Exception e) {
                  // ZAP: Log the exception
                  logger.error(e.getMessage(), e);
                }
            }
           
        }
    }
   

    public void startAllExtension() {
        for (int i=0; i<getExtensionCount(); i++) {
            getExtension(i).start();
        }
       
    }
   
    public void startLifeCycle() {
        initAllExtension();
        initModelAllExtension(model);
        initXMLAllExtension(model.getSession(), model.getOptionsParam());
        initViewAllExtension(view);
       
        hookAllExtension();
        startAllExtension();
       
    }
   
    public void stopAllExtension() {
        for (int i=0; i<getExtensionCount(); i++) {
            getExtension(i).stop();
        }
       
    }
   
    @SuppressWarnings("unchecked")
  private void addParamPanel(List panelList, AbstractParamDialog dialog) {
        AbstractParamPanel panel = null;
        String[] ROOT = {};
        for (int i=0; i<panelList.size(); i++) {
            try {
                panel = (AbstractParamPanel) panelList.get(i);
                dialog.addParamPanel(ROOT, panel);
            } catch (Exception e) {
              // ZAP: Log the exception
              logger.error(e.getMessage(), e);
            }
        }
       
    }
   
    private void addTabPanel(List<AbstractPanel> panelList, TabbedPanel tab) {
        AbstractPanel panel = null;
        for (int i=0; i<panelList.size(); i++) {
            try {
                panel = panelList.get(i);
                tab.add(panel, panel.getName());
                // ZAP: added icon
            tab.addTab(panel.getName() + " ", panel.getIcon(), panel);
            } catch (Exception e) {
              // ZAP: Log the exception
              logger.error(e.getMessage(), e);
            }
        }
    }


   
   
    private void hookAllExtension() {
        ExtensionHook extHook = null;
        for (int i=0; i<getExtensionCount(); i++) {
            extHook = new ExtensionHook(model, view);
            getExtension(i).hook(extHook);
            hookList.add(extHook);
           
            if (view != null) {
                // no need to hook view if no GUI
                hookView(view, extHook);
                hookMenu(view, extHook);

            }
            hookOptions(extHook);
        }
       
        if (view != null) {
            view.getMainFrame().getMainMenuBar().validate();
            view.getMainFrame().validate();
        }

    }
   
    /**
     * Hook command line listener with the command line processor
     * @param cmdLine
     */
    public void hookCommandLineListener (CommandLine cmdLine) throws Exception {
        Vector<CommandLineArgument[]> allCommandLineList = new Vector<CommandLineArgument[]>();
        for (int i=0; i < hookList.size(); i++) {
            ExtensionHook hook = (ExtensionHook) hookList.get(i);
            CommandLineArgument[] arg = hook.getCommandLineArgument();
            if (arg.length > 0) {
                allCommandLineList.add(arg);
            }
        }
       
        cmdLine.parse(allCommandLineList);
    }
   
    private void hookMenu(View view, ExtensionHook hook) {

        if (view == null) {
            return;
        }
       
        if (hook.getHookMenu() == null) {
            return;
        }
       
        ExtensionHookMenu hookMenu = hook.getHookMenu();
       
        // init menus
        List<JMenuItem> list = null;
        JMenuItem item = null;
        JMenu menu = null;
        JMenu menuFile = view.getMainFrame().getMainMenuBar().getMenuFile();
        JMenu menuEdit = view.getMainFrame().getMainMenuBar().getMenuEdit();
        JMenu menuView = view.getMainFrame().getMainMenuBar().getMenuView();
        JMenu menuAnalyse = view.getMainFrame().getMainMenuBar().getMenuAnalyse();
        JMenu menuTools = view.getMainFrame().getMainMenuBar().getMenuTools();
        JMenu menuHelp = view.getMainFrame().getMainMenuBar().getMenuHelp();
        JMenu menuReport = view.getMainFrame().getMainMenuBar().getMenuReport();
       
        // process new menus

        JMenuBar bar = view.getMainFrame().getMainMenuBar();
        list = hookMenu.getNewMenus();
        for (int i=0; i<list.size(); i++) {
            menu = (JMenu) list.get(i);
            bar.add(menu, bar.getMenuCount()-2)// 2 menus at the back (Tools/Help)
        }

        // process menu - File
        list = hookMenu.getFile();
        int existingCount = 2;
       
        for (int i=0; i<list.size(); i++) {
            item = (JMenuItem) list.get(i);
            if (item == null) continue;
            if (item == ExtensionHookMenu.MENU_SEPARATOR) {
                menuFile.addSeparator();
                continue;
            }

            menuFile.add(item, menuFile.getItemCount()-existingCount);
        }

       
        // process menu - Tools
        list = hookMenu.getTools();
        existingCount = 2;
       
        for (int i=0; i<list.size(); i++) {
            item = (JMenuItem) list.get(i);
            if (item == null) continue;
            if (item == ExtensionHookMenu.MENU_SEPARATOR) {
                menuTools.addSeparator();
                continue;
            }

            menuTools.add(item, menuTools.getItemCount()-existingCount);
        }

        // process Edit menu
        list = hookMenu.getEdit();
       
        for (int i=0; i<list.size(); i++) {
            item = (JMenuItem) list.get(i);
            if (item == null) continue;
            if (item == ExtensionHookMenu.MENU_SEPARATOR) {
                menuEdit.addSeparator();
                continue;
            }
            menuEdit.add(item, menuEdit.getItemCount());
        }

        // process View menu
        list = hookMenu.getView();
       
        for (int i=0; i<list.size(); i++) {
            item = (JMenuItem) list.get(i);
            if (item == null) continue;
            if (item == ExtensionHookMenu.MENU_SEPARATOR) {
                menuView.addSeparator();
                continue;
            }

            menuView.add(item, menuView.getItemCount());
        }

        // process Analyse menu
        list = hookMenu.getAnalyse();
       
        for (int i=0; i<list.size(); i++) {
            item = (JMenuItem) list.get(i);
            if (item == null) continue;
            if (item == ExtensionHookMenu.MENU_SEPARATOR) {
                menuAnalyse.addSeparator();
                continue;
            }

            menuAnalyse.add(item, menuAnalyse.getItemCount());
        }
       
        // process popup menus
       
        list = hookMenu.getPopupMenus();
       
        for (int i=0; i<list.size(); i++) {
            item = (ExtensionPopupMenu) list.get(i);
            if (item == null) continue;

            view.getPopupList().add(item);
        }
       
        // ZAP: process Help menu
        list = hookMenu.getHelpMenus();
       
        for (int i=0; i<list.size(); i++) {
            item = (JMenuItem) list.get(i);
            if (item == null) continue;
            if (item == ExtensionHookMenu.MENU_SEPARATOR) {
                menuHelp.addSeparator();
                continue;
            }

            menuHelp.add(item, menuHelp.getItemCount());
        }
        // ZAP: process Report menu
        list = hookMenu.getReportMenus();
       
        for (int i=0; i<list.size(); i++) {
            item = (JMenuItem) list.get(i);
            if (item == null) continue;
            if (item == ExtensionHookMenu.MENU_SEPARATOR) {
                menuReport.addSeparator();
                continue;
            }

            menuReport.add(item, menuReport.getItemCount());
        }

    }
   
    private void hookOptions(ExtensionHook hook) {
        Vector<AbstractParam> list = hook.getOptionsParamSetList();
        for (int i=0; i<list.size(); i++) {
            try {
                AbstractParam paramSet = list.get(i);
                model.getOptionsParam().addParamSet(paramSet);
            } catch (Exception e) {
              // ZAP: Log the exception
              logger.error(e.getMessage(), e);
            }
        }
    }


   
    private void hookView(View view, ExtensionHook hook) {
        if (view == null) {
            return;
        }
       
        ExtensionHookView pv = hook.getHookView();
        if (pv == null) {
            return;
        }
       
        addTabPanel(pv.getSelectPanel(), view.getWorkbench().getTabbedSelect());
        addTabPanel(pv.getWorkPanel(), view.getWorkbench().getTabbedWork());
        addTabPanel(pv.getStatusPanel(), view.getWorkbench().getTabbedStatus());
        addParamPanel(pv.getSessionPanel(), view.getSessionDialog(""));
        addParamPanel(pv.getOptionsPanel(), view.getOptionsDialog(""));
       
       
    }
   
    private void initAllExtension() {

        for (int i=0; i<getExtensionCount(); i++) {
            getExtension(i).init();
        }
    }
   

   
    private void initModelAllExtension(Model model) {
        for (int i=0; i<getExtensionCount(); i++) {
            getExtension(i).initModel(model);
        }
       
    }

    private void initViewAllExtension(View view) {

        if (view == null) {
            return;
        }
       
        for (int i=0; i<getExtensionCount(); i++) {
            getExtension(i).initView(view);
        }

    }

    private void initXMLAllExtension(Session session, OptionsParam options) {
        for (int i=0; i<getExtensionCount(); i++) {
            getExtension(i).initXML(session, options);
        }       
    }
}
TOP

Related Classes of org.parosproxy.paros.extension.ExtensionLoader

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.