/*
* Zed Attack Proxy (ZAP) and its related class files.
*
* ZAP is an HTTP/HTTPS proxy for assessing web application security.
*
* Copyright 2013 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.users;
import java.awt.CardLayout;
import java.awt.GridBagLayout;
import javax.swing.JCheckBox;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.SortOrder;
import org.parosproxy.paros.Constant;
import org.parosproxy.paros.model.Session;
import org.parosproxy.paros.view.View;
import org.zaproxy.zap.model.Context;
import org.zaproxy.zap.users.User;
import org.zaproxy.zap.view.AbstractContextPropertiesPanel;
import org.zaproxy.zap.view.AbstractMultipleOptionsTablePanel;
import org.zaproxy.zap.view.LayoutHelper;
public class ContextUsersPanel extends AbstractContextPropertiesPanel {
private UsersMultipleOptionsPanel usersOptionsPanel;
private ContextUserAuthManager contextManager;
private ExtensionUserManagement extension;
private UsersTableModel usersTableModel;
/** The Constant serialVersionUID. */
private static final long serialVersionUID = -3920598166129639573L;
private static final String PANEL_NAME = Constant.messages.getString("users.panel.title");
public ContextUsersPanel(ExtensionUserManagement extension, int contextId) {
super(contextId);
this.contextManager = extension.getContextUserAuthManager(contextId);
this.extension = extension;
initialize();
}
public static String getPanelName(int contextId) {
// Panel names have to be unique, so prefix with the context id
return contextId + ": " + PANEL_NAME;
}
private void initialize() {
this.setLayout(new CardLayout());
this.setName(getPanelName(getContextIndex()));
this.setLayout(new GridBagLayout());
this.add(new JLabel(Constant.messages.getString("users.panel.description")),
LayoutHelper.getGBC(0, 0, 1, 1.0d, 0.0d));
usersTableModel = new UsersTableModel();
usersOptionsPanel = new UsersMultipleOptionsPanel(this.extension, usersTableModel, getContextIndex());
this.add(usersOptionsPanel, LayoutHelper.getGBC(0, 1, 1, 1.0d, 1.0d));
}
@Override
public String getHelpIndex() {
return "ui.dialogs.contexts";
}
public static class UsersMultipleOptionsPanel extends AbstractMultipleOptionsTablePanel<User> {
private static final long serialVersionUID = -7216673905642941770L;
private static final String REMOVE_DIALOG_TITLE = Constant.messages
.getString("users.dialog.remove.title");
private static final String REMOVE_DIALOG_TEXT = Constant.messages
.getString("users.dialog.remove.text");
private static final String REMOVE_DIALOG_CONFIRM_BUTTON_LABEL = Constant.messages
.getString("users.dialog.remove.button.confirm");
private static final String REMOVE_DIALOG_CANCEL_BUTTON_LABEL = Constant.messages
.getString("users.dialog.remove.button.cancel");
private static final String REMOVE_DIALOG_CHECKBOX_LABEL = Constant.messages
.getString("users.dialog.remove.checkbox.label");
private DialogAddUser addDialog = null;
private DialogModifyUser modifyDialog = null;
private ExtensionUserManagement extension;
private Context uiSharedContext;
public UsersMultipleOptionsPanel(ExtensionUserManagement extension, UsersTableModel model,
int contextId) {
super(model);
this.extension = extension;
getTable().getColumnExt(0).setPreferredWidth(40);
getTable().getColumnExt(1).setPreferredWidth(30);
getTable().getColumnExt(1).setMaxWidth(50);
getTable().setSortOrder(2, SortOrder.ASCENDING);
}
@Override
public User showAddDialogue() {
boolean valid = uiSharedContext.getAuthenticationMethod().validateCreationOfAuthenticationCredentials();
if (!valid) {
return null;
}
if (addDialog == null) {
addDialog = new DialogAddUser(View.getSingleton().getOptionsDialog(null), this.extension);
addDialog.pack();
}
addDialog.setWorkingContext(this.uiSharedContext);
addDialog.setVisible(true);
User user = addDialog.getUser();
addDialog.clear();
return user;
}
@Override
public User showModifyDialogue(User user) {
if (modifyDialog == null) {
modifyDialog = new DialogModifyUser(View.getSingleton().getOptionsDialog(null),
this.extension);
modifyDialog.pack();
}
modifyDialog.setWorkingContext(this.uiSharedContext);
modifyDialog.setUser(user);
modifyDialog.setVisible(true);
user = modifyDialog.getUser();
modifyDialog.clear();
return user;
}
@Override
public boolean showRemoveDialogue(User e) {
JCheckBox removeWithoutConfirmationCheckBox = new JCheckBox(REMOVE_DIALOG_CHECKBOX_LABEL);
Object[] messages = { REMOVE_DIALOG_TEXT, " ", removeWithoutConfirmationCheckBox };
int option = JOptionPane.showOptionDialog(View.getSingleton().getMainFrame(), messages,
REMOVE_DIALOG_TITLE, JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, null,
new String[] { REMOVE_DIALOG_CONFIRM_BUTTON_LABEL, REMOVE_DIALOG_CANCEL_BUTTON_LABEL },
null);
if (option == JOptionPane.OK_OPTION) {
setRemoveWithoutConfirmation(removeWithoutConfirmationCheckBox.isSelected());
return true;
}
return false;
}
protected void setWorkingContext(Context context) {
this.uiSharedContext = context;
}
}
@Override
public void initContextData(Session session, Context uiCommonContext) {
this.usersOptionsPanel.setWorkingContext(uiCommonContext);
this.usersTableModel.setUsers(this.contextManager.getUsers());
}
@Override
public void validateContextData(Session session) throws Exception {
// Nothing to validate
}
@Override
public void saveContextData(Session session) throws Exception {
this.contextManager.setUsers(usersTableModel.getUsers());
}
@Override
public void saveTemporaryContextData(Context uiSharedContext) {
// Data is already saved in the uiSharedContext
}
protected UsersTableModel getUsersTableModel() {
return usersTableModel;
}
}