1
2
3
4
5
6
7
8
9
10
11 package org.eclipse.jgit.internal.transport.ssh.jsch;
12
13 import java.util.ArrayList;
14 import java.util.Arrays;
15 import java.util.List;
16
17 import org.eclipse.jgit.transport.CredentialItem;
18 import org.eclipse.jgit.transport.CredentialsProvider;
19 import org.eclipse.jgit.transport.URIish;
20
21 import com.jcraft.jsch.Session;
22 import com.jcraft.jsch.UIKeyboardInteractive;
23 import com.jcraft.jsch.UserInfo;
24
25
26
27
28
29 public class CredentialsProviderUserInfo implements UserInfo,
30 UIKeyboardInteractive {
31 private final URIish uri;
32
33 private final CredentialsProvider provider;
34
35 private String password;
36
37 private String passphrase;
38
39
40
41
42
43
44
45
46
47 public CredentialsProviderUserInfo(Session session,
48 CredentialsProvider credentialsProvider) {
49 this.uri = createURI(session);
50 this.provider = credentialsProvider;
51 }
52
53 private static URIish createURI(Session session) {
54 URIish uri = new URIish();
55 uri = uri.setScheme("ssh");
56 uri = uri.setUser(session.getUserName());
57 uri = uri.setHost(session.getHost());
58 uri = uri.setPort(session.getPort());
59 return uri;
60 }
61
62
63 @Override
64 public String getPassword() {
65 return password;
66 }
67
68
69 @Override
70 public String getPassphrase() {
71 return passphrase;
72 }
73
74
75 @Override
76 public boolean promptPassphrase(String msg) {
77 CredentialItem.StringType v = newPrompt(msg);
78 if (provider.get(uri, v)) {
79 passphrase = v.getValue();
80 return true;
81 }
82 passphrase = null;
83 return false;
84 }
85
86
87 @Override
88 public boolean promptPassword(String msg) {
89 CredentialItem.Password p = new CredentialItem.Password(msg);
90 if (provider.get(uri, p)) {
91 password = new String(p.getValue());
92 return true;
93 }
94 password = null;
95 return false;
96 }
97
98 private CredentialItem.StringType newPrompt(String msg) {
99 return new CredentialItem.StringType(msg, true);
100 }
101
102
103 @Override
104 public boolean promptYesNo(String msg) {
105 CredentialItem.YesNoType v = new CredentialItem.YesNoType(msg);
106 return provider.get(uri, v) && v.getValue();
107 }
108
109
110 @Override
111 public void showMessage(String msg) {
112 provider.get(uri, new CredentialItem.InformationalMessage(msg));
113 }
114
115
116 @Override
117 public String[] promptKeyboardInteractive(String destination, String name,
118 String instruction, String[] prompt, boolean[] echo) {
119 CredentialItem.StringType[] v = new CredentialItem.StringType[prompt.length];
120 for (int i = 0; i < prompt.length; i++)
121 v[i] = new CredentialItem.StringType(prompt[i], !echo[i]);
122
123 List<CredentialItem> items = new ArrayList<>();
124 if (instruction != null && instruction.length() > 0)
125 items.add(new CredentialItem.InformationalMessage(instruction));
126 items.addAll(Arrays.asList(v));
127
128 if (!provider.get(uri, items))
129 return null;
130
131 String[] result = new String[v.length];
132 for (int i = 0; i < v.length; i++)
133 result[i] = v[i].getValue();
134 return result;
135 }
136 }