bug4811: supports generating SSH keys

This commit is contained in:
Axel Uhl committed 2021-01-19 12:34:09 +01:00
1 parent 77b724c873
commit c538241de9
6 files changed
+128 -4

No files matched your search

@@ -1,6 +1,7 @@
package com.sap.sailing.landscape.ui.client;
import com.google.gwt.user.client.ui.FileUpload;
import com.google.gwt.user.client.ui.FocusWidget;
import com.google.gwt.user.client.ui.FormPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.TextArea;
@@ -79,7 +80,6 @@ public class AddSshKeyDialog extends DataEntryDialog<Triple<String, String, Stri
verticalPanel.add(new Label(stringMessages.name()));
verticalPanel.add(keyPairNameBox);
verticalPanel.add(new Label(stringMessages.publicKey()));
publicKeyFileChooser.getElement().setPropertyString("mutliple", "multiple");
verticalPanel.add(publicKeyFileChooser);
verticalPanel.add(publicKeyArea);
verticalPanel.add(new Label(stringMessages.privateKey()));
@@ -88,6 +88,11 @@ public class AddSshKeyDialog extends DataEntryDialog<Triple<String, String, Stri
return result;
}
@Override
protected FocusWidget getInitialFocusWidget() {
return keyPairNameBox;
}
@Override
protected Triple<String, String, String> getResult() {
return new Triple<>(keyPairNameBox.getValue(), publicKeyArea.getValue(), privateKeyArea.getValue());
@@ -0,0 +1,76 @@
package com.sap.sailing.landscape.ui.client;
import com.google.gwt.user.client.ui.FocusWidget;
import com.google.gwt.user.client.ui.FormPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.PasswordTextBox;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;
import com.sap.sailing.landscape.ui.client.i18n.StringMessages;
import com.sap.sse.common.Util;
import com.sap.sse.common.Util.Triple;
import com.sap.sse.gwt.client.dialog.DataEntryDialog;
/**
* Supports generating an SSH key. Result is the key pair name, the passphrase and the repeated passphrase which
* is expected to equal the passphrase.
*
* @author Axel Uhl (D043530)
*
*/
public class GenerateSshKeyDialog extends DataEntryDialog<Triple<String, String, String>> {
private final TextBox keyPairNameBox;
private final PasswordTextBox passphraseBox;
private final PasswordTextBox passphraseConfirmBox;
private final StringMessages stringMessages;
public GenerateSshKeyDialog(StringMessages stringMessages,
DialogCallback<Triple<String, String, String>> callback) {
super(stringMessages.sshKeys(), stringMessages.sshKeys(), stringMessages.ok(), stringMessages.cancel(), new Validator<Triple<String, String, String>>() {
@Override
public String getErrorMessage(Triple<String, String, String> valueToValidate) {
if (!Util.hasLength(valueToValidate.getA())) {
return stringMessages.pleaseProvideKeyPairName();
} else if (!Util.hasLength(valueToValidate.getB())) {
return stringMessages.pleaseProvidePassphrase();
} else if (!Util.hasLength(valueToValidate.getC())) {
return stringMessages.pleaseRepeatPassphrase();
} else if (!valueToValidate.getB().equals(valueToValidate.getC())) {
return stringMessages.passphrasesDontMatch();
} else {
return null;
}
}
}, callback);
this.stringMessages = stringMessages;
keyPairNameBox = createTextBox("", 20);
passphraseBox = createPasswordTextBox("");
passphraseConfirmBox = createPasswordTextBox("");
}
@Override
protected Widget getAdditionalWidget() {
final FormPanel result = new FormPanel();
final VerticalPanel verticalPanel = new VerticalPanel();
result.add(verticalPanel);
verticalPanel.add(new Label(stringMessages.name()));
verticalPanel.add(keyPairNameBox);
verticalPanel.add(new Label(stringMessages.password()));
verticalPanel.add(passphraseBox);
verticalPanel.add(new Label(stringMessages.passwordRepeat()));
verticalPanel.add(passphraseConfirmBox);
return result;
}
@Override
protected FocusWidget getInitialFocusWidget() {
return keyPairNameBox;
}
@Override
protected Triple<String, String, String> getResult() {
return new Triple<>(keyPairNameBox.getValue(), passphraseBox.getValue(), passphraseConfirmBox.getValue());
}
}
@@ -43,6 +43,10 @@ public class SshKeyManagementPanel extends VerticalPanel {
openAddSshKeyDialog(stringMessages, awsAccessKeyProvider);
});
addButton.setEnabled(regionSelectionModel.getSelectedObject() != null);
final Button generateButton = buttonPanel.addCreateAction(stringMessages.generate(), ()->{
openGenerateSshKeyDialog(stringMessages, awsAccessKeyProvider);
});
generateButton.setEnabled(regionSelectionModel.getSelectedObject() != null);
sshKeyTable =
new TableWrapperWithSingleSelectionAndFilter<SSHKeyPairDTO, StringMessages, AdminConsoleTableResources>(stringMessages, errorReporter, /* enablePager */ true,
Optional.of(new EntityIdentityComparator<SSHKeyPairDTO>() {
@@ -88,9 +92,37 @@ public class SshKeyManagementPanel extends VerticalPanel {
showKeysInRegion(awsAccessKeyProvider.getAwsAccessKeyId(), awsAccessKeyProvider.getAwsSecret(),
regionSelectionModel.getSelectedObject());
addButton.setEnabled(regionSelectionModel.getSelectedObject() != null);
generateButton.setEnabled(regionSelectionModel.getSelectedObject() != null);
});
}
private void openGenerateSshKeyDialog(StringMessages stringMessages, AwsAccessKeyProvider awsAccessKeyProvider) {
new GenerateSshKeyDialog(stringMessages,
new DialogCallback<Triple<String, String, String>>() {
@Override
public void ok(Triple<String, String, String> keyPairNameAndPassphrases) {
landscapeManagementService.generateSshKeyPair(awsAccessKeyProvider.getAwsAccessKeyId(),
awsAccessKeyProvider.getAwsSecret(), regionSelectionModel.getSelectedObject(),
keyPairNameAndPassphrases.getA(), keyPairNameAndPassphrases.getB(),
new AsyncCallback<SSHKeyPairDTO>() {
@Override
public void onFailure(Throwable caught) {
errorReporter.reportError(caught.getMessage());
}
@Override
public void onSuccess(SSHKeyPairDTO result) {
sshKeyTable.add(result);
}
});
}
@Override
public void cancel() {
}
}).show();
}
private void openAddSshKeyDialog(StringMessages stringMessages, AwsAccessKeyProvider awsAccessKeyProvider) {
new AddSshKeyDialog(stringMessages,
new DialogCallback<Triple<String, String, String>>() {
@@ -114,7 +146,6 @@ public class SshKeyManagementPanel extends VerticalPanel {
@Override
public void cancel() {
// TODO Implement Type1610991600832.cancel(...)
}
}).show();
}
@@ -25,4 +25,8 @@ com.sap.sse.gwt.adminconsole.StringMessages {
String pleaseProvidePublicKey();
String pleaseProvidePrivateKey();
String pleaseProvideKeyPairName();
String generate();
String pleaseProvidePassphrase();
String pleaseRepeatPassphrase();
String passphrasesDontMatch();
}
@@ -13,4 +13,8 @@ publicKey=Public key
privateKey=Private key
pleaseProvideKeyPairName=Please provide key pair name
pleaseProvidePublicKey=Please provide a public key
pleaseProvidePrivateKey=Please provide a private key
pleaseProvidePrivateKey=Please provide a private key
generate=Generate
pleaseProvidePassphrase=Please provide passphrase for private key
pleaseRepeatPassphrase=Please repeat passphrase for private key
passphrasesDontMatch=The two passphrases don''t match
@@ -13,4 +13,8 @@ publicKey=
privateKey=Geheimer Schlüssel
pleaseProvideKeyPairName=Bitte den Namen des Schlüsselpaares angeben
pleaseProvidePublicKey=Bitte öffentlichen Schlüssel angeben
pleaseProvidePrivateKey=Bitte geheimen Schlüssel angeben
pleaseProvidePrivateKey=Bitte geheimen Schlüssel angeben
generate=Erzeugen
pleaseProvidePassphrase=Bitte ein Passwort zur Verschlüsselung des geheimen Schlüssels angeben
pleaseRepeatPassphrase=Bitte das Passwort zur Verschlüsselung des geheimen Schlüssels wiederholen
passphrasesDontMatch=Die beiden Passwörter stimmen nicht überein