package org.owasp.webscarab.plugin.identity.swing; import java.awt.Component; import java.awt.Window; import java.awt.event.ActionEvent; import java.util.List; import javax.swing.AbstractAction; import javax.swing.Action; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.SwingUtilities; import org.owasp.webscarab.model.ConversationID; import org.owasp.webscarab.model.FrameworkModel; import org.owasp.webscarab.model.HttpUrl; import org.owasp.webscarab.model.NamedValue; import org.owasp.webscarab.model.Request; import org.owasp.webscarab.model.Response; import org.owasp.webscarab.plugin.identity.Identity; import org.owasp.webscarab.ui.swing.SwingPluginUI; import org.owasp.webscarab.util.swing.ColumnDataModel; public class IdentityPanel extends javax.swing.JPanel implements SwingPluginUI { private Identity identity; private ColumnDataModel<ConversationID>[] conversationColumns; private Action[] conversationActions; private SelectTokenDialog std; public IdentityPanel(Identity identity) { this.identity = identity; add(new JLabel("Identity")); } @Override public String getPluginName() { return identity.getPluginName(); } @Override public JPanel getPanel() { return this; } @Override public Action[] getUrlActions() { return null; } @Override public ColumnDataModel<HttpUrl>[] getUrlColumns() { return null; } @Override public Action[] getConversationActions() { if (conversationActions == null) { conversationActions = new Action[] { new AddIdentityAction() }; } return conversationActions; } @Override public ColumnDataModel<ConversationID>[] getConversationColumns() { if (conversationColumns == null) { conversationColumns = new ColumnDataModel[] { new ColumnDataModel<ConversationID>("Identity", String.class) { public Object getValue(ConversationID key) { if (identity == null) return null; return identity .getFramework() .getModel() .getConversationModel() .getConversationProperty(key, "IDENTITY"); } } }; } return conversationColumns; } private class AddIdentityAction extends AbstractAction { private SelectTokenDialog std; /** Creates a new instance of ShowConversationAction */ public AddIdentityAction() { putValue(NAME, "Add identity"); putValue(SHORT_DESCRIPTION, "Associates an identity with this conversation"); putValue("CONVERSATION", null); } public void actionPerformed(ActionEvent e) { Object o = getValue("CONVERSATION"); if (o == null || !(o instanceof ConversationID)) return; ConversationID conversation = (ConversationID) o; FrameworkModel fm = identity.getFramework().getModel(); Request request = fm.getRequest(conversation); Response response = fm.getResponse(conversation); List<NamedValue> reqTokens = identity.getRequestTokens(request); List<NamedValue> respTokens = identity.getResponseTokens(response); Object c = getValue("COMPONENT"); Component component = null; if (c instanceof Component) component = (Component) c; if (std == null) { if (component == null) component = IdentityPanel.this; Window window = SwingUtilities.getWindowAncestor(component); std = new SelectTokenDialog(identity, window); } std.setConversation(conversation); std.setTokens(reqTokens, respTokens); std.setIdentities(identity.getIdentities()); std.setLocationRelativeTo(null); std.setVisible(true); boolean ok = !std.isCancelled(); if (ok) { NamedValue token = std.getSelectedToken(); String id = std.getSelectedIdentity(); identity.addTransition(conversation, token.getName(), token.getValue(), id); } } public void putValue(String key, Object value) { super.putValue(key, value); if (key != null && key.equals("CONVERSATION")) { if (value != null && value instanceof ConversationID) { setEnabled(true); } else { setEnabled(false); } } } } }