/*
* 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.layout.GridDataFactory;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.eclipse.ui.statushandlers.StatusManager;
import com.amazonaws.eclipse.core.AwsToolkitCore;
import com.amazonaws.eclipse.identitymanagement.IdentityManagementPlugin;
import com.amazonaws.services.identitymanagement.AmazonIdentityManagement;
import com.amazonaws.services.identitymanagement.model.DeleteLoginProfileRequest;
import com.amazonaws.services.identitymanagement.model.GetLoginProfileRequest;
import com.amazonaws.services.identitymanagement.model.ListGroupsForUserRequest;
import com.amazonaws.services.identitymanagement.model.ListGroupsForUserResult;
import com.amazonaws.services.identitymanagement.model.User;
public class UserSummary extends Composite {
private User user;
private final Text userARNLable;
private final Text havePasswordLabel;
private final Text groupsLabel;
private final Text pathLabel;
private final Text creationTimeLabel;
private final Button updatePassowrdButton;
private Button removePasswordButton;
private Button manageAccessKeysButton;
private boolean hasPassword;
private AmazonIdentityManagement iam;
public UserSummary(final AmazonIdentityManagement iam, Composite parent, final FormToolkit toolkit) {
super(parent, SWT.NONE);
GridDataFactory gridDataFactory = GridDataFactory.swtDefaults()
.align(SWT.FILL, SWT.TOP).grab(true, false).minSize(200, SWT.DEFAULT).hint(200, SWT.DEFAULT);
this.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false));
this.setLayout(new GridLayout(4, false));
this.setBackground(toolkit.getColors().getBackground());
toolkit.createLabel(this, "User ARN:");
userARNLable = toolkit.createText(this, "", SWT.READ_ONLY | SWT.NONE);
gridDataFactory.applyTo(userARNLable);
toolkit.createLabel(this, "Groups:");
groupsLabel = toolkit.createText(this, "", SWT.READ_ONLY | SWT.NONE);
gridDataFactory.applyTo(groupsLabel);
toolkit.createLabel(this, "Path:");
pathLabel = toolkit.createText(this, "", SWT.READ_ONLY | SWT.NONE);
gridDataFactory.applyTo(pathLabel);
toolkit.createLabel(this, "Creation Time:");
creationTimeLabel = toolkit.createText(this, "", SWT.READ_ONLY | SWT.NONE);
gridDataFactory.applyTo(creationTimeLabel);
toolkit.createLabel(this, "Has Password:");
havePasswordLabel = toolkit.createText(this, "", SWT.READ_ONLY | SWT.NONE);
gridDataFactory.applyTo(havePasswordLabel);
removePasswordButton = toolkit.createButton(this, "Remove Password", SWT.PUSH);
removePasswordButton.addSelectionListener(new SelectionListener() {
public void widgetSelected(SelectionEvent e) {
new Job("Remove password") {
@Override
protected IStatus run(IProgressMonitor monitor) {
try {
removePassword();
refresh();
return Status.OK_STATUS;
} catch(Exception e) {
return new Status(Status.ERROR, AwsToolkitCore.PLUGIN_ID, "Unable to delete the password: " + e.getMessage(), e);
}
}
}.schedule();
}
public void widgetDefaultSelected(SelectionEvent e) {
}
});
removePasswordButton.setEnabled(false);
updatePassowrdButton = toolkit.createButton(this, "Update Password", SWT.PUSH);
updatePassowrdButton.setEnabled(false);
updatePassowrdButton.addSelectionListener(new SelectionListener() {
public void widgetSelected(SelectionEvent e) {
new UpdatePasswordDialog(iam, UserSummary.this, Display.getCurrent().getActiveShell(), toolkit, user, hasPassword).open();
}
public void widgetDefaultSelected(SelectionEvent e) {
}
});
manageAccessKeysButton = toolkit.createButton(this, "Manage Access Keys", SWT.PUSH);
manageAccessKeysButton.addSelectionListener((new SelectionListener() {
public void widgetSelected(SelectionEvent e) {
new UserCredentialManagementDialog(iam, Display.getCurrent().getActiveShell(), user.getUserName()).open();
}
public void widgetDefaultSelected(SelectionEvent e) {
}
}));
manageAccessKeysButton.setEnabled(false);
this.iam = iam;
}
public void setUser(User user) {
this.user = user;
refresh();
if (user != null) {
updatePassowrdButton.setEnabled(true);
removePasswordButton.setEnabled(true);
manageAccessKeysButton.setEnabled(true);
} else {
updatePassowrdButton.setEnabled(false);
removePasswordButton.setEnabled(false);
manageAccessKeysButton.setEnabled(false);
}
}
public void refresh() {
new LoadUserSummaryThread().start();
}
private class LoadUserSummaryThread extends Thread {
@Override
public void run() {
try {
Display.getDefault().asyncExec(new Runnable() {
public void run() {
if (user != null) {
userARNLable.setText(user.getArn());
pathLabel.setText(user.getPath());
creationTimeLabel.setText(user.getCreateDate().toString());
try {
iam.getLoginProfile(new GetLoginProfileRequest().withUserName(user.getUserName()));
havePasswordLabel.setText("yes");
removePasswordButton.setEnabled(true);
hasPassword = true;
} catch (Exception e) {
havePasswordLabel.setText("no");
removePasswordButton.setEnabled(false);
hasPassword = false;
}
try {
ListGroupsForUserResult listGroupsForUserResult = iam.listGroupsForUser(new ListGroupsForUserRequest().withUserName(user.getUserName()));
groupsLabel.setText(Integer.toString(listGroupsForUserResult.getGroups().size()));
} catch (Exception e) {
groupsLabel.setText("0");
}
} else {
userARNLable.setText("");
pathLabel.setText("");
creationTimeLabel.setText("");
havePasswordLabel.setText("");
groupsLabel.setText("");
}
}});
} catch (Exception e) {
Status status = new Status(IStatus.WARNING, IdentityManagementPlugin.PLUGIN_ID, "Unable to describe user summary", e);
StatusManager.getManager().handle(status, StatusManager.LOG);
}
}
}
private void removePassword() {
iam.deleteLoginProfile(new DeleteLoginProfileRequest().withUserName(user.getUserName()));
}
}