You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

CredentialsProviderUserInfo.java 3.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. /*
  2. * Copyright (C) 2010, Google Inc. and others
  3. *
  4. * This program and the accompanying materials are made available under the
  5. * terms of the Eclipse Distribution License v. 1.0 which is available at
  6. * https://www.eclipse.org/org/documents/edl-v10.php.
  7. *
  8. * SPDX-License-Identifier: BSD-3-Clause
  9. */
  10. //TODO(ms): move to org.eclipse.jgit.ssh.jsch in 6.0
  11. package org.eclipse.jgit.transport;
  12. import java.util.ArrayList;
  13. import java.util.Arrays;
  14. import java.util.List;
  15. import com.jcraft.jsch.Session;
  16. import com.jcraft.jsch.UIKeyboardInteractive;
  17. import com.jcraft.jsch.UserInfo;
  18. /**
  19. * A JSch {@link com.jcraft.jsch.UserInfo} adapter for a
  20. * {@link org.eclipse.jgit.transport.CredentialsProvider}.
  21. */
  22. public class CredentialsProviderUserInfo implements UserInfo,
  23. UIKeyboardInteractive {
  24. private final URIish uri;
  25. private final CredentialsProvider provider;
  26. private String password;
  27. private String passphrase;
  28. /**
  29. * Wrap a CredentialsProvider to make it suitable for use with JSch.
  30. *
  31. * @param session
  32. * the JSch session this UserInfo will support authentication on.
  33. * @param credentialsProvider
  34. * the provider that will perform the authentication.
  35. */
  36. public CredentialsProviderUserInfo(Session session,
  37. CredentialsProvider credentialsProvider) {
  38. this.uri = createURI(session);
  39. this.provider = credentialsProvider;
  40. }
  41. private static URIish createURI(Session session) {
  42. URIish uri = new URIish();
  43. uri = uri.setScheme("ssh"); //$NON-NLS-1$
  44. uri = uri.setUser(session.getUserName());
  45. uri = uri.setHost(session.getHost());
  46. uri = uri.setPort(session.getPort());
  47. return uri;
  48. }
  49. /** {@inheritDoc} */
  50. @Override
  51. public String getPassword() {
  52. return password;
  53. }
  54. /** {@inheritDoc} */
  55. @Override
  56. public String getPassphrase() {
  57. return passphrase;
  58. }
  59. /** {@inheritDoc} */
  60. @Override
  61. public boolean promptPassphrase(String msg) {
  62. CredentialItem.StringType v = newPrompt(msg);
  63. if (provider.get(uri, v)) {
  64. passphrase = v.getValue();
  65. return true;
  66. }
  67. passphrase = null;
  68. return false;
  69. }
  70. /** {@inheritDoc} */
  71. @Override
  72. public boolean promptPassword(String msg) {
  73. CredentialItem.Password p = new CredentialItem.Password(msg);
  74. if (provider.get(uri, p)) {
  75. password = new String(p.getValue());
  76. return true;
  77. }
  78. password = null;
  79. return false;
  80. }
  81. private CredentialItem.StringType newPrompt(String msg) {
  82. return new CredentialItem.StringType(msg, true);
  83. }
  84. /** {@inheritDoc} */
  85. @Override
  86. public boolean promptYesNo(String msg) {
  87. CredentialItem.YesNoType v = new CredentialItem.YesNoType(msg);
  88. return provider.get(uri, v) && v.getValue();
  89. }
  90. /** {@inheritDoc} */
  91. @Override
  92. public void showMessage(String msg) {
  93. provider.get(uri, new CredentialItem.InformationalMessage(msg));
  94. }
  95. /** {@inheritDoc} */
  96. @Override
  97. public String[] promptKeyboardInteractive(String destination, String name,
  98. String instruction, String[] prompt, boolean[] echo) {
  99. CredentialItem.StringType[] v = new CredentialItem.StringType[prompt.length];
  100. for (int i = 0; i < prompt.length; i++)
  101. v[i] = new CredentialItem.StringType(prompt[i], !echo[i]);
  102. List<CredentialItem> items = new ArrayList<>();
  103. if (instruction != null && instruction.length() > 0)
  104. items.add(new CredentialItem.InformationalMessage(instruction));
  105. items.addAll(Arrays.asList(v));
  106. if (!provider.get(uri, items))
  107. return null; // cancel
  108. String[] result = new String[v.length];
  109. for (int i = 0; i < v.length; i++)
  110. result[i] = v[i].getValue();
  111. return result;
  112. }
  113. }