/*
* Zed Attack Proxy (ZAP) and its related class files.
*
* ZAP is an HTTP/HTTPS proxy for assessing web application security.
*
* Copyright 2012 The ZAP Development Team
*
* 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.brk.impl.http;
import java.awt.Dimension;
import org.parosproxy.paros.db.DatabaseException;
import org.parosproxy.paros.extension.ExtensionHookMenu;
import org.parosproxy.paros.network.HttpMessage;
import org.parosproxy.paros.view.View;
import org.zaproxy.zap.extension.brk.BreakpointMessageInterface;
import org.zaproxy.zap.extension.brk.BreakpointsUiManagerInterface;
import org.zaproxy.zap.extension.brk.ExtensionBreak;
import org.zaproxy.zap.extension.httppanel.Message;
import org.zaproxy.zap.model.StructuralSiteNode;
public class HttpBreakpointsUiManagerInterface implements BreakpointsUiManagerInterface {
private BreakAddEditDialog breakDialog = null;
private ExtensionBreak extensionBreak;
private PopupMenuAddBreakSites popupMenuAddBreakSites = null;
private PopupMenuAddBreakHistory popupMenuAddBreakHistory = null;
public HttpBreakpointsUiManagerInterface(ExtensionHookMenu hookMenu, ExtensionBreak extensionBreak) {
this.extensionBreak = extensionBreak;
hookMenu.addPopupMenuItem(getPopupMenuAddBreakSites());
hookMenu.addPopupMenuItem(getPopupMenuAddBreakHistory());
}
@Override
public Class<HttpMessage> getMessageClass() {
return HttpMessage.class;
}
@Override
public Class<HttpBreakpointMessage> getBreakpointClass() {
return HttpBreakpointMessage.class;
}
@Override
public String getType() {
return "HTTP";
}
@Override
public void handleAddBreakpoint(Message aMessage) {
showAddDialog(aMessage);
}
public void handleAddBreakpoint(String url) {
showAddDialog(url, HttpBreakpointMessage.Match.regex);
}
void addBreakpoint(HttpBreakpointMessage breakpoint) {
extensionBreak.addBreakpoint(breakpoint);
}
@Override
public void handleEditBreakpoint(BreakpointMessageInterface breakpoint) {
showEditDialog((HttpBreakpointMessage)breakpoint);
}
void editBreakpoint(BreakpointMessageInterface oldBreakpoint, BreakpointMessageInterface newBreakpoint) {
extensionBreak.editBreakpoint(oldBreakpoint, newBreakpoint);
}
@Override
public void handleRemoveBreakpoint(BreakpointMessageInterface breakpoint) {
extensionBreak.removeBreakpoint(breakpoint);
}
@Override
public void reset() {
}
private void populateAddDialogAndSetVisible(
String url, HttpBreakpointMessage.Match match) {
breakDialog.init(
new HttpBreakpointMessage(url, HttpBreakpointMessage.Location.url,
match, false, true),
true);
breakDialog.setVisible(true);
}
private void showAddDialog(Message aMessage) {
HttpBreakpointMessage.Match match = HttpBreakpointMessage.Match.regex;
HttpMessage msg = (HttpMessage) aMessage;
String regex = "";
if (msg.getHistoryRef() != null &&
msg.getHistoryRef().getSiteNode() != null) {
try {
regex = new StructuralSiteNode(
msg.getHistoryRef().getSiteNode()).getRegexPattern(false);
} catch (DatabaseException e) {
// Ignore
}
}
if (regex.length() == 0 && msg.getRequestHeader().getURI() != null) {
// Just use the escaped url
regex = msg.getRequestHeader().getURI().toString();
match = HttpBreakpointMessage.Match.contains;
}
this.showAddDialog(regex, match);
}
private void showAddDialog(String url, HttpBreakpointMessage.Match match) {
if (breakDialog == null) {
breakDialog = new BreakAddEditDialog(this, View.getSingleton().getMainFrame(), new Dimension(407, 255));
}
populateAddDialogAndSetVisible(url, match);
}
private void populateEditDialogAndSetVisible(HttpBreakpointMessage breakpoint) {
breakDialog.init(breakpoint, false);
breakDialog.setVisible(true);
}
private void showEditDialog(HttpBreakpointMessage breakpoint) {
if (breakDialog == null) {
breakDialog = new BreakAddEditDialog(this, View.getSingleton().getMainFrame(), new Dimension(407, 255));
}
populateEditDialogAndSetVisible(breakpoint);
}
private PopupMenuAddBreakSites getPopupMenuAddBreakSites() {
if (popupMenuAddBreakSites == null) {
popupMenuAddBreakSites = new PopupMenuAddBreakSites(this);
}
return popupMenuAddBreakSites;
}
private PopupMenuAddBreakHistory getPopupMenuAddBreakHistory() {
if (popupMenuAddBreakHistory == null) {
popupMenuAddBreakHistory = new PopupMenuAddBreakHistory(extensionBreak);
}
return popupMenuAddBreakHistory;
}
}