/*
* Copyright 2013 Amazon Technologies, Inc.
*
* 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://aws.amazon.com/apache2.0
*
* This file 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 com.amazonaws.eclipse.identitymanagement.user;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.TitleAreaDialog;
import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.forms.widgets.FormToolkit;
import com.amazonaws.eclipse.core.AwsToolkitCore;
import com.amazonaws.services.identitymanagement.AmazonIdentityManagement;
import com.amazonaws.services.identitymanagement.model.CreateLoginProfileRequest;
import com.amazonaws.services.identitymanagement.model.UpdateLoginProfileRequest;
import com.amazonaws.services.identitymanagement.model.User;
public class UpdatePasswordDialog extends TitleAreaDialog {
private FormToolkit toolkit;
private Text passwordText;
private Text confirmPasswordText;
private User user;
private boolean hasPassword;
private AmazonIdentityManagement iam;
private UserSummary userSummary;
protected Button okButton;
public UpdatePasswordDialog(AmazonIdentityManagement iam, UserSummary userSummary, Shell parentShell, FormToolkit toolkit, User user, boolean hasPassword) {
super(parentShell);
this.toolkit = toolkit;
this.user = user;
this.hasPassword = hasPassword;
this.iam = iam;
this.userSummary = userSummary;
}
@Override
protected Control createContents(Composite parent) {
Control contents = super.createContents(parent);
if (hasPassword) {
setTitle("Update User Password");
} else {
setTitle("Create User Password");
}
setTitleImage(AwsToolkitCore.getDefault().getImageRegistry().get(AwsToolkitCore.IMAGE_AWS_LOGO));
okButton = getButton(IDialogConstants.OK_ID);
validate();
return contents;
}
@Override
protected void configureShell(Shell shell) {
super.configureShell(shell);
if (hasPassword) {
shell.setText("Update User Password");
} else {
shell.setText("Create User Password");
}
shell.setMinimumSize(600, 400);
}
@Override
protected Control createDialogArea(Composite parent) {
Control control;
control = createContentPasswordLayout(parent);
return control;
}
private Composite createContentPasswordLayout(Composite parent) {
Composite composite = (Composite) super.createDialogArea(parent);
composite.setLayout(new GridLayout(1, false));
composite.setBackground(toolkit.getColors().getBackground());
GridDataFactory gridDataFactory = GridDataFactory.swtDefaults().align(SWT.FILL, SWT.TOP).grab(true, false).minSize(200, SWT.DEFAULT).span(2, SWT.DEFAULT).hint(200, SWT.DEFAULT);
toolkit.createLabel(composite, "Password:");
passwordText = toolkit.createText(composite, "", SWT.BORDER);
gridDataFactory.copy().span(2, SWT.DEFAULT).applyTo(passwordText);
toolkit.createLabel(composite, "Confirm Password:");
passwordText.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent e) {
validate();
}
});
confirmPasswordText = toolkit.createText(composite, "", SWT.BORDER);
gridDataFactory.copy().span(2, SWT.DEFAULT).applyTo(confirmPasswordText);
confirmPasswordText.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent e) {
validate();
}
});
return composite;
}
private void createPassword(String password) {
iam.createLoginProfile(new CreateLoginProfileRequest().withPassword(password).withUserName(user.getUserName()));
}
private void updatePassword(String password) {
iam.updateLoginProfile(new UpdateLoginProfileRequest().withPassword(password).withUserName(user.getUserName()));
}
@Override
protected void okPressed() {
final String password = passwordText.getText();
if (hasPassword) {
new Job("Update password") {
@Override
protected IStatus run(IProgressMonitor monitor) {
try {
updatePassword(password);
userSummary.refresh();
return Status.OK_STATUS;
} catch (Exception e) {
return new Status(Status.ERROR, AwsToolkitCore.PLUGIN_ID, "Unable to create the password: " + e.getMessage(), e);
}
}
}.schedule();
} else {
new Job("Create password") {
@Override
protected IStatus run(IProgressMonitor monitor) {
try {
createPassword(password);
userSummary.refresh();
return Status.OK_STATUS;
} catch (Exception e) {
return new Status(Status.ERROR, AwsToolkitCore.PLUGIN_ID, "Unable to update the password: " + e.getMessage(), e);
}
}
}.schedule();
}
super.okPressed();
}
private void validate() {
if (passwordText.getText() == null || passwordText.getText().length() <= 0) {
setErrorMessage("Please input a valid password.");
okButton.setEnabled(false);
return;
}
if (confirmPasswordText.getText() == null || confirmPasswordText.getText().length() <= 0 || (!confirmPasswordText.getText().equals(passwordText.getText()))) {
setErrorMessage("Password fields do not match.");
okButton.setEnabled(false);
return;
}
okButton.setEnabled(true);
setErrorMessage(null);
}
}