Skip to content

Commit fd36db2

Browse files
author
Ryan Baxter
authored
Support for ssh key with passphrase using Apache MINA (#2209)
Fixes #2201
1 parent 97cc9c8 commit fd36db2

File tree

2 files changed

+22
-18
lines changed

2 files changed

+22
-18
lines changed

spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/support/PassphraseCredentialsProvider.java

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -31,17 +31,17 @@ public class PassphraseCredentialsProvider extends CredentialsProvider {
3131
/**
3232
* Prompt to skip iteration for.
3333
*/
34-
public static final String PROMPT = "Passphrase for";
34+
public static final String PROMPT = "Passphrase";
3535

36-
private final String passphrase;
36+
private final char[] passphrase;
3737

3838
/**
3939
* Initialize the provider with a the ssh passphrase.
4040
* @param passphrase passphrase to populate the credential items with
4141
*/
4242
public PassphraseCredentialsProvider(String passphrase) {
4343
super();
44-
this.passphrase = passphrase;
44+
this.passphrase = passphrase.toCharArray();
4545
}
4646

4747
/**
@@ -58,12 +58,13 @@ public boolean isInteractive() {
5858
@Override
5959
public boolean supports(CredentialItem... items) {
6060
for (final CredentialItem item : items) {
61-
if (item instanceof CredentialItem.StringType && item.getPromptText().startsWith(PROMPT)) {
61+
if (item instanceof CredentialItem.InformationalMessage) {
6262
continue;
6363
}
64-
else {
65-
return false;
64+
if (item instanceof CredentialItem.Password && item.getPromptText().equals(PROMPT)) {
65+
continue;
6666
}
67+
return false;
6768
}
6869
return true;
6970
}
@@ -80,8 +81,11 @@ public boolean supports(CredentialItem... items) {
8081
@Override
8182
public boolean get(URIish uri, CredentialItem... items) throws UnsupportedCredentialItem {
8283
for (final CredentialItem item : items) {
83-
if (item instanceof CredentialItem.StringType && item.getPromptText().startsWith(PROMPT)) {
84-
((CredentialItem.StringType) item).setValue(this.passphrase);
84+
if (item instanceof CredentialItem.InformationalMessage) {
85+
continue;
86+
}
87+
if (item instanceof CredentialItem.Password && item.getPromptText().equals(PROMPT)) {
88+
((CredentialItem.Password) item).setValue(this.passphrase);
8589
continue;
8690
}
8791
throw new UnsupportedCredentialItem(uri, item.getClass().getName() + ":" + item.getPromptText());

spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/environment/JGitEnvironmentRepositoryTests.java

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -916,12 +916,11 @@ public void passphraseShouldSetCredentials() throws Exception {
916916
CredentialsProvider provider = mockCloneCommand.getCredentialsProvider();
917917
assertThat(provider.isInteractive()).isFalse();
918918

919-
CredentialItem.StringType stringCredential = new CredentialItem.StringType(PassphraseCredentialsProvider.PROMPT,
920-
true);
919+
CredentialItem.Password credential = new CredentialItem.Password(PassphraseCredentialsProvider.PROMPT);
921920

922-
assertThat(provider.supports(stringCredential)).isTrue();
923-
provider.get(new URIish(), stringCredential);
924-
assertThat(passphrase).isEqualTo(stringCredential.getValue());
921+
assertThat(provider.supports(credential)).isTrue();
922+
provider.get(new URIish(), credential);
923+
assertThat(passphrase.toCharArray()).isEqualTo(credential.getValue());
925924
}
926925

927926
@Test
@@ -945,12 +944,13 @@ public void gitCredentialsProviderFactoryCreatesPassphraseProvider() throws Exce
945944
CredentialsProvider provider = mockCloneCommand.getCredentialsProvider();
946945
assertThat(provider.isInteractive()).isFalse();
947946

948-
CredentialItem.StringType stringCredential = new CredentialItem.StringType(PassphraseCredentialsProvider.PROMPT,
949-
true);
947+
CredentialItem.InformationalMessage informational = new CredentialItem.InformationalMessage(
948+
"Passphrase required for ssh key");
949+
CredentialItem.Password credential = new CredentialItem.Password(PassphraseCredentialsProvider.PROMPT);
950950

951-
assertThat(provider.supports(stringCredential)).isTrue();
952-
provider.get(new URIish(), stringCredential);
953-
assertThat(passphrase).isEqualTo(stringCredential.getValue());
951+
assertThat(provider.supports(credential)).isTrue();
952+
provider.get(new URIish(), informational, credential);
953+
assertThat(passphrase.toCharArray()).isEqualTo(credential.getValue());
954954

955955
}
956956

0 commit comments

Comments
 (0)