/*
* 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 java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.jface.dialogs.MessageDialog;
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.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.FileDialog;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.statushandlers.StatusManager;
import com.amazonaws.eclipse.core.AwsToolkitCore;
import com.amazonaws.eclipse.identitymanagement.IdentityManagementPlugin;
import com.amazonaws.eclipse.identitymanagement.user.UserCredentialManagementDialog.AccessKeyTable;
import com.amazonaws.services.identitymanagement.AmazonIdentityManagement;
import com.amazonaws.services.identitymanagement.model.CreateAccessKeyRequest;
import com.amazonaws.services.identitymanagement.model.CreateAccessKeyResult;
public class NewAccessKeyDialog extends MessageDialog {
private String accessKeyIdLabelContent = "Access Key Id: ";
private String secretAccessKeyContent = "Secret Access Key: ";
private AmazonIdentityManagement iam;
private String userName;
private Text accessKeyIdText;
private Text secretKeyText;
private AccessKeyTable accessKeyTable;
private Button downloadButton;
private CreateAccessKeyResult createAccessKeyResult;
public NewAccessKeyDialog(AmazonIdentityManagement iam, String userName, AccessKeyTable accessKeyTable) {
super(Display.getCurrent().getActiveShell(), "Manage Access Key", null, null, MessageDialog.NONE, new String[] { "OK", "Cancel" }, 0);
this.iam = iam;
this.userName = userName;
this.accessKeyTable = accessKeyTable;
}
@Override
protected Control createCustomArea(Composite parent) {
new Label(parent, SWT.NONE).setText("This is the last time these user security credentials will be available for download. You can manage \n and recreate these credentials any time.\n");
accessKeyIdText = new Text(parent, SWT.READ_ONLY);
accessKeyIdText.setText(accessKeyIdLabelContent);
accessKeyIdText.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_YELLOW));
GridDataFactory.fillDefaults().grab(true, false).applyTo(accessKeyIdText);
secretKeyText = new Text(parent, SWT.READ_ONLY);
secretKeyText.setText(secretAccessKeyContent);
secretKeyText.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_YELLOW));
GridDataFactory.fillDefaults().grab(true, false).applyTo(secretKeyText);
downloadButton = new Button(parent, SWT.PUSH);
downloadButton.setImage(AwsToolkitCore.getDefault().getImageRegistry().get(AwsToolkitCore.IMAGE_DOWNLOAD));
downloadButton.setText("Download");
// The button will be enabled after the new key has been created
downloadButton.setEnabled(false);
downloadButton.addSelectionListener(new SelectionListener() {
public void widgetSelected(SelectionEvent e) {
FileDialog fd = new FileDialog(Display.getCurrent().getActiveShell(), SWT.SAVE);
fd.setText("Save As");
fd.setFileName("credentials.csv");
String[] filterExt = { "*.csv" };
fd.setFilterExtensions(filterExt);
String path = fd.open();
if (path != null) {
try {
saveFile(path);
} catch (Exception exception) {
Status status = new Status(IStatus.ERROR, IdentityManagementPlugin.PLUGIN_ID, "Unable to download the file: " + exception.getMessage(), exception);
StatusManager.getManager().handle(status, StatusManager.SHOW);
}
}
}
public void widgetDefaultSelected(SelectionEvent e) {
}
});
new CreateAccessKeyThread().start();
return parent;
}
// Save the file
private void saveFile(String fileName) throws IOException {
File f = new File(fileName);
// Check whether the file already exists.
if (f.createNewFile() == false) {
throw new IOException("File already exists " + fileName);
}
String content = "";
FileWriter fstream = new FileWriter(f.getAbsoluteFile());
BufferedWriter out = new BufferedWriter(fstream);
out.write("\"User Name\",\"Access Key Id\",\"Secret Access Key\"\n");
content += "\"" + userName + "\",";
content += "\"" + createAccessKeyResult.getAccessKey().getAccessKeyId() + "\",";
content += "\"" + createAccessKeyResult.getAccessKey().getSecretAccessKey() + "\"";
out.write(content);
out.close();
}
// Create the new access key and update the UI
private class CreateAccessKeyThread extends Thread {
@Override
public void run() {
Display.getDefault().asyncExec(new Runnable() {
public void run() {
try {
createAccessKeyResult = iam.createAccessKey(new CreateAccessKeyRequest().withUserName(userName));
accessKeyIdLabelContent += createAccessKeyResult.getAccessKey().getAccessKeyId();
secretAccessKeyContent += createAccessKeyResult.getAccessKey().getSecretAccessKey();
accessKeyIdText.setText(accessKeyIdLabelContent);
secretKeyText.setText(secretAccessKeyContent);
downloadButton.setEnabled(true);
accessKeyTable.refresh();
} catch (Exception e) {
NewAccessKeyDialog.this.close();
Status status = new Status(IStatus.ERROR, IdentityManagementPlugin.PLUGIN_ID, "Unable to create access key: " + e.getMessage(), e);
StatusManager.getManager().handle(status, StatusManager.SHOW);
}
}
});
}
}
}