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