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