/*
* 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.encoder2;
import java.awt.Frame;
import java.awt.Toolkit;
import java.awt.event.KeyEvent;
import java.net.MalformedURLException;
import java.net.URL;
import javax.swing.KeyStroke;
import javax.swing.text.JTextComponent;
import org.parosproxy.paros.Constant;
import org.parosproxy.paros.extension.ExtensionAdaptor;
import org.parosproxy.paros.extension.ExtensionHook;
import org.parosproxy.paros.extension.OptionsChangedListener;
import org.parosproxy.paros.model.OptionsParam;
import org.zaproxy.zap.view.ZapMenuItem;
public class ExtensionEncoder2 extends ExtensionAdaptor implements OptionsChangedListener {
private EncodeDecodeDialog encodeDecodeDialog = null;
private PopupEncoder2Menu popupEncodeMenu = null;
private ZapMenuItem toolsMenuEncoder = null;
private EncodeDecodeParamPanel optionsPanel;
private EncodeDecodeParam params;
public ExtensionEncoder2() {
super("ExtensionEncode2");
this.setOrder(22);
}
@Override
public void hook(ExtensionHook extensionHook) {
super.hook(extensionHook);
if (getView() != null) {
extensionHook.getHookMenu().addPopupMenuItem(getPopupMenuEncode());
extensionHook.getHookMenu().addToolsMenuItem(getToolsMenuItemEncoder());
extensionHook.getHookView().addOptionPanel(getOptionsPanel());
extensionHook.addOptionsParamSet(getParams());
extensionHook.addOptionsChangedListener(this);
}
}
private ZapMenuItem getToolsMenuItemEncoder() {
if (toolsMenuEncoder == null) {
toolsMenuEncoder = new ZapMenuItem("enc2.tools.menu.encdec",
KeyStroke.getKeyStroke(KeyEvent.VK_E, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask(), false));
toolsMenuEncoder.addActionListener(new java.awt.event.ActionListener() {
@Override
public void actionPerformed(java.awt.event.ActionEvent e) {
showEncodeDecodeDialog(null);
}
});
}
return toolsMenuEncoder;
}
private void showEncodeDecodeDialog(JTextComponent lastInvoker) {
if (encodeDecodeDialog == null) {
encodeDecodeDialog = new EncodeDecodeDialog();
encodeDecodeDialog.updateOptions(getParams());
/*
// TODO doesnt work yet
ExtensionHelp.enablePopupHelpKey(
encodeDecodeDialog,
"ui.tabs.break");
*/
} else {
if ((encodeDecodeDialog.getState() & Frame.ICONIFIED) == Frame.ICONIFIED ) {
// bring up to front if iconfied
encodeDecodeDialog.setState(Frame.NORMAL);
}
}
encodeDecodeDialog.setVisible(true);
if (lastInvoker != null) {
encodeDecodeDialog.setInputField(lastInvoker.getSelectedText());
}
}
/**
* This method initializes popupEncodeMenu
*
* @return org.parosproxy.paros.extension.ExtensionPopupMenu
*/
private PopupEncoder2Menu getPopupMenuEncode() {
if (popupEncodeMenu== null) {
popupEncodeMenu = new PopupEncoder2Menu();
popupEncodeMenu.setText(Constant.messages.getString("enc2.popup"));
popupEncodeMenu.addActionListener(new java.awt.event.ActionListener() {
@Override
public void actionPerformed(java.awt.event.ActionEvent e) {
showEncodeDecodeDialog(popupEncodeMenu.getLastInvoker());
}
});
}
return popupEncodeMenu;
}
@Override
public String getAuthor() {
return Constant.ZAP_TEAM;
}
@Override
public String getDescription() {
return Constant.messages.getString("enc2.desc");
}
@Override
public URL getURL() {
try {
return new URL(Constant.ZAP_HOMEPAGE);
} catch (MalformedURLException e) {
return null;
}
}
private EncodeDecodeParamPanel getOptionsPanel() {
if (optionsPanel == null) {
optionsPanel = new EncodeDecodeParamPanel();
}
return optionsPanel;
}
public EncodeDecodeParam getParams() {
if (params == null) {
params = new EncodeDecodeParam();
}
return params;
}
@Override
public void optionsChanged(OptionsParam optionsParam) {
if (encodeDecodeDialog != null) {
encodeDecodeDialog.updateOptions(getParams());
}
}
/**
* No database tables used, so all supported
*/
@Override
public boolean supportsDb(String type) {
return true;
}
}